Porównanie SQL z NOSQL

Porównanie SQL z NOSQL
0

O ile są wolniejsze lub szybsze bazy SQLowe od baz NOSQLowych? Jakby wziąć np. Mongo i MYSQLA do tego samego zadania, to która baza wypadnie szybciej i o ile?

z góry dzięki.
pozdro.

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
4

O ile są wolniejsze lub szybsze bazy SQLowe od baz NOSQLowych

Nie są.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
neves
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Kraków
  • Postów:1114
4
Wybitny Kaczor napisał(a):

O ile są wolniejsze lub szybsze bazy SQLowe od baz NOSQLowych? Jakby wziąć np. Mongo i MYSQLA do tego samego zadania, to która baza wypadnie szybciej i o ile?

Bazy SQL są to transakcyjne bazy ogólnego przeznaczenia, bazy NoSQL są to bazy wyspecjalizowane do obsługi specyficznych zadań (mamy bazy dokumentowe, grafowe, klucz wartość, i wiele innych zapewne).

Bez podania konkretnego zadania nie da się ich porównać bo ich przeznaczenie jest zupełnie inne, co implikuję że bazę danych się dobiera do zadania, a nie na odwrót.


edytowany 1x, ostatnio: neves
AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Wybitny Kaczor napisał(a):

O ile są wolniejsze lub szybsze bazy SQLowe od baz NOSQLowych? Jakby wziąć np. Mongo i MYSQLA do tego samego zadania, to która baza wypadnie szybciej i o ile?

z góry dzięki.
pozdro.

Ale jak chcesz porównywać? Jeśli w Mongo dasz 1000 sharderów to rząd przyspieszenia może wynosić właśnie 1000, bo mysql nie ma takich możliwości. Przy czym w Mongo ma trudniejszy w optymalizacji język (javascript) i (trochę zgaduję) włożyli mniej pracy w dopieszczenie optymalizatora zapytań, więc Mongo może być szybsze np. 300 razy albo 500. Oczywiście jeśli Twoja baza ma raptem 10 rekordów to przyspieszenia nie zauważysz, mam nadzieję że rozmawiamy o sensownych porównaniach.

Pozd

edytowany 1x, ostatnio: artur_bredzki
AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Shalom napisał(a):

O ile są wolniejsze lub szybsze bazy SQLowe od baz NOSQLowych

Nie są.

Dlaczego nie są?

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
1

Porównywanie wydajności silników baz danych nie jest zadaniem trywialnym. O ile dobrze pamiętam to ms i oracle zastrzegają w EULA ze nie można dowolnie robić i publikować testów porównawczych.
Mnie kojarzy się dość mocno dyskusja rozpoczęta na jakimś angielskim forum. W skrócie ktoś przeszedł z Ms SQL na postgresSQL bo ms mulił, a psql outofbox dzialal szybciej. Wiec wysnuł wniosek psql jest lepszy...
Po kilku poradach dba specjalizujących się w bazach ms, osiągnął lepszą wydajność niż psql.
Tu nie można wysnuć wniosku że mssql lepszy od psql, tylko co najwyżej że warto znać produkt którego się używa....
To jeden z wielu przykładów.
Z drugiej strony porównywanie baz NoSQL z bazami "sql" mija się z celem, bo uzywa się je w innych scenariuszach. Tu raczej temat czy dobrze się dobralo narzędzie do problemu.

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):

Z drugiej strony porównywanie baz NoSQL z bazami "sql" mija się z celem, bo uzywa się je w innych scenariuszach.

Rzadko te scenariusze są aż różne, w końcu jedno i drugie to baza do składowania danych.
W takim przykładowym Mongo można wydzielić shardery w teoretycznie dowolnej ilości, a w bazach sql (o ile się nie mylę)
nie ma takiej możliwoś. Oznacza to, że zapytanie na Mongo czy Hadoop na dużych zbiorach danych może działać
np. 5000 razy szybciej niż na postgresie, mysqlu, mssqlu, sqlite, itd.

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
0

@artur_bredzki ale potwierdzasz to co napisałem wcześniej. Bazę danych się dostraja. Jeżeli nie będę znał shardingu to mogę dojść do wniosku, że po przekroczeniu jakiegoś pułapu baza mongo jest nie wydajna...

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):

@artur_bredzki ale potwierdzasz to co napisałem wcześniej. Bazę danych się dostraja. Jeżeli nie będę znał shardingu to mogę dojść do wniosku, że po przekroczeniu jakiegoś pułapu baza mongo jest nie wydajna...

Potwierdzam że bazy się dostraja, ale to niewiele wnosi do tematu porównania wydajności.

Bazy nosql, przynajmniej takie jak mongo i hadoop, można dostrajać w sposób który jest (o ile wiem) całkowicie niedostępny dla
takich baz sql jak sqlite, mysql,mssql, postgres,oracle. Niedostępny sposób dostrajania o jakim piszę, to zrównoleglenie na
wielu komputerach.

