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.
Steht das "R" im ORM nicht für "relational"? – duffymo
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
@duffymo in diesem Fall * Morphia tatsächlich * * Beziehungen zwischen Sammlungen zuordnen. Einige der Ruby-Wrapper haben ähnliche Eigenschaften. –