He estado buscando una buena base de datos NoSQL para algunos de nuestros proyectos desde hace bastante tiempo y recientemente descubrí RavenDB que se ve bastante impresionante desde una perspectiva de soporte .NET, así que decidí probarlo y escribir un pequeño punto de referencia. En primer orden de los trabajos de prueba de velocidad de inserción, mediante el siguiente código:¿Qué nivel de rendimiento debo esperar de RavenDB?
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 1000 inserts/sec es terriblemente lento, especialmente para documentos que contienen solo dos campos. ¿Es esto esperado? Sé que RavenDB está optimizado para lecturas, no para escrituras, pero esto es bastante malo.
¿Permitió un período de calentamiento, por ejemplo, que JIT y otras actividades de inicio se excluyeron? –