webentwicklung-frage-antwort-db.com.de

Welche Vorteile bietet die Verwendung einer schemafreien Datenbank wie MongoDB gegenüber einer relationalen Datenbank?

Ich bin es gewohnt, relationale Datenbanken wie MySQL oder PostgreSQL zu verwenden, und in Kombination mit MVC-Frameworks wie Symfony, RoR oder Django. Ich denke, es funktioniert hervorragend.

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, offene Quelle, schemafrei, dokumentorientiert Datenbank.

Ich bin wirklich daran interessiert, bei Edge zu sein, und möchte alle Möglichkeiten kennen, die ich für ein nächstes Projekt habe, und die besten Technologien auswählen.

In welchen Fällen ist die Verwendung von MongoDB (oder ähnlichen Datenbanken) besser als die Verwendung einer "klassischen" relationalen Datenbank? Was sind die Vorteile von MongoDB gegenüber MySQL im Allgemeinen?.

Wenn Sie Hinweise auf Dokumentation und/oder Beispiele haben, wäre dies auch eine große Hilfe.

93

Hier einige Vorteile von MongoDB für das Erstellen von Webanwendungen:

  1. Ein dokumentenbasiertes Datenmodell. Die Grundeinheit des Speichers ist analog zu JSON, Python-Wörterbüchern, Ruby-Hashes usw. Dies ist eine umfangreiche Datenstruktur, die Arrays und andere Dokumente enthalten kann. Dies bedeutet, dass Sie in einer Entität häufig ein Konstrukt darstellen können, für das mehrere Tabellen in einer relationalen Datenbank korrekt dargestellt werden müssen. Dies ist besonders nützlich, wenn Ihre Daten unveränderlich sind.
  2. Tiefe Abfragefähigkeit. MongoDB unterstützt dynamische Abfragen für Dokumente mit einer dokumentbasierten Abfragesprache, die fast so leistungsfähig wie SQL ist. 
  3. Keine Schemamigrationen. Da MongoDB schemafrei ist, definiert Ihr Code Ihr Schema.
  4. Ein klarer Weg zur horizontalen Skalierbarkeit.

Sie müssen mehr darüber lesen und damit spielen, um eine bessere Vorstellung zu bekommen. Hier ist eine Online-Demo:

http://try.mongodb.org/

55
Kyle Banker

Es gibt zahlreiche Vorteile. 

Zum Beispiel wird Ihr Datenbankschema besser skalierbar sein, Sie müssen sich keine Sorgen um Migrationen machen, der Code wird angenehmer zu schreiben sein ... Zum Beispiel ist hier ein Code meines Modells:

class Setting
  include MongoMapper::Document

  key :news_search, String, :required => true
  key :is_availaible_for_iphone, :required => true, :default => false

  belongs_to :movie
end

Beim Hinzufügen eines Schlüssels wird nur eine Codezeile hinzugefügt!

Es gibt auch andere Vorteile, die sich auf lange Sicht ergeben werden, wie eine bessere Scallability und Geschwindigkeit. 

... Beachten Sie jedoch, dass eine nicht relationale Datenbank nicht besser ist als eine relationale Datenbank. Wenn Ihre Datenbank viele Beziehungen und Normalisierungen aufweist, ist es möglicherweise wenig sinnvoll, so etwas wie MongoDB zu verwenden. Es geht darum, das richtige Werkzeug für den Job zu finden.

Um mehr zu lesen, empfehle ich einen Blick auf " Warum ich denke, Mongo ist für Datenbanken, was Rails für Frameworks war " oder dieser Beitrag auf der Mongodb-Website. Um aufgeregt zu werden und wenn Sie Französisch sprechen, werfen Sie einen Blick auf diesen Artikel und erklären, wie Sie MongoDB von Grund auf einrichten.

Edit: Ich hätte fast vergessen, dir von diesem Gleiscast von Ryan zu erzählen. Es ist sehr interessant und Sie möchten sofort loslegen!

23
marcgg

Der Vorteil von schemafrei ist, dass Sie Ihre Last entladen können, und niemand wird jemals Grund haben, sich darüber zu beschweren oder zu sagen, dass dies falsch war.

Dies bedeutet auch, dass alles, was Sie darin ablegen, völlig bedeutungslos bleibt, nachdem Sie dies getan haben.

Einige würden das als groben Nachteil bezeichnen, andere nicht.

Die Tatsache, dass eine relationale Datenbank über ein gut etabliertes Schema verfügt, ist eine Folge der Tatsache, dass sie über etablierte Satz von Erweiterungsprädikaten verfügt, die es uns ermöglichen, den in der Datenbank aufgezeichneten Daten Bedeutung zuzuweisen auch eine notwendige Voraussetzung dafür.

Ohne ein gut etabliertes Schema, keine Erweiterungsprädikate und ohne Erweiterungspräzipate, kann der Benutzer keine Bedeutung aus den Dingen ziehen, die darin enthalten waren.

5
Erwin Smout

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, für das viele Verknüpfungen erforderlich sind oder wenn alle Daten Beziehungen haben oder wenn viel geschrieben wird. Postgres ist Open Source, schneller, ACID-konform und verbraucht weniger Speicherplatz auf der Festplatte. Es ist auch für JSON-Speicher gut geeignet und bietet vollständige Serialisierbarkeit von Transaktionen mit drei Transaktionsisolationsstufen.

