Datenbanken wie MongoDB eignen sich hervorragend, wenn Sie normalerweise wissen, wo sich Ihre Daten befinden (anstatt mehrere komplizierte Abfragen schreiben zu müssen). In Mongo sind "verwandte" Daten entweder in den übergeordneten Daten verschachtelt oder haben Primär- / Fremdschlüssel. Dies ist sehr hilfreich, wenn Sie beispielsweise Posts und Kommentare haben. Im Allgemeinen werden keine Kommentare außerhalb des Kontexts eines Posts angezeigt. Daher ist es sinnvoll, dass Kommentare in einem Post enthalten sind (auf diese Weise erhalten Sie alle Kommentare für den Post, ohne eine separate Tabelle abfragen zu müssen).
MongoDB ist schemenlos. Dies bedeutet, dass die Datenstruktur, die Sie darauf werfen, größtenteils übernommen wird.
Wenn Sie andererseits Aggregatfunktionen verwenden und das Bedürfnis haben, Daten auf komplexe Weise abzufragen, die durch Einbettungen oder einfache Beziehungen in Mongo nicht erreicht werden können, ist es an der Zeit, ein RDBMS wie MySQL oder PostgreSQL zu verwenden.
MongoDB soll SQL nicht ersetzen. Es erfüllt einfach unterschiedliche Anforderungen und MongoDB und ein RDBMS können zusammen verwendet werden. Meiner Meinung nach ist MongoDB nicht alles, was Sie brauchen, wenn Ihre Daten nicht flexibel oder in ein übergeordnetes Dokument eingebettet sein sollen. Die Entwicklung mit MongoDB macht sehr viel Spaß, da viel weniger Schritte erforderlich sind, um ein Projekt (z. B. in Rails) zum Laufen zu bringen. Müssen Sie etwas ändern? Kein Problem. Fügen Sie Ihrem Modell einfach ein Attribut hinzu. Getan.
Ich kann nicht für viele andere NoSQL-Datenbanken sprechen, obwohl ich weiß, dass sie normalerweise ähnlich konzipiert sind, um eine bestimmte Anforderung zu erfüllen, die von einem RDBMS nicht erfüllt werden kann. Einige befinden sich vollständig im Speicher oder können sehr leicht zersplittert oder skaliert werden. Ich bin mir ziemlich sicher, dass Cassandra so konzipiert ist, dass sie bei einem Ausfall eines Knotens ohne Datenverlust weiterarbeitet. Redis ist im Grunde ein Schlüsselwertspeicher, der sich im Arbeitsspeicher befindet (mit regelmäßigen Schreibvorgängen für die Persistenz), aber auch die Möglichkeit bietet, Datentypen wie Sets zu speichern und zu sortieren.