Wann verwenden Sie MongoDB oder andere dokumentorientierte Datenbanksysteme? [abgeschlossen

StackOverflow https://stackoverflow.com/questions/1476295

  •  16-09-2019
  •  | 
  •  

Frage

Wir bieten eine Plattform für Video- und Audio-Clips, Fotos und Vektorgrafics. Wir haben mit MySQL als Datenbank -Backend begonnen und kürzlich enthalten MongoDb Zum Speichern aller Meta-Information der Dateien, da MongoDB besser zu den Anforderungen passt. Zum Beispiel: Fotos können haben Exif Informationen, Videos haben möglicherweise Audio-Tracks, in denen wir auch die Meta-Information speichern möchten. Videos und Vektor-Graphics teilen keine gemeinsame Meta-Information usw. Ich weiß also, dass MongoDB perfekt ist, um diese unstrukturierten Daten zu speichern und sie durchsuchbar zu halten.

Wir entwickeln jedoch weiterhin unsere Plattform und fügen Funktionen hinzu. Jetzt wird einer der nächsten Schritte darin bestehen, unseren Benutzern ein Forum bereitzustellen. Die Frage, die sich jetzt stellt, lautet: Verwenden Sie die MySQL-Datenbank, die eine gute Wahl für das Speichern von Foren und Forumpfosten usw. oder dafür auch MongoDB verwenden würde?

Die Frage lautet also: Wann muss MongoDB verwendet und wann ein RDBMs verwendet werden. Was würdest du nehmen, MongoDb oder MySQL, wenn du die Wahl hättest und warum würdest du es nehmen?

War es hilfreich?

Lösung

Im NoSQL: Wenn es nur so einfach wäre, Der Autor schreibt über MongoDB:

MongoDB ist kein Schlüssel-/Wertspeicher, es ist ein bisschen mehr. Es ist definitiv auch kein RDBMS. Ich habe MongoDB in der Produktion nicht verwendet, aber ich habe sie ein kleines Erstellen einer Test -App verwendet und es ist ein sehr cooles Stück Kit. Es scheint sehr leistungsfähig zu sein und hat oder wird bald eine Fehlertoleranz und automatische Schärfe haben (auch bekannt als es wird skalieren). Ich denke, Mongo könnte einem RDBMS -Ersatz am nächsten sein, den ich bisher gesehen habe. Es funktioniert nicht für alle Datensätze und Zugriffsmuster, ist jedoch für Ihr typisches CRUD -Zeug erstellt. Die meisten Menschen verwenden eine relationale Datenbank, für die die meisten Menschen eine relationale Datenbank verwenden, um eine relationale Datenbank zu verwenden. Wenn Ihr DB 3NF ist und Sie keine Zusammenhänge machen (Sie wählen nur eine Reihe von Tabellen aus und stellen alle Objekte zusammen, auch bekannt als was die meisten Leute in einer Web -App tun), würde MongoDB wahrscheinlich für Sie in den Arsch treten.

Dann in der Schlussfolgerung:

Das Real, was Sie darauf hinweisen sollten, ist, dass Sie es falsch machen, wenn Sie zurückgehalten werden, wenn Sie etwas super großartiges machen, weil Sie keine Datenbank auswählen können. Wenn Sie MySQL kennen, verwenden Sie es einfach. Optimieren Sie, wenn Sie tatsächlich müssen. Verwenden Sie es wie AK/V Store, verwenden Sie es wie ein RDBMs, aber um Gott willen, bauen Sie Ihre Killer -App auf! Nichts davon wird für die meisten Apps von Bedeutung sein. Facebook benutzt immer noch viel MySQL. Wikipedia verwendet viel MySQL. Friendfeed verwendet viel MySQL. NoSQL ist ein großartiges Werkzeug, aber es wird sicherlich nicht Ihr Wettbewerbsvorteil sein, es wird Ihre App nicht heiß machen, und vor allem kümmern sich Ihre Benutzer nicht darum.

Worauf soll ich meine nächste App erstellen? Wahrscheinlich Postgres. Verwende ich NoSQL? Vielleicht. Ich könnte auch Hadoop und Hive verwenden. Ich könnte alles in flachen Dateien behalten. Vielleicht fange ich an, mich auf Maglev zu hacken. Ich werde alles verwenden, was für den Job am besten ist. Wenn ich melden muss, werde ich keine NoSQL verwenden. Wenn ich Caching brauche, werde ich wahrscheinlich Tokyo Tyrant verwenden. Wenn ich Säure brauche, werde ich NoSQL nicht verwenden. Wenn ich eine Menge Zähler brauche, benutze ich Redis. Wenn ich Transaktionen brauche, benutze ich Postgres. Wenn ich eine Tonne einer einzigen Art von Dokumenten habe, werde ich wahrscheinlich Mongo verwenden. Wenn ich 1 Milliarde Objekte pro Tag schreiben muss, würde ich wahrscheinlich Voldemort verwenden. Wenn ich eine Volltextsuche brauche, würde ich wahrscheinlich Solr verwenden. Wenn ich eine vollständige Text Suche nach flüchtigen Daten brauche, würde ich wahrscheinlich Sphinx verwenden.

Ich mag diesen Artikel, ich finde ihn sehr informativ, er gibt einen guten Überblick über die NoSQL -Landschaft und den Hype. Aber das ist der wichtigste Teil, es hilft wirklich, sich die richtigen Fragen zu stellen, wenn es darum geht, zwischen RDBMS und NoSQL zu wählen. Das Lesen imho wert.

Alternativer Link zum Artikel

Andere Tipps

Nach zwei Jahren mit MongoDB für eine soziale App habe ich gesehen, was es wirklich bedeutet, ohne SQL RDBMS zu leben.

  1. Am Ende schreiben Sie Jobs, um Dinge wie die Verbindung von Daten aus verschiedenen Tabellen/Sammlungen zu erledigen, was ein RDBMS automatisch für Sie tun würde.
  2. Ihre Abfragefunktionen mit NoSQL sind drastisch verkrüppelt. MongoDB mag SQL am nächsten sein, aber es ist immer noch extrem weit dahinter. Vertrau mir. SQL -Abfragen sind super intuitiv, flexibel und leistungsstark. MongoDB -Abfragen sind nicht.
  3. MongoDB -Abfragen können Daten von nur einer Sammlung abrufen und nur einen Index nutzen. Und MongoDB ist wahrscheinlich eine der flexibelsten NoSQL -Datenbanken. In vielen Szenarien bedeutet dies mehr Hin- und Rückflugs zum Server, um verwandte Datensätze zu finden. Und dann beginnen Sie mit der Entfernung von Daten - was Hintergrundjobs bedeutet.
  4. Die Tatsache, dass es sich nicht um eine relationale Datenbank handelt, bedeutet, dass Sie keine Fremdschlüsseleinschränkungen haben (die von einigen als schlecht ausführende Ausführung gedacht haben), um sicherzustellen, dass Ihre Daten konsistent sind. Ich versichere Ihnen, dass dies schließlich Datenkonsistenzen in Ihrer Datenbank erstellen wird. Sei vorbereitet. Höchstwahrscheinlich werden Sie mit dem Schreiben von Prozessen oder Überprüfungen beginnen, um Ihre Datenbank konsistent zu halten, was wahrscheinlich nicht besser funktioniert, als die RDBMs für Sie tun zu lassen.
  5. Vergessen Sie reife Frameworks wie Hibernate.

Ich glaube, dass 98% aller Projekte mit einem typischen SQL -RDBMS viel besser sind als mit NoSQL.

um diese unstrukturierten Daten zu speichern

Wie Sie sagten, ist MongoDB am besten geeignet, um unstrukturierte Daten zu speichern. Dies kann Ihre Daten im Dokumentformat organisieren. Diese RDBMS -Altenative nannten NoSql Datenspeicher (MongoDb, Couchdb, Voldemort) sind sehr nützlich für Anwendungen, die massiv skalieren und einen schnelleren Datenzugriff aus diesen Big Data -Stores benötigen.

Und die Implementierung dieser Datenbanken ist einfacher als die regulären RDBMs. Da es sich um einfache Binärobjekte im Schlüssel oder dokumentierten Stil handelt, die direkt in die Festplatte serialisiert wurden. Diese Datengeschäfte erzwingen die nicht Säureeigenschaften, und alle Schemas. Dies liefert keine Transaktion Fähigkeiten. Dies kann also groß skalieren und wir können einen schnelleren Zugriff (sowohl lesen als auch schreiben).

Im Gegensatz dazu erzwingt RDBM jedoch Säure und Schemas für Daten. Wenn Sie mit strukturierten Daten arbeiten möchten, können Sie RDBM fortsetzen.

ich würde wählen Mysql zum Erstellen Foren für diese Art von Zeug. Weil das nicht groß skaliert wird. Und dies ist eine sehr einfache (gemeinsame) Anwendung, die strukturierte Beziehungen zwischen den Daten hat.

Beachten Sie, dass Mongo JSON im Wesentlichen speichert. Wenn Ihre App mit vielen JS -Objekten (mit Nesting) zu tun hat und Sie diese Objekte bestehen möchten, gibt es ein sehr starkes Argument für die Verwendung von Mongo. Es macht Ihre DAL- und MVC-Schichten extrem dünn, da sie nicht alle JS-Objekteigenschaften nicht verpackt und versuchen, sie in eine Struktur (Schema) zu zwingen, in die sie nicht auf natürliche Weise passen.

Wir haben ein System, das mehrere komplexe JS -Objekte im Herzen hat, und wir lieben Mongo, weil wir alles wirklich, wirklich leicht bestehen können. Unsere Objekte sind auch eher amorph und unstrukturiert, und Mongo saugt diese Komplikation, ohne zu blinken. Wir haben eine benutzerdefinierte Berichtsschicht, die die amorphen Daten für den menschlichen Verbrauch entschlüsselt, und das war nicht so schwer zu entwickeln.

Ich würde sagen, verwenden Sie ein RDBMS, wenn Sie komplexe Transaktionen benötigen. Andernfalls würde ich mit MongoDB gehen - flexibler zu arbeiten, und Sie wissen, dass es skalieren kann, wenn Sie es brauchen. (Ich bin jedoch voreingenommen - ich arbeite am MongoDB -Projekt)

Wer braucht verteilte Foren verteilt? Vielleicht Facebook, aber wenn Sie nicht einen Facebook-Wettkämpfe erstellen, verwenden Sie einfach MySQL, Postgres oder was auch immer Sie am wohlsten fühlen. Wenn Sie MongoDB ausprobieren möchten, ok, aber erwarten Sie nicht, dass es für Sie Magie macht. Es wird seine Macken und allgemeine Bosheit genauso wie alles andere haben, wie ich sicher schon entdeckt habe, ob Sie wirklich bereits daran gearbeitet haben.

Sicher, MongoDB mag auf der Oberfläche gehypt sein und erscheinen, aber Sie werden auf Probleme stoßen, die reifere Produkte bereits überwunden haben. Lassen Sie sich nicht so leicht gelockt, sondern warten Sie, bis "NoSql" reift oder stirbt.

Persönlich denke ich, dass "NoSQL" an Fragmentierung verdorren und sterben wird, da es keine festgelegten Standards gibt (fast per Definition). Ich werde also nicht persönlich auf langfristige Projekte wetten.

Das einzige, was "noSQL" in meinem Buch retten kann, ist, ob es nahtlos in Ruby- oder ähnliche Sprachen integriert und die Sprache "anhaltend" machen kann, fast ohne Overhead in Codierung und Design. Das mag passieren, aber ich werde bis dahin warten, nicht jetzt, und es muss natürlich reifer sein.

Übrigens, warum erstellen Sie ein Forum von Grund auf neu? Es gibt unzählige Open -Source -Foren, die so gepasst werden können, dass sie die meisten Anforderungen entsprechen, es sei denn, Sie erstellen wirklich die nächste Generation von Foren (die ich bezweifle).

Ich habe gesehen, dass bei vielen Unternehmen MongoDB für Echtzeitanalysen aus Anwendungsprotokollen verwendet wird. Seine Schema-Fröhlichkeit passt wirklich für Anwendungsprotokolle, bei denen das Datensatzschema Zeit zu Zeit ändert. Auch es Kollektionskollektion Die Funktion ist nützlich, da sie automatisch alte Daten reinigt, um die Daten in den Speicher zu halten.

Das ist ein Bereich, von dem ich wirklich denke, dass MongoDB passt, aber MySQL/PostgreSQL ist im Allgemeinen eher empfohlen. Es gibt viele Dokumentationen und Entwicklerressourcen im Web sowie ihre Funktionalität und Robustheit.

Der 2 Hauptgrund, warum Sie Mongo bevorzugen möchten, sind

  • Flexibilität im Schema -Design (JSON -Typ -Dokumentgeschäft).
  • Skalierbarkeit - Fügen Sie einfach Knoten hinzu und es kann horizontal recht gut skalieren.

Es ist für Big Data -Anwendungen geeignet. RDBMS ist nicht gut für Big Data.

Weißt du, all diese Dinge über die Anschlüsse und die 'komplexen Transaktionen' (Und nicht die Datenbank) sowieso ' - also ist es wieder dasselbe. Was benötigt wird, ist eine dumme, aber unglaublich ordentliche und schnelle Datenspeicherung/Abruf -Engine für 99% der Web -Apps.

Wie bereits erwähnt, können Sie zwischen vielen Auswahlmöglichkeiten wählen, werfen Sie einen Blick auf all diese Auswahlmöglichkeiten:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

Ich schlage vor, Ihre beste Kombination zu finden: MySQL + Memcache ist wirklich großartig, wenn Sie Säure benötigen und sich einigen Tabellen anschließen möchten. MongoDB + Redis eignet

Was ich tue: Ich beginne mit MySQL + Memcache, weil ich es gewohnt bin, dann verwende ich andere Datenbank -Framework. In einem einzigen Projekt können Sie beispielsweise MySQL und MongoDB kombinieren!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top