Ich habe seit einiger Zeit nach einer guten NoSQL-Datenbank für einige unserer Projekte gesucht und kürzlich habe ich RavenDB entdeckt, was ziemlich toll aus der Sicht von .NET-Support aussieht. Also entschied ich mich, es auszuprobieren und einen kleinen Benchmark zu schreiben. Erster Auftrag von Unternehmen testete Einfügegeschwindigkeit, mit dem folgenden Code:Welches Leistungsniveau sollte ich von RavenDB erwarten?
class Program
{
private const int TEST_COUNT = 10000;
static void Main(string[] args)
{
var store = new DocumentStore();
store.Url = "http://localhost:8117";
store.Initialize();
var timer = Stopwatch.StartNew();
var session = store.OpenSession();
for (var i = 0; i < TEST_COUNT; i++)
{
session.Store(new TestEntity()
{
Name = "Test Entity"
});
if (i % 127 == 0)
{
session.SaveChanges();
session.Dispose();
session = store.OpenSession();
}
}
session.SaveChanges();
session.Dispose();
timer.Stop();
Console.WriteLine("Processed {0:n0} records", TEST_COUNT);
Console.WriteLine("Time elapsed: {0:n0} ms", timer.ElapsedMilliseconds);
Console.WriteLine("Records/sec: {0:n0}", TEST_COUNT/(timer.ElapsedMilliseconds/1000d));
}
}
class TestEntity
{
public string Name { get; set; }
public DateTime Created { get; set; }
public TestEntity()
{
Created = DateTime.UtcNow;
}
}
Der Ausgang ist wie folgt:
Processed 10,000 records
Time elapsed: 9,531 ms
Records/sec: 1,049
Press any key to continue . . .
Dies ist auf eine relativ schnelle Maschine (3 GHz, 2 GB RAM unter Windows 7)
Rufen Sie mich verrückt, aber 1000 Einfügungen/Sekunde ist schrecklich langsam, besonders für Dokumente, die nur zwei Felder enthalten. Ist das zu erwarten? Ich weiß, RavenDB ist für Lesevorgänge optimiert, nicht für Schreibvorgänge, aber das ist ziemlich schlecht.
Haben Sie eine Aufwärmphase zugelassen, sodass JIT und andere Startaktivitäten ausgeklammert wurden? –