Generalnie bazy sql są bardziej dopracowane, więcej pracy włożnono w dopracowanie sposobu przechowywania danych,
optymalizowanie zapytań, indeksowanie, itd. Inaczej ma się sprawa w przypadku nosql, bazy takie jak mongo i hadoop
nie są nawet uznawane za stabilne. Na przypadkach jedno-wątkowych zapewne bazy sql będą szybsze, tak też
wynika z kilku bardzo prostych testów jakie wykonałem. Jednak gdy takie mongo zainstalujemy np. na 5tys komputerów
to jak to w ogóle porównywać? Może się mylę, mże któraś z wymienionych przeze mnie baz danych ma możliwość
przetwarzania równoległego, może oracle - z tą bazą miałem najmniej do czynienia. Ale jeśli nie mają takich możliwości, to
mongo będzie (w przybliżeniu) tyle razy wydajniejsze, ile mamy sprzętu.

Pozdrawiam

jarekr000000
Wszyskite bazy danych są kiepskie - cytat z Grega Younga. Szczególnie jeśli trzymasz w nich dane. Wydajność to tylko jeden z problemów. Najgorsza jest utrata danych. (Ale tu trzeba przejśc przez prezentację pod tyułem Polyglot Data https://www.youtube.com/watch?v=IOQxEa55tsw)
NO
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 2 lata
  • Postów:430
0

Nie można za bardzo porównać baz danych, tym bardziej nosql z sql'owymi. Każda baza ma swoje mocne i słabsze strony i zależnie od projektu i znajomości danego oprogramowania powinno się ją wybierać. Mając tabelkę z prostą strukturą śmiem twierdzić że sql wygra. Natomiast jeśli w w tabeli w bazie nosql mieli byśmy wszystkie dane a w sql trzeba by było zrobić pierdyliard join'ów to nosql by wygrał (co też zależy od samego zapytania i optymalizacji bazy ale zakładam że w obydwu przypadkach wszystko jest dobrze zrobione).

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
0
artur_bredzki napisał(a):

Potwierdzam że bazy się dostraja, ale to niewiele wnosi do tematu porównania wydajności.

No nie zgodzę się, ze nic nie wnosi, w końcu porównania robi sie w takich samych warunkach, aby były miarodajne.
Co mi z porównania mysql-a z mongo rozsianym na kilku serwerach.

Ja może jestem starej daty, ale mnie uczono, że najpierw należy się zająć poprawą software, a później skalować sprzętowo. Nie jestem specjalistą od baz NoSQL, ale mam wrażenie, ze tu jest podobnie.

Przejaskrawiając, mozna by zaimplementować system z hierarchicznymi danymi w bazie mongoDB, pytanie brzmi po co? I tu wracam do tezy, że narzędzia wybiera sie do konkretnego problemu i porównywanie baz SQL vs noSQL, można potraktować jako ciekawostkę...

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1
Panczo napisał(a):

Ja może jestem starej daty, ale mnie uczono, że najpierw należy się zająć poprawą software, a później skalować sprzętowo. Nie jestem specjalistą od baz NoSQL, ale mam wrażenie, ze tu jest podobnie.

Jesteś starej daty. Przykładowo - jeśli przez cały dzień pracy uda Ci się zmniejszyć zużycie pamięci programu na serwerze o 8GiB to czy będziesz z siebie dumny? Pewnie tak... a biznesowo jest to takie sobie.

W końcu tyle ramu to koszt jakieś 250 PLN. A dzień pracy programisty.... koszt firmy miedzy 500PLN a 4000PLN . Oczywiście jak coś bedzie chodzić długo - to przez rok, ze względu na zużycie prądu, koszty chmury - może się ten dzień zwrócić.

Ale ja nawet jak sam sobie pisze to po prostu czasem biegne do sklepu po nowy RAM - nie mam czasu na pierd... - szkoda tylko, że poprzednia generacja notebooków utknęła na 16gb, a tyle to mi posortowanie 13 integerów zajmuje (Permutation Sortem :-)).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 3x, ostatnio: jarekr000000
abrakadaber
abrakadaber
powiedz, że ten post to jest żart.
jarekr000000
@abrakadaber jedynie fragment o Permutation Sort - tak naprawdę używam tego tylko czasem w zimie jak jest poniżej -5 stopni (może nie działa za szybko, ale za to w domu robi się przyjemnie ciepło).
AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
NickOver napisał(a):

Nie można za bardzo porównać baz danych, tym bardziej nosql z sql'owymi.

Można porównywać pod wieloma względami.

NickOver napisał(a):

Każda baza ma swoje mocne i słabsze strony i zależnie od projektu i znajomości danego oprogramowania powinno się ją wybierać.

