Ostatnio zostałem zapytany:
Dlaczego NoSQL jest szybszy niż SQL?
Nie zgodziłem się z założeniem pytania ... to po prostu nonsens dla mnie osobiście. Nie widzę żadnego wzrostu wydajności przy użyciu NoSQL zamiast SQL. Może SQL nad NoSQL, tak, ale nie w ten sposób.
Czy brakuje mi czegoś o NoSQL?
performance
nosql
cnd
źródło
źródło
Odpowiedzi:
Istnieje wiele rozwiązań NoSQL, z których każde ma swoje mocne i słabe strony, dlatego poniższe kwestie należy wziąć pod uwagę z odrobiną soli.
Ale zasadniczo to, co robi wiele baz danych NoSQL, polega na denormalizacji i próbuje zoptymalizować pod kątem przypadku denormalizowanego. Załóżmy na przykład, że czytasz post na blogu wraz z jego komentarzami w bazie danych zorientowanej na dokumenty. Często komentarze są zapisywane wraz z samym postem. Oznacza to, że szybciej będzie można je wszystkie pobrać razem, ponieważ są one przechowywane w tym samym miejscu i nie trzeba wykonywać łączenia.
Oczywiście możesz zrobić to samo w SQL, a denormalizacja jest powszechną praktyką, gdy potrzebna jest wydajność. Tyle tylko, że wiele rozwiązań NoSQL jest od samego początku projektowanych i zawsze można z nich korzystać w ten sposób. Otrzymujesz wtedy zwykłe kompromisy: na przykład dodanie komentarza w powyższym przykładzie będzie wolniejsze, ponieważ musisz zapisać cały dokument. Po zdenormalizowaniu musisz zadbać o zachowanie integralności danych w swojej aplikacji.
Co więcej, w wielu rozwiązaniach NoSQL nie można wykonywać dowolnych połączeń, stąd dowolne zapytania. Niektóre bazy danych, takie jak CouchDB, wymagają myślenia przed potrzebnymi zapytaniami i przygotowania ich w bazie danych.
Podsumowując, sprowadza się do oczekiwania na zdenormalizowany schemat i optymalizację odczytów w tej sytuacji, a to działa dobrze w przypadku danych, które nie są wysoce relacyjne i wymagają znacznie więcej odczytów niż zapisów.
źródło
Brakuje w NoSQL tego, że NoSQl nie może być w żaden sposób porównywany z SQL. NoSQL to nazwa wszystkich technologii trwałości, które nie są SQL. Dokumenty DB, DB-Key, Event DBs są wszystkie NoSQL. Wszystkie różnią się prawie we wszystkich aspektach, czy to w strukturze zapisanych danych, zapytaniach, wydajności i dostępnych narzędzi.
Więc jeśli ktoś zadaje takie pytanie podczas wywiadu, powinna to być odpowiedź.
źródło
Bazy danych „NoSQL” (a ściślej: nierelacyjne) rezygnują z niektórych funkcji tradycyjnych baz danych dla szybkości, ale co ważniejsze dla skalowalności poziomej.
Brakujące funkcje zależą od konkretnego produktu, ogólnie pełne właściwości ACID, a nawet operacje łączenia nie są obsługiwane. Jest to cena za zwiększoną wydajność.
źródło
Masz rację, byłoby nonsensem stwierdzenie tego w ogólnym oświadczeniu. Co prawdopodobnie jest sednem; zamiast jednej odpowiedzi ankieter prawdopodobnie oczekuje, że odpowiesz pytaniami, które pomogą ci dowiedzieć się, jaki jest kontekst problemu (jaki rodzaj danych, ile ich, w jakim środowisku operacyjnym itp.), konkretne rozwiązanie NoSQL . Spróbują dowiedzieć się, w jaki sposób analizujesz problemy, i po drodze dowiedzą się, ile wiesz o różnych dostępnych rozwiązaniach.
źródło
Bazy danych NoSQL zwykle mają sens tylko wtedy, gdy projektujesz wokół nich swoje dane.
Jeśli zamierzasz po prostu użyć ich jako zamiennika RDBMS, możesz uzyskać mniejszą wydajność niż większą, szczególnie jeśli nie masz wystarczającego budżetu, aby zapłacić za serwery z dużą ilością pamięci RAM.
Spójrz na ten artykuł, który porównuje wykorzystanie miejsca na dysku MySQL z MongoDB: http://blog.trackerbird.com/content/mysql-vs-mongodb-disk-space-usage
źródło
Która baza danych NoSQL? Która baza danych SQL? Jeśli ktoś powie Ci, że NoSQL jest szybszy niż SQL, powinieneś odejść. Lub jeszcze lepiej obejrzyj ten film:
http://www.youtube.com/watch?v=b2F-DItXtZs
Nie powiem, że połowa rzeczy, które twierdzą o NoSQL, jest błędna, ale powiem, że istnieje wiele fanboyizmu NoSQL od ludzi, którzy tak naprawdę nie rozumieją tego zbyt dobrze.
SQL ma swoje ograniczenia (oczywiście), ale jest to również bardzo dojrzała technologia, która jest dobrze zrozumiała i ma dużą pulę programistów, którzy rozumieją, jak z niej dobrze korzystać. Nie mogę powiedzieć tego samego o wszystkich formach NoSQL.
źródło
NoSql obsługiwany przez bazy danych zorientowane na kolumny, w których RDBMS jest bazą danych zorientowaną na wiersze ... I powiedzmy na przykład, że mamy tabelę pracowników z imieniem, wiekiem, wynagrodzeniem, adresem, identyfikatorem pracownika itp. ... umieszczamy tę samą tabelę w MySql (obsługa RDBMS) i HBase (Obsługa NoSQL). Jeśli klient / klient napisze zapytanie w celu uzyskania informacji o średnim wieku lub wynagrodzeniu od danych pracowników 1Lakh ... co się stanie?
W RDBMS będzie ominąć każdy wiersz i zbierze wartość oraz sumę i podział dla wyniku. Jeśli chodzi o bazę danych Columnar, nie musisz się martwić o wszystkie iteracje jednego rzędu wierszy. Ale zajmuj się tylko jednym wierszem, który jest szybszy do obliczenia. W ten sposób czasami NoSQL jest szybszy niż SQL. Ten przypadek NoSQL nie przejmuje się reklamacjami ACID są warte!
źródło
Zapomnij o teorii wokół baz danych ... w momencie, gdy zrozumiesz swoje zapytania, możesz zapisać dane w bazach nosql dokładnie w taki sposób, w jaki są one faktycznie używane w twojej aplikacji ...
Na przykład weźmy ten przykład: masz model klienta z wieloma zamówieniami i wieloma przedmiotami związanymi z każdym zamówieniem, a następnie mają one również wiele zapisanych przedmiotów do późniejszych zakupów ... jeśli jesteś dużym sklepem internetowym z, powiedzmy, 10 milionami klientów i 50 milion zamówień. I ten klient loguje się do swojego pulpitu nawigacyjnego, który wyświetla te dokładne dane, ile pracy zajmie baza danych SQL, aby znaleźć klienta, dołączyć do zamówień i każdego elementu zamówienia i zapisanych pozycji. W bazie danych SQL wszystkie te dane prawdopodobnie będą musiały zostać w jakiś sposób połączone ... lub możesz utworzyć kolekcję w swojej bazie danych o nazwie usercache i zapisać te dane dokładnie tak, jak używasz ich w prawdziwym życiu. Może to być naprawdę jedno zapytanie na jednym polu [id], aby odzyskać wszystkie te dane. Ponadto baza danych nosql nie działa
Więc czy sql db zapytanie o pojedyncze pole Id tak samo szybko, jeśli nie szybciej niż nosql? Tak, ale czy baza danych SQL może zwrócić wszystkie potrzebne dane, sprawdzając jedną tabelę i jedno pole? Nie, chyba że zrobisz coś takiego, jak zapisać dane w Jsonie w dużym polu tekstowym. Ale teraz, gdy dane nie mogą być wyszukiwane w celu potencjalnego wykorzystania w przyszłości.
źródło