Ich bin es gewohnt, relationale Datenbanken wie MySQL oder PostgreSQL zu verwenden und mit MVC-Frameworks wie Symfony, RoR oder Django zu kombinieren, und ich denke, dass es großartig funktioniert.
Aber in letzter Zeit habe ich viel über MongoDB gehört, eine nicht relationale Datenbank, oder, um die offizielle Definition zu zitieren ,
Eine skalierbare, leistungsstarke, Open Source, schemafreie, dokumentenorientierte Datenbank.
Ich bin wirklich daran interessiert, nervös zu sein, und möchte mir aller Optionen bewusst sein, die ich für ein nächstes Projekt haben werde, und die besten Technologien da draußen auswählen.
In welchen Fällen ist die Verwendung von MongoDB (oder ähnlichen Datenbanken) besser als die Verwendung einer "klassischen" relationalen Datenbank? Und was sind die Vorteile von MongoDB gegenüber MySQL im Allgemeinen? Oder zumindest, warum ist es so anders?
Wenn Sie Hinweise auf Dokumentation und / oder Beispiele haben, wäre dies ebenfalls eine große Hilfe.
Es gibt zahlreiche Vorteile.
Zum Beispiel wird Ihr Datenbankschema skalierbarer, Sie müssen sich keine Gedanken über Migrationen machen, der Code ist angenehmer zu schreiben ... Zum Beispiel ist hier einer der Codes meines Modells:
Das Hinzufügen eines Schlüssels bedeutet nur das Hinzufügen einer Codezeile!
Es gibt auch andere Vorteile, die auf lange Sicht auftreten werden, wie eine bessere Kammbarkeit und Geschwindigkeit.
... Beachten Sie jedoch, dass eine nicht relationale Datenbank nicht besser ist als eine relationale . Wenn Ihre Datenbank viele Beziehungen und Normalisierungen aufweist, ist es möglicherweise wenig sinnvoll, etwas wie MongoDB zu verwenden. Es geht darum, das richtige Werkzeug für den Job zu finden.
Für weitere Informationen empfehle ich einen Blick auf " Warum ich denke, Mongo ist für Datenbanken das, was Rails für Frameworks war " oder diesen Beitrag auf der Mongodb-Website. Wenn Sie aufgeregt sind und Französisch sprechen, lesen Sie diesen Artikel, in dem erklärt wird, wie Sie MongoDB von Grund auf neu einrichten.
Edit: Ich hätte fast vergessen, dir von diesem Railscast von Ryan zu erzählen . Es ist sehr interessant und macht Lust, sofort loszulegen!
quelle
Der Vorteil von schemafrei ist, dass Sie alles, was sich in Ihrer Ladung befindet, entsorgen können und niemand jemals einen Grund haben wird, sich darüber zu beschweren oder zu sagen, dass es falsch war.
Es bedeutet auch, dass alles, was Sie darin ablegen, danach völlig bedeutungslos bleibt.
Einige würden das als groben Nachteil bezeichnen, andere nicht.
Die Tatsache, dass eine relationale Datenbank ein gut etabliertes Schema hat, ist eine Folge der Tatsache, dass sie einen gut etablierten Satz von Erweiterungsprädikaten hat, die es uns ermöglichen, dem, was in der Datenbank aufgezeichnet ist, Bedeutung zuzuweisen und was sind auch eine notwendige Voraussetzung dafür.
Ohne ein gut etabliertes Schema, keine Erweiterungsprädikate und ohne Erweiterungspräzikate kann der Benutzer dem, was darin enthalten ist, keine Bedeutung geben.
quelle
MongoDB wurde diese Woche auf FLOSS Weekly vorgestellt - http://twit.tv/floss105 Eine Datenbank mit einem ähnlichen Konzept ist CouchDB, die auf einer anderen FLOSS Weekly vorgestellt wurde: http://twit.tv/floss36
Ich denke, es lohnt sich, diese zusätzlich zu den von @marcgg bereitgestellten Links anzuhören
quelle
Meine Erfahrung mit Postgres und Mongo nach der Arbeit mit beiden Datenbanken in meinen Projekten.
Postgres (RDBMS)
Postgres wird empfohlen, wenn Ihre zukünftigen Anwendungen ein kompliziertes Schema haben, das viele Verknüpfungen erfordert, oder alle Daten Beziehungen haben oder wenn wir viel schreiben. Postgres ist Open Source, schneller, ACID-kompatibel und benötigt weniger Speicher auf der Festplatte. Es ist rundum gut für den JSON-Speicher geeignet und umfasst die vollständige Serialisierbarkeit von Transaktionen mit drei Ebenen der Transaktionsisolation.
Der größte Vorteil eines Aufenthalts bei Postgres ist, dass wir das Beste aus beiden Welten haben. Wir können Daten mit Einschränkungen, Konsistenz und Geschwindigkeit in JSONB speichern. Andererseits können wir alle SQL-Funktionen für andere Datentypen verwenden. Die zugrunde liegende Engine ist sehr stabil und kommt mit einem guten Datenvolumen gut zurecht. Es läuft auch auf Ihrer Wahl der Hardware und des Betriebssystems. Postgres bietet NoSQL-Funktionen sowie vollständige Transaktionsunterstützung und speichert JSON-Dokumente mit Einschränkungen für die Felddaten.
Allgemeine Einschränkungen für Postgres
Das horizontale Skalieren von Postgres ist erheblich schwieriger, aber machbar.
Schnelle Lesevorgänge können mit Postgres nicht vollständig erreicht werden.
KEINE SQL-Datenbanken
Mongo DB (Wired Tiger)
MongoDB kann Postgres in der Dimension "horizontale Skala" schlagen. Das Speichern von JSON ist das, wofür Mongo optimiert ist. Mongo speichert seine Daten in einem Binärformat namens BSONb, das (ungefähr) nur eine binäre Darstellung einer Obermenge von JSON ist. MongoDB speichert Objekte genau so, wie sie entworfen wurden. Laut MongoDB bietet die neue Engine (Wired Tiger) für schreibintensive Anwendungen den Benutzern eine bis zu 10-fache Steigerung der Schreibleistung (ich sollte dies versuchen), wobei die Speichernutzung um 80 Prozent reduziert wird, was zur Senkung der Speicherkosten beiträgt , erreichen eine größere Auslastung der Hardware.
Allgemeine Einschränkungen von MongoDb
Die Verwendung einer schemafreien Speicher-Engine führt zum Problem impliziter Schemas. Diese Schemata werden nicht von unserer Speicher-Engine definiert, sondern basieren auf dem Anwendungsverhalten und den Erwartungen.
Eigenständige NoSQL-Technologien erfüllen nicht die ACID-Standards, da sie den kritischen Datenschutz zugunsten einer hohen Durchsatzleistung für unstrukturierte Anwendungen opfern. Es ist nicht schwer, ACID auf NoSQL-Datenbanken anzuwenden, aber es würde die Datenbank bis zu einem gewissen Grad langsam und unflexibel machen. "Die meisten NoSQL-Einschränkungen wurden in den neueren Versionen und Releases optimiert, die die vorherigen Einschränkungen weitgehend überwunden haben."
quelle
Es geht nur um Kompromisse. MongoDB ist schnell, aber nicht ACID, es hat keine Transaktionen. In einigen Anwendungsfällen ist es besser als MySQL und in anderen schlechter.
quelle
In MongoDB geschriebene Balgzeilen: Der endgültige Leitfaden.
quelle
Nach einer Frage von Datenbanken mit Textspeicherung) warf ich einen Blick auf MongoDB und ähnliche Systeme.
Wenn ich es richtig verstanden habe, sollen sie einfacher zu bedienen und einzurichten sein und viel schneller. Vielleicht auch sicherer, da das Fehlen von SQL die SQL-Injection verhindert ...
Anscheinend wird MongoDB hauptsächlich für Webanwendungen verwendet.
Grundsätzlich und sie geben an, dass diese Datenbanken selbst nicht für komplexe Abfragen, Data Mining usw. geeignet sind. Sie glänzen jedoch darin, schnell viele flache Daten abzurufen.
quelle
quelle