Owszem. Ale jeśli baza, albo grupa baz, się nie skaluje, to są jej słabe strony.

NickOver napisał(a):

Mając tabelkę z prostą strukturą śmiem twierdzić że sql wygra.

I tu są indeksy i tu. I tu i tu można wyszukiwać po indeksie, po bit-mapie lub fullscanem. I tu i tu programiści mogą dać ciała i nie zaimplementować wykorzystania indeksu w jakiejś sytuacji. Jednak jeśli obie implementacje co do funkcjonalności i jakości są podobne, to wygra ta, która dobrze się paralelizuje. Myślę, że w mongo jest niewiele gorszej jakości niż popularne bazy sql. Więc przez skalowanie będzie wygrywało - oczywiście nie w przypadku gdy szukamy jednego rekordu i obie bazy mają dobre indeksy.

NickOver napisał(a):

Natomiast jeśli w w tabeli w bazie nosql mieli byśmy wszystkie dane a w sql trzeba by było zrobić pierdyliard join'ów to nosql by wygrał (co też zależy od samego zapytania i optymalizacji bazy ale zakładam że w obydwu przypadkach wszystko jest dobrze zrobione).

</quote> To jest wieloaspektowe. Same JOINY mogą (odwrotnie niż piszesz) pomóc w optymalizacji zapytania. Ale Mongo może zadziać szybciej bez tej optymalizacji dzięki zrównolegleniu.
AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):
artur_bredzki napisał(a):

Potwierdzam że bazy się dostraja, ale to niewiele wnosi do tematu porównania wydajności.

No nie zgodzę się, ze nic nie wnosi, w końcu porównania robi sie w takich samych warunkach, aby były miarodajne.
Co mi z porównania mysql-a z mongo rozsianym na kilku serwerach.

A co mi z tego, że mysql działa 2 razy szybciej, jeśli dokupienie 10 komputerów nic go nie przyspieszy?

Panczo napisał(a):

Ja może jestem starej daty, ale mnie uczono, że najpierw należy się zająć poprawą software, a później skalować sprzętowo. Nie jestem specjalistą od baz NoSQL, ale mam wrażenie, ze tu jest podobnie.

W przypadku zgrubnych optymalizacji, które nie wymagają dużego nakładu pracy, prawdą jest to co napisałeś. Ale pisanie swojej specjalistycznej bazy w C++ to robi się tylko wtedy, gdy z serwerowni znikną chociaż z 3 szafy.

Panczo napisał(a):

Przejaskrawiając, mozna by zaimplementować system z hierarchicznymi danymi w bazie mongoDB, pytanie brzmi po co? I tu wracam do tezy, że narzędzia wybiera sie do konkretnego problemu i porównywanie baz SQL vs noSQL, można potraktować jako ciekawostkę...

Ale w drugą stronę też to działa: jeden system można wykonać w oparciu o wiele różnych baz danych. Porównując działanie systemu na różnych bazach będziemy mieli ciekawe porównanie baz danych.

Pozdrawiam

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
1

Do wszystkich którzy tak zachwalają skalowanie sprzętowe i twierdz, że mam podejście starej daty;)

Skalowanie sprzętowe w pewnych określonych przypadkach jest jak najbardziej ok. Zawsze jednak trzeba zacząć od przyczyny problemu.

Obrazowo i jaskrawie, jak mam dziurę w dachu i kapie mi woda do pokoju, to mogę skupić się na podstawianiu coraz większych misek, a nawet zrobienia systemu odprowadzania wody kapiącej z sufitu, tylko to nie będzie optymalizacja.

Trzeba pamiętać,że bazy danych nie działają jako osobny byt i problemy nie wynikają z ułomności silnika tylko jego wykorzystanie przez np. aplikacje. Zawsze możnadodać RAM-u, węzeł klastra itd. problemem będzie jak to nie rozwiąże problemu.

I tak skalowanie sprzętowe nie jest rozwiązaniem na wszystkie problemy i dokładanie/rozbudowa sprzętów nie zawsze pomaga, najważniejsza jest diagnoza problemu.

Kilka przykładów z branży:

  1. Jak przyszedł boom na nasza-klasa.pl okazalo się, że jedyna serwerowania która to pociągnie to był Amazon (mogę się mylić co do marki ale chyba to był amazon). Co się okazało mimo mozliwości technicznych, około pół roku programiści zmieniali kod aby wykorzystać dobrodziejstwo skalowania...

  2. Kiedyś zostałem poproszony o sprawdzenie dlaczego aplikacja wolno działa, bo wypasiony serwer pododawali ile się ramu i procków a jest wolno.
    Diagnoza:baza miala ponad 9 GB a postawiona była na MS SQL Express (ograniczenie na RAM i procesory)

  3. Kiedyś sprawdzałem mulącą bazę, znowu wypasiony sprzęt.
    Diagnoza: baza nie miała, żadnych indeksów

  4. Byłem trzecim z kolei gościem wezwanym do optymalizacji bo baza zwalniła. Sprawa juz rozchodziła się o zakup nowego serwera, bo stary rozbudowany do granic.
    Diagnoza: uszkodzony dysk macierzy, kontroler przeszedł w tryb protected i maksymalnie zwolnił działanie.

