2012-05-15 5 views
8

Was ist der Aufwand für die Verwendung von Java ORM für MongoDB, oder ist es besser, dass wir die grundlegende Treiberebene zum Lesen oder Schreiben gehen?Was ist der Overhead von Java ORM für MongoDB

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

Es gibt einige Java-ORM-Mapping-Tools für Java
-morphia
-federraten-Daten
- others

Morphia letzte Version mehr als vor einem Jahr veröffentlicht wurde
aber Frühling Daten aktiv ist beibehalten. Welche sollte verwendet werden, wenn ich jetzt beginne,

+1

Steht das "R" im ORM nicht für "relational"? – duffymo

+1

Ja, es steht für Object/Relational Mapping, wird normalerweise mit relationalen Datenbanken verwendet, kann aber generisch mit jeder Art von Datenbank verwendet werden. – mtariq

+0

@duffymo in diesem Fall * Morphia tatsächlich * * Beziehungen zwischen Sammlungen zuordnen. Einige der Ruby-Wrapper haben ähnliche Eigenschaften. –

Antwort

11

Mit ORM verringert die Leistung, aber es beschleunigt die Entwicklung. Es gibt einen Kompromiss hier.

Für ORM-Werkzeuge ist Morphia am stabilsten. Here können Sie den Vergleich zwischen den Morphia und Basic Mongo Driver durch ihre Leistung finden.

+2

Ein besserer Leistungsvergleich [link] (https://groups.google.com/forum/?fromgroups#!topic/morphia/kGCF2I3ZKRU) – mtariq

+0

Link hinzugefügt in Ihrer Antwort scheint nicht mehr verfügbar. – sakura

4

Hier sind einige Dinge 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. Auf diese Weise kann man seine Umgebung so optimieren, dass die gewünschten Ergebnisse erzielt werden.

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 WriteConcern.NONE Szenario sein könnte, kann mit einer WriteConcern.SAFE einfach auf weniger als 5% reduziert werden.

Ja, es gibt definitiv einen Overhead in jeder ODM-Implementierung, da das Objekt < ->DBObject Mapping das Objekt get überprüfen und Werte normalerweise über Reflektion setzen muss. 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 eine benutzerdefinierte registrieren, die new Person(…) tut, anstatt die Standard-Reflektionsmagie zu tun, ergibt sich ein enormer Leistungsschub.

Das Spring Data-Team hat eine build einen Build Gewichtungs Leistung eines OTS MongoDB-Instanz für schreibt gegen verschiedene WriteConcern s einrichten und durch die Ebene Fahrer lesen, die MongoTemplate und die Abstraktion Repositorys. Die Zahlen sind mit einem Körnchen Salz zu nehmen, da sie manchmal zeigen, dass die Daten schneller gelesen werden als die Vorlagen, die von der Infrastruktur beeinflusst werden, da es sich um eine Ebene über der Vorlage handelt. t wirklich irgendwelche Zwischenspeicherung.

+1

Glauben Sie, dass die Daten aus dem Frühling schneller sein können als Morphia? – mtariq

+1

Natürlich kann es. Natürlich kann Morphia auch schneller sein als Spring Data. Ich denke, der entscheidende Punkt ist - wie oben beschrieben -, wie weit Sie in der Lage sind, das Object to DBObject Mapping für Typen, die sich als Engpässe erweisen, manuell zu codieren, um zu verhindern, dass die generische Mapping-Infrastruktur die Leistung zu sehr beeinflusst. Wenn Sie einen Mapping-Ansatz nicht anpassen können, ist das schlecht. –

Verwandte Themen