Was ist der Hauptunterschied zwischen Schlüsselwertspeichern (Dynamo, Project Voldemort) und dokumentenorientierten Datenbanken (MongoDB, CouchDB)?


Antwort 1:

Ich habe wirklich nur Erfahrung mit Redis (auf der Schlüsselwertseite) und MongoDB (auf der Dokumentseite), daher trifft ein Teil davon möglicherweise nicht auf alle Bereiche zu.

Schlüsselwert-DBs sind in der Regel sowohl in Bezug auf die API als auch in Bezug auf den Inhalt einfacher. Sie würden eine verwenden, wenn Sie kleine Datenausschnitte benötigen, die leicht verfügbar sind, z. B. einen Trefferzähler oder Sitzungsdaten oder Abstimmungen.

Dokumentendatenbanken sind dagegen offensichtlich komplexer. Da Dokumente nur eine geringe oder keine vorhersehbare Struktur haben, sind APi-Aufrufe in der Regel länger und detaillierter als in einer Schlüsselwertdatenbank. Dokumente können natürlich auch für komplexe Datenbits verwendet werden. Beispielsweise können Dokumente benutzerdefinierte Formularübermittlungen oder Vorlagen sein.


Antwort 2:

Dokumentierte orientierte Datenbanken sind für mich Schlüsselwertspeicher mit bestimmten Metadaten und API-Implementierungen, die die Verwendung von Schlüsselwertspeichern für einen bestimmten Anwendungsfall theoretisch vereinfachen.

Nehmen Sie Mongo - Sie haben eine vordefinierte Hierarchie von Schlüsseln und Werten, wobei die Stammebene Datenbanken sein muss

Sie haben untergeordnete Elemente, die vordefinierte Schlüsselwerte sind, die Sammlungen sein müssen.

Sie haben untergeordnete Elemente, bei denen es sich um vordefinierte Schlüsselwerte handelt, bei denen es sich um Dokumente handeln muss.

Dokumente haben vordefinierte untergeordnete Elemente, die BSON-Objekte (auch als erweiterte JSON-Objekte bezeichnet) sein müssen.

JSON ist nichts anderes als ein Schlüsselwertspeicher mit einem bestimmten Standardformat.

Mongo verwendet seine Metadaten zu den Schlüsselwertspeichern, um vorhersehbare APIs für Aufgaben bereitzustellen. Das Neueste daran ist, wie es seine Daten verteilt. Die Implementierung des Festschlüsselwertspeichers ist nicht interessant.

Das Replizieren des tatsächlichen Datenteils dieses einfachen Schlüsselwertspeichers mit seinen festen 4 Ebenen wäre auf jeder Plattform, die Schlüsselwertspeicher verarbeiten könnte, relativ trivial. In Postress mit dem vorgefertigten JSON-Datentyp könnte ich ein generisches Schlüsselwertspeichermodell haben, das an einem Wochenende mit APIs arbeitet, die die meisten Mongo-Anwendungen ohne den verteilten Teil funktional ersetzen könnten. Geben Sie mir einen Monat und ich hätte etwas Vielseitigeres und Erweiterbareres, als nur JSON als einzige untergeordnete Option für Dokumente zu verwenden. Es wäre auch trivial, SQL über Sammlungen hinweg auszuführen, was Mongo ohne einen Job zur Kartenreduzierung nicht gut macht.

Der verteilte Teil von Mongo ist die nicht triviale Arbeit, die potenziell mächtig ist, wenn sie gut gemacht wird. Ich bin nicht besonders beeindruckt von der Distributionsarchitektur von Mongo, aber das ist ein anderes Gespräch.

Dinge wie Dynamo und Voldemort haben keine vordefinierte Implementierung für die Verwendung der Schlüsselwertspeicher. Das heißt, Sie haben keine vorgefertigten APIs, die Dinge für Sie tun. dh Liste der Schlüssel der Ebene 3 abrufen, die immer als Dokumente bezeichnet werden, die diesem Schlüssel der Ebene 2 untergeordnet sind und immer als Sammlung bezeichnet werden. Dies bedeutet auch, dass Sie Ihre Schlüsselwerte nicht auf eine bestimmte Weise verwenden müssen und sie an die Art und Weise anpassen können, wie Sie die Dinge tun möchten.

Ich bin viel beeindruckter von der Datenverteilungsarchitektur von Dynamo und Voldemorts.