Mógłbym tak długo, wiem że pamięć i sprzęt jest coraz tańszy, ale to nie zwalnia od myślenia nad przyczynami. Widzę jednak ostatnio sporo "specjalistów" którzy jedyne co potrafią zaproponować to rozbudowę sprzętową, bez analizy tego co tak naprawdę jest problemem.

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
0
artur_bredzki napisał(a):

A co mi z tego, że mysql działa 2 razy szybciej, jeśli dokupienie 10 komputerów nic go nie przyspieszy?

Przyspieszy MySQL też da się skalować sprzętowo.

artur_bredzki napisał(a):

W przypadku zgrubnych optymalizacji, które nie wymagają dużego nakładu pracy, prawdą jest to co napisałeś. Ale pisanie swojej specjalistycznej bazy w C++ to robi się tylko wtedy, gdy z serwerowni znikną chociaż z 3 szafy.

Pisząc o warstwie programowej nie piszę o pisaniu własnej db, a diagnozowaniu przyczyn problemu.

artur_bredzki napisał(a):

Ale w drugą stronę też to działa: jeden system można wykonać w oparciu o wiele różnych baz danych. Porównując działanie systemu na różnych bazach będziemy mieli ciekawe porównanie baz danych.

Będzie ciekawe, ale IMO tylko ciekawe, bo cel determinuje narzędzie, nie na odwrót.

edytowany 1x, ostatnio: Panczo
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Wrocław
1
jarekr000000 napisał(a):
Panczo napisał(a):

Ja może jestem starej daty, ale mnie uczono, że najpierw należy się zająć poprawą software, a później skalować sprzętowo. Nie jestem specjalistą od baz NoSQL, ale mam wrażenie, ze tu jest podobnie.

Jesteś starej daty. Przykładowo - jeśli przez cały dzień pracy uda Ci się zmniejszyć zużycie pamięci programu na serwerze o 8GiB to czy będziesz z siebie dumny? Pewnie tak... a biznesowo jest to takie sobie.

W końcu tyle ramu to koszt jakieś 250 PLN. A dzień pracy programisty.... koszt firmy miedzy 500PLN a 4000PLN . Oczywiście jak coś bedzie chodzić długo - to przez rok, ze względu na zużycie prądu, koszty chmury - może się ten dzień zwrócić.

Ale ja nawet jak sam sobie pisze to po prostu czasem biegne do sklepu po nowy RAM - nie mam czasu na pierd... - szkoda tylko, że poprzednia generacja notebooków utknęła na 16gb, a tyle to mi posortowanie 13 integerów zajmuje (Permutation Sortem :-)).

Kiedyś na studiach (tzn. gdzieś w 2009/10 musiało to być) na jakimś seminarium koleś tłumaczył, że u nich w firmie nie optymalizują, bo jak im spada wydajność, to po prostu kupują kolejnego poleasingowego PII 400MHz na giełdzie komputerowej koło klubu Stodoła, i on im obsługuje dodatkowe 5k żądań na sekundę. Technologia to oczywiście PHP.
Tak mi się tylko przypomniało.

PA
Rozumiem, że przyswoiłeś wiedzę i stosujesz w praktyce ;)
somekind
No właśnie nie. Ale widzę, że to chyba popularny wzorzec projektowy. ;)
AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):

Do wszystkich którzy tak zachwalają skalowanie sprzętowe i twierdz, że mam podejście starej daty;)

Ja o czym innym piszę, ciut bardziej w temacie wątku, mam nadzieję że to jest jasne.

Panczo napisał(a):

Skalowanie sprzętowe w pewnych określonych przypadkach jest jak najbardziej ok. Zawsze jednak trzeba zacząć od przyczyny problemu.

To tak jak z porównaniem dwóch samochodów, sprawdzamy który jak szybko jeździ, jednak zawsze trzeba zacząć od wejścia do samochodu i
odpalenia silnika. Zakładamy że problem już jest zdiagnozowany.

Panczo napisał(a):

Obrazowo i jaskrawie, jak mam dziurę w dachu i kapie mi woda do pokoju, to mogę skupić się na podstawianiu coraz większych misek, a nawet zrobienia systemu odprowadzania wody kapiącej z sufitu, tylko to nie będzie optymalizacja.

