Bazy danych takie jak MongoDB są świetne, gdy zwykle wiesz, gdzie są twoje dane (w przeciwieństwie do konieczności pisania kilku skomplikowanych zapytań). W Mongo „powiązane” dane są albo zagnieżdżone w danych nadrzędnych, albo mają klucze podstawowe / obce. Jest to świetne, jeśli na przykład masz posty i komentarze; ogólnie rzecz biorąc, nie będziesz wyświetlać komentarzy poza kontekstem postu, więc sensowne jest, aby komentarze były zawarte w postie (w ten sposób otrzymujesz wszystkie komentarze do postu bez potrzeby przeszukiwania osobnej tabeli).
MongoDB jest bez schematów. Oznacza to, że w większości przypadków zajmie to dowolną strukturę danych.
Z drugiej strony, jeśli musisz korzystać z funkcji agregujących i odczuwasz potrzebę zapytania danych w skomplikowany sposób, którego nie można osiągnąć za pomocą osadzania lub prostych relacji w Mongo, wtedy wiesz, że nadszedł czas, aby użyć RDBMS, takiego jak MySQL lub PostgreSQL.
MongoDB nie ma zastąpić SQL. Po prostu spełnia różne potrzeby, a MongoDB i RDBMS mogą być używane łącznie. Moim zdaniem MongoDB nie jest wcale konieczne, jeśli nie potrzebujesz, aby Twoje dane były elastyczne lub osadzone w dokumencie nadrzędnym. Programowanie w MongoDB jest bardzo zabawne, ponieważ jest o wiele mniej kroków do uruchomienia projektu (powiedzmy w Railsach). Chcesz dokonać zmiany? Nie ma problemu. Po prostu dodaj atrybut do swojego modelu. Gotowy.
Nie mogę mówić o wielu innych bazach danych NoSQL, chociaż wiem, że są one zwykle podobnie zaprojektowane, aby zaspokoić konkretne potrzeby, których RDBMS nie może zaspokoić. Niektóre znajdują się całkowicie w pamięci lub można je bardzo łatwo odłamać lub skalować. Jestem prawie pewien, że Cassandra jest zaprojektowana tak, aby kontynuować działanie bez utraty danych, jeśli nastąpi awaria węzła. Redis jest w zasadzie kluczowym magazynem wartości, który znajduje się w pamięci (z okresowymi zapisami na dysku w celu utrwalenia), ale ma także możliwość przechowywania typów danych, takich jak zestawy i sortowania ich.