RavenDB schlechte Auswahl Leistung

8

Ich teste RavenDB für meine zukünftigen Projekte. Datenbankperformance ist eine Muss-Anforderung für mich, deshalb möchte ich in der Lage sein, RavenDB zumindest im Leistungsbereich von SQL Server einzustellen, aber meine Tests zeigen, dass raven db ungefähr 10x-20x in ausgewählten Abfragen langsamer ist als SQL Server Wenn RavenDB indiziert ist und SQL Server keine Indizes hat.

Ich habe die Datenbank mit 150.000 Dokumenten gefüllt. Jedes Dokument verfügt über eine Sammlung von untergeordneten Elementen. Db Größe ist ca. 1GB und so ist die Indexgröße auch. Raven / Esent / CacheSizeMax ist auf 2048 und Raven / Esent / MaxVerPages auf 128 gesetzt. So sehen die Dokumente aus:

%Vor%

Hier ist der definierte Index:

%Vor%

Ich habe den Index mit dem Management Studio definiert, nicht mit dem Code BTW (weiß nicht, ob es einen negativen / positiven Effekt auf die Leistung hat).

Diese Abfrage dauert zwischen 500ms und 1500ms (Hinweis: Dies ist die Zeit, die zum Ausführen der Abfrage benötigt wird, direkt von der Konsole von ravendb aus angezeigt. Sie enthält also keine HTTP-Anforderungszeit und keinen Deserialisierungsaufwand ).

%Vor%

Ich führe die Abfrage auf Quad Core i5 CPU mit 4,2 GHz und die db befindet sich auf einer SSD.

Jetzt, wenn ich die gleiche Menge an Daten auf SQL Server Express, mit dem gleichen Schema und der gleichen Menge an assoziierten Objekten gefüllt habe. Ohne Index führt sql server dieselbe Abfrage aus, die Joins in 35ms enthält. Mit Index dauert es 0ms: |.

Alle Tests wurden durchgeführt, als die Server auf dem Server warmgelaufen waren.

Obwohl ich mit der Leistung von RavenDB immer noch sehr zufrieden bin, bin ich neugierig, ob etwas fehlt oder RavenDB langsamer ist als eine relationale Datenbank? Entschuldigung für mein schlechtes Englisch.

Danke

AKTUALISIEREN

Ayande, ich habe versucht, was Sie vorgeschlagen haben, aber wenn ich versuche, den Index zu definieren, den Sie mir geschickt haben, bekomme ich den folgenden Fehler:

%Vor%

Fehler CS1977: kann einen Lambda-Ausdruck als ein Argument für eine dynamisch abgesetzte Operation nicht verwenden, ohne es zuerst in einem Delegat oder einem Ausdrucksbaumentyp

zu konvertieren     
Davita 14.01.2012, 23:43
quelle

1 Antwort

6

Davita, Der folgende Index generiert ~ 8 Millionen Indexeinträge:

%Vor%

Dieser erzeugt weit weniger:

%Vor%

Und kann mit den gleichen Ergebnissen abgefragt werden, aber bei unseren Tests zeigte sich, dass sie etwa doppelt so schnell sind.

Das Hauptproblem besteht darin, dass Sie mehrere Bereichsabfragen durchführen, die mit einer großen Anzahl potenzieller Werte teuer sind, und dann haben Sie eine große Anzahl tatsächlicher Übereinstimmungen für die Abfrage.

Eine exakte Übereinstimmung ist übrigens wesentlich schneller.

Wir arbeiten immer noch an Möglichkeiten, um die Dinge zu beschleunigen.

    
Ayende Rahien 17.01.2012 01:06
quelle

Tags und Links