Przykład który podałeś nie jest dobrą analogią do skalowania. Kapie woda z sufitu. Bez skalowania: podstawiam sztywną tacę ze szklankami. Obojętnie ile szkalnek stoi na tacy, to po napełnieniu jednej muszę podejść i coś zrobić. Ze skalowaniem podstawiam tacę która automatycznie się obraca i podstawia kolejną szklankę.

Panczo napisał(a):

Trzeba pamiętać,że bazy danych nie działają jako osobny byt i problemy nie wynikają z ułomności silnika tylko jego wykorzystanie przez np. aplikacje. Zawsze możnadodać RAM-u, węzeł klastra itd. problemem będzie jak to nie rozwiąże problemu.

To mi się kojarzy z bazą postgresql: baza dobrze się zrównolegla, ale w aplikacji zrównoleglenie w całości zrób se sam.

Panczo napisał(a):

I tak skalowanie sprzętowe nie jest rozwiązaniem na wszystkie problemy i dokładanie/rozbudowa sprzętów nie zawsze pomaga, najważniejsza jest diagnoza problemu.

W ogóle nie ma jednego lekarstwa na wszystkie problemy.

Panczo napisał(a):
  1. Jak przyszedł boom na nasza-klasa.pl okazalo się, że jedyna serwerowania która to pociągnie to był Amazon (mogę się mylić co do marki ale chyba to był amazon). Co się okazało mimo mozliwości technicznych, około pół roku programiści zmieniali kod aby wykorzystać dobrodziejstwo skalowania...

Bo robili to ręcznie (z tego co czytałęm w C++), a nie skorzystali z bazy która oferuje skalowanie.

Panczo napisał(a):
  1. Kiedyś zostałem poproszony o sprawdzenie dlaczego aplikacja wolno działa, bo wypasiony serwer pododawali ile się ramu i procków a jest wolno.
    Diagnoza:baza miala ponad 9 GB a postawiona była na MS SQL Express (ograniczenie na RAM i procesory)

  2. Kiedyś sprawdzałem mulącą bazę, znowu wypasiony sprzęt.
    Diagnoza: baza nie miała, żadnych indeksów

  3. Byłem trzecim z kolei gościem wezwanym do optymalizacji bo baza zwalniła. Sprawa juz rozchodziła się o zakup nowego serwera, bo stary rozbudowany do granic.
    Diagnoza: uszkodzony dysk macierzy, kontroler przeszedł w tryb protected i maksymalnie zwolnił działanie.

To taka optymalizacja na poziomie gimnazujm ;-)

Panczo napisał(a):

Mógłbym tak długo, wiem że pamięć i sprzęt jest coraz tańszy, ale to nie zwalnia od myślenia nad przyczynami. Widzę jednak ostatnio sporo "specjalistów" którzy jedyne co potrafią zaproponować to rozbudowę sprzętową, bez analizy tego co tak naprawdę jest problemem.

To że akurat rozmawiamy o skalowaniu, nie oznacza, że umiemy zaproponować tylko skalowanie.

Pozdrawiam

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):
artur_bredzki napisał(a):

A co mi z tego, że mysql działa 2 razy szybciej, jeśli dokupienie 10 komputerów nic go nie przyspieszy?

Przyspieszy MySQL też da się skalować sprzętowo.

Mogę poprosić jakiegoś linka do tutoriala o skalowaniu MySQL?

Pozdrawiam

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
0

@artur_bredzki nie jestem specem od MySQL, to że wiem, ze można go skalować nie znaczy że wiem jak ;) Ale aby nie być gołosłownym: http://www.oracle.com/us/products/mysql/scaling-web-databases-461055.pdf

Co do pozostałej wypowiedzi do mojego posta to chciałem zwrócić tylko uwagę, że jak już coś się porównuje to robi się to w określonych warunkach dla każdej z baz.
Dlatego należy odrzucić opowiadanie o możliwościach skalowania, bo to do niczego nie prowadzi, mogę porównywać np mondeo z insignią, ale ktoś mi zarzuci, ze wybrałem nie najlepszy silnik, albo że zamiast benzyny mogłem do testów wybrać diesla itd.

Dlatego stoję na stanowisku, że bezpośrednie porównywanie silników jest ciekawe, ale nie do końca miarodajne. Im więcej rozmawiam z ludźmi którzy pozjadali zęby na DBA tym bardziej jestem przekonany, że najważniejsza jest wiedza o produkcie który się używa

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):

@artur_bredzki nie jestem specem od MySQL, to że wiem, ze można go skalować nie znaczy że wiem jak ;) Ale aby nie być gołosłownym: http://www.oracle.com/us/products/mysql/scaling-web-databases-461055.pdf

