Kiedy używać bazy danych nosql, takiej jak mongodb over mysql?

13

Jestem nowy w koncepcji baz danych nosql i nigdy go nie użyłem. Na podstawie tego, co przeczytałem i tego, co zrozumiałem, wciąż nie widzę, w jaki sposób mogą być one szczególnie przydatne, jeśli nie można odwoływać się między danymi, jeśli nie istnieje koncepcja klucza obcego.

Jak na przykład zapytam o coś prostego, jak „znajdź wszystkie komentarze opublikowane przez tego użytkownika”, „znajdź wszystkie zdjęcia należące do elementu albumu” itp.

Czy systemy nosql odchodzą od statycznego relacyjnego modelu danych, ale nadal pozwalają śledzić takie odwołania, czy istnieje coś analogicznego do kluczy obcych, które można wykorzystać w zapytaniach?

akomada
źródło

Odpowiedzi:

19

Ogólne zastosowania

  • Jeśli masz struktury danych, które nie są jasno zdefiniowane w momencie tworzenia systemu. Na przykład przechowuję ustawienia użytkownika w nosql. Innym przykładem był system, w którym użytkownicy musieli mieć możliwość dodawania pól w czasie wykonywania - bardzo bolesne w RDBMS i proste w NoSQL.

  • Jeśli struktura modelu jest w dużej mierze wyśrodkowana wokół jednego lub kilku obiektów modelu, a większość relacji to tak naprawdę obiekty potomne głównych obiektów modelu. W takim przypadku przekonasz się, że nie będziesz potrzebować rzeczywistych połączeń. Odkryłem, że system zarządzania kontaktami może być całkiem ładnie zaimplementowany na przykład w nosql. Osoba może mieć wiele adresów, telefonów i e-maili. Zamiast umieszczać je w osobnych tabelach, wszystkie stają się częścią tego samego modelu i masz obiekt jednej osoby.

  • Jeśli chcesz skorzystać z klastrowania danych na wielu serwerach zamiast posiadania jednego serwera monolitycznego, co jest zwykle wymagane przez RDBMS.

  • Buforowanie Nawet jeśli chcesz pozostać przy RDBMS jako głównej bazie danych, przydatne może być użycie bazy danych NoSQL do buforowania wyników zapytań lub przechowywania danych, takich jak liczniki.

  • Przechowywanie dokumentów. Jeśli chcesz przechowywać spójne dokumenty, w bazie danych niektóre bazy danych NoSQL (takie jak MongoDB) specjalizują się w ich przechowywaniu.

Co z dołączeniami?

Szczerze mówiąc, brak możliwości łączenia również na początku wydawał mi się przerażający. Ale sztuką jest przestać myśleć w SQL. Musisz właściwie myśleć o obiekcie, który masz w pamięci podczas uruchamiania aplikacji. Powinny one mniej więcej zostać zapisane w bazie danych NoSQL, ponieważ są obszarem.

Ponieważ możesz przechowywać pełny wykres obiektów z obiektami potomnymi, większość potrzeby łączenia jest wyeliminowana. A jeśli okaże się, że potrzebujesz, będziesz musiał ugryźć pocisk, pobrać oba obiekty i dołączyć kod aplikacji.

Na szczęście większość kierowców może wykonać połączenie za Ciebie, jeśli odpowiednio skonfigurujesz schemat.

Do dalszej lektury polecam Martina Fowlera .

ced-b
źródło
2

Zdecydowanie użyłbym takiej bazy danych na etapach planowania projektu (przed opracowaniem, a nawet nawet projektem) do rejestrowania danych, których struktura, relacje i cechy nie są jeszcze znane i podlegają analizie. Potem postaram się, aby wszystko pasowało do modelu relacyjnego.

Mike Nakis
źródło
2
Co? ... Dlaczego? ...
Robert Harvey
Można więc w praktyce zastosować model relacji dla danych, o których wiadomo, że tak naprawdę nie zmieni wiele, takich jak informacje o użytkowniku, z typową nazwą, adresem e-mail itp., Na przykład mysql. Następnie użyj tego w połączeniu z bazą danych nosql do obsługi nieustrukturyzowanych, nieregularnych danych, takich jak dzienniki aktywności użytkownika. Rodzaj podzielonej odpowiedzialności. ? A może sugerowałeś rozpoczęcie od bazy danych nosql i przeprowadzenie pełnej migracji do modelu relacyjnego, gdy wszystko zostanie już ustawione?
akomada
W scenariuszu, w którym masz już dane przed rozpoczęciem analizy (powiedzmy, że jesteś wezwany do przepisania oprogramowania, które kontroluje istniejącą fabrykę, w której czujniki już wypluwają dane), natychmiast zacznę przechwytywać dane w bazie danych nosql, a następnie spróbuję, jeśli to możliwe, dopasować go do modelu relacyjnego. Jeśli nie jest to możliwe, kontynuowałbym z nosql.
Mike Nakis
0

W niektórych przypadkach nie potrzebujesz kluczy obcych. Na przykład:

Znajdź wszystkie komentarze opublikowane przez tego użytkownika

może być tak proste, jak załadowanie commentsczęści dokumentu odpowiadającej użytkownikowi. Nazywa się to denormalizacją : zamiast dwóch zestawów ze złączeniem masz jeden dokument i wszystko, czego potrzebujesz, znajduje się w nim. Jedno zapytanie, brak złączeń, lepsza wydajność .

Ale w niektórych okolicznościach może to prowadzić do duplikacji danych , więc odpowiednie może być łączenie jednego dokumentu w drugi. W takim przypadku może Cię zainteresować normalizacja MongoDB, klucz obcy i dołączanie , strona Odwołania do bazy danych, a zwłaszcza funkcja DBRefs.

Arseni Mourzenko
źródło