Od tygodnia uczę się o bazach danych NoSQL.
Naprawdę rozumiem zalety baz danych NoSQL i wiele przypadków ich użycia.
Ale często ludzie piszą swoje artykuły, jakby NoSQL mógł zastąpić Relacyjne bazy danych. I jest taki punkt, że nie mogę się obejść:
Bazy danych NoSQL to (często) magazyny kluczy i wartości.
Oczywiście możliwe jest przechowywanie wszystkiego w magazynie klucz-wartość (przez kodowanie danych w JSON, XML, cokolwiek), ale widzę problem, że musisz uzyskać pewną ilość danych, która pasuje do określonego kryterium, w wielu przypadków użycia. W bazie danych NoSQL masz tylko jedno kryterium, którego możesz skutecznie szukać - klucz. Relacyjne bazy danych są zoptymalizowane pod kątem skutecznego wyszukiwania dowolnej wartości w wierszu danych.
Tak więc bazy danych NoSQL nie są tak naprawdę wyborem na utrwalanie danych, które należy przeszukiwać według ich zawartości. A może coś źle zrozumiałem?
Przykład:
Musisz przechowywać dane użytkownika dla sklepu internetowego.
W relacyjnej bazie danych przechowujesz każdego użytkownika jako wiersz w users
tabeli z identyfikatorem, nazwą, jego krajem itp.
W bazie danych NoSQL zapisujesz każdego użytkownika z jego identyfikatorem jako kluczem i wszystkimi jego danymi (zakodowanymi w JSON itp.) Jako wartością.
Jeśli więc chcesz uzyskać wszystkich użytkowników z określonego kraju (z jakiegoś powodu specjaliści od marketingu muszą coś o nich wiedzieć), łatwo jest to zrobić w Relacyjnej bazie danych, ale niezbyt skuteczna w bazie danych NoSQL, ponieważ musisz pobierz każdego użytkownika, przeanalizuj wszystkie dane i przefiltruj.
Nie twierdzę, że to niemożliwe , ale robi się o wiele trudniejsze i myślę, że nie jest tak skuteczne, jeśli chcesz przeszukiwać dane wpisów NoSQL.
Możesz utworzyć klucz dla każdego kraju, w którym przechowywane są klucze każdego użytkownika mieszkającego w tym kraju, i uzyskać użytkowników określonego kraju, uzyskując wszystkie klucze, które są zdeponowane w kluczu dla tego kraju. Ale myślę, że ta technika sprawia, że złożony zestaw danych jest jeszcze bardziej złożony - trudniej go wdrożyć i nie jest tak skuteczny, jak zapytania do bazy danych SQL. Więc myślę, że nie jest to sposób, w jaki byś użył w produkcji. Albo to jest?
Nie jestem do końca pewien, czy coś źle zrozumiałem lub przeoczyłem niektóre koncepcje lub najlepsze praktyki dotyczące takich przypadków użycia. Może mógłbyś poprawić moje oświadczenia i odpowiedzieć na moje pytania.