No właśnie ja też nie wiem jak, a w przypadku postgresa wręcz wiem że nie można (o ile nie napisze się samemu, o ile ktoś nie napisze i się nie skopiuje, itd). W przypadku mongo skalowałem i widziałem jak inny skalują - więc jakieś minimum wiem aby się wypowiadać. Kiedyś napaliłem się i czytałem podobny materiał do postgresa o skalowaniu, ostatecznie jednak z artykułu wynikło, że właśnie trzeba samemu sobie zrobić skalowanie. Spróbuję się wczytać w tekst który podałeś - zobaczymy.

Panczo napisał(a):

Co do pozostałej wypowiedzi do mojego posta to chciałem zwrócić tylko uwagę, że jak już coś się porównuje to robi się to w określonych warunkach dla każdej z baz.

To oczywiste.

Panczo napisał(a):

Dlatego należy odrzucić opowiadanie o możliwościach skalowania, bo to do niczego nie prowadzi, mogę porównywać np mondeo z insignią, ale ktoś mi zarzuci, ze wybrałem nie najlepszy silnik, albo że zamiast benzyny mogłem do testów wybrać diesla itd.

Dlaczego nie widzisz innej możliwości porównywania baz danych? Idąc za Twoim przykładem, trzeba mysqla odpalić na 2xi7 i 64GB RAM, a mongo na Atom 1GB RAM. Można zrobić test uczciwy, obie bazy na tych samych danych, obie na tym samym sprzęcie, obie stuningowane pod dany test.

Panczo napisał(a):

Dlatego stoję na stanowisku, że bezpośrednie porównywanie silników jest ciekawe, ale nie do końca miarodajne. Im więcej rozmawiam z ludźmi którzy pozjadali zęby na DBA tym bardziej jestem przekonany, że najważniejsza jest wiedza o produkcie który się używa

To też oczywiste że najważniejsza jest wiedza o produkcie. I ta wiedza nie wyklucza miarodajności testów. To troche tak, jakbym powiedział Ci: pojedź samochodem na drugi koniec Europy. Ty byś mi odpowiedział, że to nie jest możliwe, bo musisz coś jeść, pić i spać przez tyle czasu. Ja nie mówię, że masz pojechać bez snu, jedzenia i picia :) Tak samo jak nie mówię, że wiedza nie jest ważna. Po prostu zawężam rozmowę do testów i porównań baz danych.

Wyobraź sobie że masz jakiś system. W ramach tego systemu mam np. 10 czasochłonnych zapytań. Projektujesz bazę pod np. 2 silniki sql i 1 no-sql. Optymalizujesz każdą bazę, zakładasz indeksy, jeśli baza umożliwia - dokupujesz sprzętu. Wychodzi Ci, że na jednym silniku wszystkie zapytania działają najszybciej. Dlaczego nie skorzystrać z nauki jaką dał ten test i nie użyć właśnie tego najszybszego silnika?

Pozdrawiam

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
artur_bredzki napisał(a):
Panczo napisał(a):

@artur_bredzki nie jestem specem od MySQL, to że wiem, ze można go skalować nie znaczy że wiem jak ;) Ale aby nie być gołosłownym: http://www.oracle.com/us/products/mysql/scaling-web-databases-461055.pdf

No właśnie ja też nie wiem jak, a w przypadku postgresa wręcz wiem że nie można (o ile nie napisze się samemu, o ile ktoś nie napisze i się nie skopiuje, itd). W przypadku mongo skalowałem i widziałem jak inny skalują - więc jakieś minimum wiem aby się wypowiadać. Kiedyś napaliłem się i czytałem podobny materiał do postgresa o skalowaniu, ostatecznie jednak z artykułu wynikło, że właśnie trzeba samemu sobie zrobić skalowanie. Spróbuję się wczytać w tekst który podałeś - zobaczymy.

Strasznie trudno przebrnąć przez marketingowy bełkot, mało technicznych informacji, a przykładu to chyba żadnego nie ma.
Tabelę umie podzielić na węzły - fajnie. Ale czy w ogole można wykonać joina na podzielonych tabelach?
Nie widzę tam takich możliwości jakie ma mongo.

Pozdrawiam

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
0
artur_bredzki napisał(a):

Dlaczego nie widzisz innej możliwości porównywania baz danych? Idąc za Twoim przykładem, trzeba mysqla odpalić na 2xi7 i 64GB RAM, a mongo na Atom 1GB RAM. Można zrobić test uczciwy, obie bazy na tych samych danych, obie na tym samym sprzęcie, obie stuningowane pod dany test.

Mam wrażenie, ze kręcimy się w kółko ;) Zwracam uwagę, że porównuje dwa silniki: no to biorę serwer na którym testuje (lub dwa bliźniacze) i TYLKO na jednej konfiguracji sprzętowej testuje bazę. Dlatego rozmowa o skalowaniu sprzętowym nie ma sensu (w tym kontekście). Oczywiście możemy rozmawiać o możliwościach, ale to NIE JEST związane z testem. I tylko to staram się zaznaczyć. Nie odbieram nikomu prawa do skalowania, ale warunki brzegowe moją być TAKIE SAME dla wszystkich.

