Question

J'ai cherché une bonne base de données NoSQL pour certains de nos projets depuis un certain temps et moi avons récemment découvert RavenDB qui a l'air assez impressionnant du point de vue de support .NET, alors j'ai décidé de l'essayer et d'écrire un peu de référence . Tout d'abord l'ordre du jour testait la vitesse d'insertion, en utilisant le code suivant:

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;
    }
}

La sortie est comme suit:

Processed 10,000 records
Time elapsed: 9,531 ms
Records / sec: 1,049
Press any key to continue . . .

est sur une machine relativement rapide (3 GHz, 2 Go de RAM sous Windows 7)

Appelle-moi fou, mais 1000 inserts / sec est horriblement lent, en particulier pour les documents qui contiennent seulement deux champs. Doit on s'y attendre? Je sais que RavenDB est optimisé pour les lectures, non écrit, mais c'est assez mauvais.

Était-ce utile?

La solution

Je ne sais pas si vous allez obtenir beaucoup plus rapide que celle due à l'ensemble « optimisé pour les lectures, pas écrit » chose.

Mais si vous lisez ce fil il y a quelques suggestions:

  • Lot up écrit (que vous faites). Je ne suis pas sûr que vous devez fermer puis rouvrir la séance cependant, vous devriez juste pouvoir appeler SaveChanges()
  • Définir le mode de transaction paresseux (Raven/TransactionMode)
  • Faites les importations de manière asynchrone, i.e. de plusieurs fils

Une autre chose que vous pouvez essayer est le embedded mode, i.e. changer votre session

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

Cela permet de contourner les documents de trafic HTTP et insère directement, consultez la page les docs pour plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top