Pregunta

He estado buscando una buena base de datos NoSQL para algunos de nuestros proyectos desde hace bastante tiempo y he descubierto recientemente RavenDB que se parece bastante impresionante desde una perspectiva de apoyo .NET, así que decidí probarlo y escribir un poco de referencia . Primera orden del día estaba probando inserción velocidad, usando el siguiente código:

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 salida es la siguiente:

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

Esto es en una máquina relativamente rápido (3 GHz, 2 GB de RAM que ejecuta Windows 7)

Llámame loco, pero insertos de 1000 / seg es terriblemente lento, especialmente para los documentos que contienen sólo dos campos. Se espera que esto sea? Sé RavenDB está optimizado para lee, no escribe, pero esto es bastante malo.

¿Fue útil?

Solución

No sé si va a ser mucho más rápido de lo que debido a la totalidad "optimizado para lee, no escribe" cosa.

Pero si se lee a través de este hilo hay algunas sugerencias:

  • lotes hasta las escrituras (que se está haciendo). No estoy seguro de que necesita cerrar y volver a abrir la sesión, sin embargo, que sólo debe ser capaz de llamar SaveChanges()
  • Ajuste el modo de transacción para perezoso (Raven/TransactionMode)
  • ¿Las importaciones de forma asíncrona, es decir a partir de varios hilos

Otra cosa que puede probar es la embedded mode, es decir cambiar la sesión a

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

Esto no pasa por los documentos de tráfico HTTP e inserta directamente, ver la documentación para más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top