artur_bredzki napisał(a):

Wyobraź sobie że masz jakiś system. W ramach tego systemu mam np. 10 czasochłonnych zapytań. Projektujesz bazę pod np. 2 silniki sql i 1 no-sql. Optymalizujesz każdą bazę, zakładasz indeksy, jeśli baza umożliwia - dokupujesz sprzętu. Wychodzi Ci, że na jednym silniku wszystkie zapytania działają najszybciej. Dlaczego nie skorzystrać z nauki jaką dał ten test i nie użyć właśnie tego najszybszego silnika?

To nie jest prosta zależność wolno/szybko. Przykład: powiedzmy, że mam silnik SQL (nazwijmy go X) i silnik non SQL (nazwijmy go Y). Y nie wspiera kluczy obcych, ale jest niebywale wydajny w insertach. X jest wolniejsze, ale narzut dodatkowych zapytań do Y w celu zapewniania integralnosci niwelują tą róznicę.
Gdzieś kiedyś czytałem, ze jak już optymalizujemy to nie patrzymy na benchmarki, bo na tym etapie jest już za późno.

Co do skalowalności mySQL to gdzieś mi sie obiło dawno temu o uszy, ze to działa i to od osoby zaznajomionej z tematem. Jednak tu musiałby się jakiś specjalista wypowiedzieć...

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):
artur_bredzki napisał(a):

Dlaczego nie widzisz innej możliwości porównywania baz danych? Idąc za Twoim przykładem, trzeba mysqla odpalić na 2xi7 i 64GB RAM, a mongo na Atom 1GB RAM. Można zrobić test uczciwy, obie bazy na tych samych danych, obie na tym samym sprzęcie, obie stuningowane pod dany test.

Mam wrażenie, ze kręcimy się w kółko ;) Zwracam uwagę, że porównuje dwa silniki: no to biorę serwer na którym testuje (lub dwa bliźniacze) i TYLKO na jednej konfiguracji sprzętowej testuje bazę. Dlatego rozmowa o skalowaniu sprzętowym nie ma sensu (w tym kontekście). Oczywiście możemy rozmawiać o możliwościach, ale to NIE JEST związane z testem. I tylko to staram się zaznaczyć. Nie odbieram nikomu prawa do skalowania, ale warunki brzegowe moją być TAKIE SAME dla wszystkich.

Nie rozumiem. Chyba nie chcesz powiedzieć, że testy skalowania nie mają sensu na jednej maszynie?

Panczo napisał(a):
artur_bredzki napisał(a):

Wyobraź sobie że masz jakiś system. W ramach tego systemu mam np. 10 czasochłonnych zapytań. Projektujesz bazę pod np. 2 silniki sql i 1 no-sql. Optymalizujesz każdą bazę, zakładasz indeksy, jeśli baza umożliwia - dokupujesz sprzętu. Wychodzi Ci, że na jednym silniku wszystkie zapytania działają najszybciej. Dlaczego nie skorzystrać z nauki jaką dał ten test i nie użyć właśnie tego najszybszego silnika?

To nie jest prosta zależność wolno/szybko. Przykład: powiedzmy, że mam silnik SQL (nazwijmy go X) i silnik non SQL (nazwijmy go Y). Y nie wspiera kluczy obcych, ale jest niebywale wydajny w insertach. X jest wolniejsze, ale narzut dodatkowych zapytań do Y w celu zapewniania integralnosci niwelują tą róznicę.
Gdzieś kiedyś czytałem, ze jak już optymalizujemy to nie patrzymy na benchmarki, bo na tym etapie jest już za późno.

Oczywiście wynik testu nie musi być taki piękny jaki dla przykładu podałem. Nie musi być tak, że mamy N problematycznych zapytań i na jednym z silników wszystkie N zapytań działaja szybciej.
Może być 10 cieżkich zapytań, 2 mogą dziać najszybciej na silniku X, 3 na silniku Y, 5 na Z, przy czym te 5 zapytań z Z rzadziej się wywołuje niż te 2 z X, a te 3 z Z jeszcze nie wiadomo jak często, bo to będzie zależało od użytkowników. Pewnie że wyniki testów nie muszą w sposób oczywisty wskazywać na najlepszy silnik do danego zastosowania.

Panczo napisał(a):

Co do skalowalności mySQL to gdzieś mi sie obiło dawno temu o uszy, ze to działa i to od osoby zaznajomionej z tematem. Jednak tu musiałby się jakiś specjalista wypowiedzieć...

Wierzę że mysql umie rozbić dane z jednej tabeli na N węzłów. Ale jak na takiej strukturze można wydajnie zrobić JOIN? W pewnym sensie i postgres się paralelizuje, bo ma replikację - tyle że to trochę za mało. Co mi po replikacji, jeśli zapytanie trwa 1000s, a mam maksymalnie 1-2s na wykonanie zapytania?

