Was ist der Overhead von Java ORM für MongoDB?

8

Was kostet die Verwendung von Java ORM für MongoDB, oder ist es besser, dass wir die grundlegende Treiberebene zum Lesen oder Schreiben verwenden?

Wir werden Mongo DB für eine unserer Anforderungen hinzufügen.

Es gibt einige Java ORM Mapping Tools für Java -Morphie
-Springdaten
- andere

Morphia letzte Version wurde vor mehr als einem Jahr veröffentlicht aber Spring-Daten werden aktiv gepflegt. Welcher sollte benutzt werden, wenn ich jetzt anfangen will,

    
mtariq 15.05.2012, 11:55
quelle

3 Antworten

11

Die Verwendung von ORM verringert die Leistung, beschleunigt jedoch die Entwicklung. Es gibt einen Kompromiss hier.

Für ORM-Tools ist Morphia am stabilsten. Hier finden Sie den Vergleich zwischen Morphia und Basic Mongo Driver anhand ihrer Leistung.

    
Parvin Gasimzade 15.05.2012, 12:02
quelle
4

Morphia scheint am besten geeignet zu sein, da es die meisten Features hat und eine aktive Community hat. Siehe diesen Link zum Vergleich: Wie machst Morphia, Mongo4j und Spring-Daten für MongoDB vergleichen?

    
rizzz86 15.05.2012 12:09
quelle
4

Hier ist einiges zu erwähnen. Es ist schwierig, Benchmarks dafür zu finden, da Sie die Leistung nicht wirklich testen können, ohne auch Ihre MongoDB-Konfiguration testen zu müssen. So kann man seine Umgebung so optimieren und abstimmen, dass sie die gewünschten Ergebnisse liefert.

Darüber hinaus müssen Sie zwischen Lese- und Schreibleistung unterscheiden. Besonders Schreibvorgänge werden stark von der verwendeten WriteConcern beeinflusst. Was also ein Overhead von 50% in einem Szenario WriteConcern.NONE sein könnte, kann leicht mit einem WriteConcern.SAFE auf weniger als 5% reduziert werden.

Ja, es gibt definitiv einen Overhead in jeder ODM-Implementierung, da das Objekt & lt; - & gt; DBObject Mapping muss das Objekt get überprüfen und Werte normalerweise über Reflektion setzen. Daher ist ein entscheidender Punkt IMHO die Möglichkeit, benutzerdefinierte manuell codierte Konverter einzubinden, die Sie für die leistungskritischen Objekte bereitstellen möchten. Für Spring Data, die einfach ein benutzerdefiniertes EntityInstantiator registrieren, das new Person(…) tut, anstatt das Standard-Objekt seine Reflektionszauber zu nutzen, wird die Leistung enorm gesteigert.

Das Spring Data-Team hat ein Build eingerichtet, um eine Build-Gewichtungsleistung einer OTS MongoDB-Instanz für Schreibvorgänge einzurichten verschiedene WriteConcern s und Lesen durch den Plain-Treiber, die MongoTemplate und die Abstraktion der Repositories. Die Zahlen sind mit einem Körnchen Salz zu nehmen, da sie manchmal zeigen, dass die Repositories Daten schneller lesen als die Templates, die von der Infrastruktur beeinflusst werden müssen, da es sich um eine Ebene handelt Die Vorlage fügt jedoch kein Caching hinzu.

    
Oliver Gierke 16.05.2012 08:04
quelle