我一直在爲一些項目尋找一個好的NoSQL數據庫一段時間,最近我發現RavenDB從.NET支持的角度看起來非常棒,所以我決定嘗試一下並寫一點基準。業務的第一順序是測試插入速度,使用以下代碼: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;
}
}
輸出如下:
Processed 10,000 records
Time elapsed: 9,531 ms
Records/sec: 1,049
Press any key to continue . . .
這是一個相對快速的機器上(3GHz的,2GB RAM運行Windows 7)
叫我瘋了,但1000插入/秒是非常慢,特別是對於只包含兩個領域的文件。這是預期的嗎?我知道RavenDB針對讀取進行了優化,而不是寫入,但這非常糟糕。
您是否允許進行熱身期,從而將JIT和其他創業活動分解出來? – 2011-08-11 14:33:06