Frage

Ich habe mich für eine gute NoSQL-Datenbank für einige unsere Projekte seit geraumer Zeit und ich vor kurzem entdeckt RavenDB die ziemlich genial aus einer .NET-Unterstützung Perspektive sieht, so dass ich es versuchen beschlossen und ein wenig Benchmark schreiben . Erster Auftrag von Unternehmen wurde Einfügegeschwindigkeit Prüfung, mit dem folgenden Code:

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 . . .

Das auf einer relativ schnelle Maschine (3 GHz, 2 GB RAM unter Windows 7)

Rufen Sie mich verrückt, aber 1000 Einsätze / sec ist schrecklich langsam, vor allem für Dokumente, die gerade einmal zwei Felder enthalten. Ist das zu erwarten? Ich weiß RavenDB optimiert für liest, nicht schreibt, aber das ist ziemlich schlecht.

War es hilfreich?

Lösung

Ich weiß nicht, ob Sie gehen als auf die gesamte aufgrund viel schneller bekommen „optimiert für liest, nicht schreiben“ Sache.

Aber wenn Sie lesen durch dieses Themas es einige Vorschläge sind:

  • Batch up schreibt (was Sie tun). Ich bin nicht sicher, müssen Sie schließen und dann wieder zu öffnen, die Sitzung aber Sie sollten nur in der Lage sein SaveChanges() anrufen
  • Geben Sie den Transaktionsmodus zu faul (Raven/TransactionMode)
  • Haben die Einfuhren asynchron, das heißt aus mehreren Threads

Eine andere Sache, die Sie versuchen könnten, ist der embedded mode, das heißt ändern Ihre Sitzung

var documentStore = new DocumentStore { DataDirectory = "path/to/database/directory" };
documentStore.Initialize();

Dies umgeht die HTTP-Verkehr und fügt Dokumente direkt finden Sie unter die docs weitere Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top