Ist ein ORM redundant mit einer NoSQL-API?
mit MongoDB (und ich nehme an, andere NoSQL-Datenbank-APIs Wert Ihr Salz) die Art und Weise der Abfrage der Datenbank sind viel mehr simpel als SQL. Es gibt keine langweiligen SQL-Abfragen zu generieren und so. Zum Beispiel nehmen Sie diese aus mongodb-csharp:
using MongoDB.Driver;
Mongo db = new Mongo();
db.Connect(); //Connect to localhost on the default port.
Document query = new Document();
query["field1"] = 10;
Document result = db["tests"]["reads"].FindOne(query);
db.Disconnect();
Wie könnte ein ORM auch vereinfachen? Ist ein ORM oder andere "Datenbank-Abstraktion Gerät" erforderlich, das oben auf einem anständigen NoSQL-API?
- Übrigens, hab ich was beschönigt die eingeklammerte Bemerkung in meiner Antwort, aber Sie sagte: "andere NoSQL-Datenbank-APIs Wert Ihr Salz" - MongoDB ist sehr Verschieden von etwas, das wie bigtable oder cassandra und Abfragen/mapping vor, die diese Daten speichert, tatsächlich in der Regel sehr viel schwieriger als SQL. Stellen Sie sich die Umsetzung eines gesamten data-driven app mit nichts aber
Dictionary<,>
Instanzen. Es ist nicht schlecht, aber es ist in der Nähe. - natürlich mit einem Schlüssel-Wert-Datenbank, die API ist sehr simpel. Was ich gemeint habe, von Wert sein Salz ist, dass Sie nicht haben, um zu generieren Ihre eigene JSON-Abfragen oder ähnliche low-level-Sachen.
- Ist das nicht genau das, was ein mapper braucht? Diese Funktionen sind nicht eingebaut, auch nicht in Mongo.
- hm... ich nehme an, Sie richtig sein kann
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ja, Objekt-Relationalen Mapper sind redundant mit MongoDB, weil MongoDB ist kein relationalen Datenbank, es ist eine Dokument-Orientierte Datenbank.
Also anstelle von SQL, erstellen Sie Abfragen im JSON-Format. Es sei denn, Sie wirklich, wirklich schreiben wollen, rohen JSON, im Gegensatz zu, sagen, Linq, dann bist du immer noch gehen zu wollen, zu einem mapper. Und wenn Sie nicht wollen, zu schaffen Kupplung gegen MongoDB selbst, dann werden Sie nicht wollen, um pass tatsächlichen
Document
Objekte herum, die Sie zuordnen möchten Ihnen real POCOs.Mapping ist viel einfacher mit einer Dokument-orientierten DB wie MongoDB, weil Sie verschachtelte Dokumente anstelle von Beziehungen, aber das bedeutet nicht, es geht komplett Weg. Es bedeutet nur, Sie haben ersetzt, eine Art des "impedance mismatch" für ein anderes, etwas weniger dramatische Diskrepanz.
Ich denke, eine "ORM" auf MongoDb kann nützlich sein, nicht nur für "serialisieren" und "Deserialisieren" Objekten in der db (Norm scheint zu tun, einen tollen job), aber auch für so dass es leichter zu führen aggregation Abfragen.
Es ist schön, wenn eine "ORM" generieren können MapReduce-Aufträge für die Gruppierung und Erkennung der Duplikate. Einige Leute haben code geschrieben, um automatisch konvertieren Sie eine sql-Anweisung in einen mapreduce-job: http://rickosborne.org/blog/index.php/2010/02/19/yes-virginia-thats-automated-sql-to-mongodb-mapreduce/
Werfen Sie einen Blick auf Kundera : https://github.com/impetus-opensource/Kundera,
ORM über mongodb, cassandra, HBase.
Andere Lösung ist PlayOrm die joins bei Bedarf Skalierbar-SQL-Sprache(nur fügt ein prefix zu normalen SQL-grundsätzlich auf add partition info).
hängt davon ab, wie reif ist der Fahrer mit der NoSQL-Datenbank. Dieser link beschreibt die Relevanz von ORM-tools für die NoSQL-Datenbank:
http://xamry.wordpress.com/2012/08/10/sqlifying-nosql-are-orm-tools-relevant-to-nosql/
Alles, was Sie wirklich brauchen, ist ein serializer/deserializer um diese Arbeit zu machen.
Norm hat einen großartigen job gemacht, der genau das zu tun. Macht es leichter zu nehmen, gerade poco-Objekte, und nur speichern Sie Sie auf mongo mit einer einzigen Zeile code.
Rufen Sie Norm ein ORM, aber es ist wirklich nur a poco zum Wörterbuch mongo-wrapper.
Ein orm ist nur extra-Zeremonie für diese Operationen. Wenn Sie Ihre Operationen mit den Daten werden abstrahiert, in einem repository, sein gehen zu sein, ein nicht-Problem entweder Weg, weil die Konvertierung auf eine andere backing-store ist ein Objekt pro Objekt, basis.