Der größte Vorteil von Postgres ist, dass wir das Beste aus beiden Welten haben. Wir können Daten mit Einschränkungen, Konsistenz und Geschwindigkeit in JSONB speichern. Auf der anderen Seite 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 von Hardware und Betriebssystem. Postgres bietet NoSQL-Funktionen zusammen mit vollständiger Transaktionsunterstützung und speichert JSON-Dokumente mit Einschränkungen für die Felddaten.

Allgemeine Einschränkungen für Postgres

Horizontales Skalieren von Postgres ist wesentlich schwieriger, aber machbar.

Mit Postgres können schnelle Lesevorgänge nicht vollständig erreicht werden.

KEINE SQL-Datenbanken

Mongo DB (Wired Tiger)

MongoDB kann Postgres in der Dimension der "horizontalen 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 gibt MongoDB für schreibintensive Anwendungen an, dass die neue Engine (Wired Tiger) Benutzern eine bis zu 10-fache Steigerung der Schreibleistung ermöglicht (ich sollte dies versuchen), wobei die Speicherauslastung um 80 Prozent reduziert wird, was die Speicherkosten senkt erreichen eine größere Auslastung der Hardware.

Allgemeine Einschränkungen von MongoDb

Die Verwendung einer schemalosen Speicher-Engine führt zu dem Problem impliziter Schemata. Diese Schemata werden nicht von unserer Storage Engine definiert, sondern basieren auf dem Anwendungsverhalten und den Erwartungen.

Standalone-NoSQL-Technologien erfüllen die ACID-Standards nicht, da sie den Schutz kritischer Daten zugunsten einer hohen Durchsatzleistung für unstrukturierte Anwendungen opfern. Es ist nicht schwer, ACID in NoSQL-Datenbanken anzuwenden, aber dies 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, wodurch die bisherigen Einschränkungen weitestgehend überwunden wurden.“.

3
ProgrammerPanda

MongoDB war diese Woche bei FLOSS Weekly vertreten - http://twit.tv/floss105 Eine Datenbank, die ein ähnliches Konzept verwendet, ist CouchDB, die in einer anderen FLOSS Weekly vorgestellt wurde: http://twit.tv/floss36

Ich denke, es lohnt sich, diese zusätzlich zu den Links von @marcgg zu hören.

3
Patrick

Es geht nur um Kompromisse. MongoDB ist schnell, aber nicht ACID, es gibt keine Transaktionen. Es ist in einigen Anwendungsfällen besser als MySQL und in anderen Fällen schlechter. 

2
AABBCCDD

Gebrüllte Zeilen in MongoDB: Der definitive Leitfaden.

Dafür gibt es mehrere gute Gründe: 

  1. Das Speichern verschiedener Arten von Dokumenten in derselben Sammlung kann eine .__ sein. Albtraum für Entwickler und Admins. Entwickler müssen sicherstellen, dass dass jede Abfrage nur Dokumente einer bestimmten Art zurückgibt oder dass der Anwendungscode, der eine Abfrage ausführt, Dokumente von .__ verarbeiten kann. verschiedene Formen. Wenn wir nach Blogeinträgen fragen, ist es ein Ärger mit Dokumente mit Autorendaten aussondern.
  2. Es ist viel schneller, eine Liste von Sammlungen abzurufen, als eine .__-Datei zu extrahieren. Liste der Typen in einer Sammlung. Zum Beispiel, wenn wir einen Typschlüssel hätten in der Sammlung, die besagt, ob jedes Dokument ein "skim" war, "Ganzes" oder "Chunky Monkey" Dokument, wäre es viel langsamer als Finden Sie diese drei Werte in einer einzigen Sammlung als drei getrennte Sammlungen und Abfrage nach deren Namen
  3. Gruppieren von Dokumenten derselben Art in derselben Sammlung ermöglicht die Lokalisierung von Daten. Mehrere Blogbeiträge von einem .__ abrufen. Eine Sammlung, die nur Beiträge enthält, erfordert wahrscheinlich weniger Datenträger sucht, anstatt dieselben Beiträge aus einer Sammlung zu erhalten, die enthält. Beiträge und Autorendaten.
  4. Wir beginnen, unsere Dokumente zu strukturieren, wenn wir Indizes. (Dies gilt insbesondere für eindeutige Indizes.) Diese Indizes werden pro Sammlung definiert. Legen Sie nur Dokumente ein eines einzigen Typs in derselben Sammlung können wir unser .__ indizieren. Sammlungen effizienter
1
Nanhe Kumar

Nach einer Frage von Datenbanken mit Textspeicher habe ich einen Blick auf MongoDB und ähnliche Systeme geworfen.
Wenn ich es richtig verstanden habe, sollen sie einfacher zu benutzen und einzurichten sein und viel schneller. Vielleicht auch sicherer, da das Fehlen von SQL die SQL-Injektion verhindert ...
MongoDB wird anscheinend hauptsächlich für Webanwendungen verwendet.
Grundsätzlich, und sie sagen selbst, dass diese Datenbanken nicht für komplexe Abfragen, Data-Mining usw. geeignet sind.

0
PhiLho
  1. MongoDB unterstützt die Suche nach Feldern und die Suche nach regulären Ausdrücken. Dazu gehören benutzerdefinierte Java-Skriptfunktionen.
  2. MongoDB kann als Dateisystem verwendet werden und nutzt die Funktionen für Lastausgleich und Datenreplikation über mehrere Maschinen zum Speichern von Dateien.
0
user2982063