Pozdrawiam

edytowany 1x, ostatnio: artur_bredzki
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około godziny
  • Postów:3866
0

Artur wróćmy do meritum, odłożę dywagacje na temat metodyki przeprowadzania testów.

Moje zdanie jest takie:

Warto śledzić i sprawdzać, w wolnej chwili nawet dociekać co jest lepsze/gorsze. Z bazami to jest jednak tak, że żaden test/porównanie nie da mi odpowiedzi na pytanie czy MOJE bazy będą wydajniejsze na innym silniku czy nie. Bo porównania nie porównują moich danych i struktur tylko jakieś problemy które mnie nie dotyczą. Wiedza z takich testów to ciekawostka, bo nie uwzględnia mojego środowiska itd.
Nie neguje wyników testów, ale tez na ślepo nie wyciągam wniosków. Dla przykładu co sensownego mozna powiedziec o takim "benchmarku": https://github.com/reoxey/benchmark
Mozna też zapoznać sie z tym https://blog.michaelckennedy.net/2010/04/29/mongodb-vs-sql-server-2008-performance-showdown/ i poczytać komentarze pod postem.

Reasumując sam przymierzam się do uzycia jakiejś bazy No SQL ale nie produkcyjnie tylko w hobbistycznym projekcie, bo chcę poznać z czym to się je i nawet jakbyś mi gwarantował, ze jest 100% szybszy od ms SQL (bo akurat tego używam najcześciej) to nie przejdę na technologie której nie znam...

AB
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:229
0
Panczo napisał(a):

Artur wróćmy do meritum, odłożę dywagacje na temat metodyki przeprowadzania testów.
Moje zdanie jest takie:
Warto śledzić i sprawdzać, w wolnej chwili nawet dociekać co jest lepsze/gorsze.

A żeby wiedzieć co jest szybsze/wolniejsze to trzeba uruchomić test i zmierzyć czas. Każdy producent bazy powie o swojej że jest najlepsza, czytanie niewiele wniesie.

Panczo napisał(a):

Z bazami to jest jednak tak, że żaden test/porównanie nie da mi odpowiedzi na pytanie czy MOJE bazy będą wydajniejsze na innym silniku czy nie. Bo porównania nie porównują moich danych i struktur tylko jakieś problemy które mnie nie dotyczą. Wiedza z takich testów to ciekawostka, bo nie uwzględnia mojego środowiska itd.

Nie zgodzę się.

Po pierwsze nie można powiedzieć że 'żadne', ponieważ właśnie test na Twojej oryginalnej strukturze, ewentualnie ze zmianami wprowadzonymi specjalnie pod testowany silnik, będzie testem wręcz idealnym. Po drugie, jeśli zrobisz setki mini testów na wielu bazach, to potem nabierzesz intuicji w wyborze dobrej bazy dla konkretnego zadania. Oczywiście nie ma prostego wzrou matematycznego do którego podstawisz zadanie i otrzymasz najlepszą bazę. Ale po takim treningu na testach nabierzesz bardzo dobrego wyczucia co w jakich sytuacjach zazwyczaj działa szybciej i z dużym prawdopodobieństwem wybierzesz najlepszy silnik do zadania. Oczywiście takich testów ani takigo doświadczenia nie zdobywa się przez miesiąc, ale przez lata. Żeby nie było nieporozumień - ja nie mam takiego doświadczenia, może mam minimalne w postgresie i absolutnie minimalne w mongo.

Panczo napisał(a):

Nie neguje wyników testów, ale tez na ślepo nie wyciągam wniosków. Dla przykładu co sensownego mozna powiedziec o takim "benchmarku": https://github.com/reoxey/benchmark
Mozna też zapoznać sie z tym https://blog.michaelckennedy.net/2010/04/29/mongodb-vs-sql-server-2008-performance-showdown/ i poczytać komentarze pod postem.

Z jednego prostego testu faktycznie nie da się wyciągnąć wniosków, ani nabrać doswiadczenia. Ale tak jak pisałem wyżej, ze 100 różnych testów można takie wnioski wyciągać.

Panczo napisał(a):

Reasumując sam przymierzam się do uzycia jakiejś bazy No SQL ale nie produkcyjnie tylko w hobbistycznym projekcie, bo chcę poznać z czym to się je i nawet jakbyś mi gwarantował, ze jest 100% szybszy od ms SQL (bo akurat tego używam najcześciej) to nie przejdę na technologie której nie znam...

Też często wybieram coś co jest gorsze, ale lepiej znam. Nie oznacza to wcale, że testowanie i porównywanie baz danych jest bezcelowe.

Pozdrawiam

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)