2010-07-07 20 views
9

我一直在爲一些項目尋找一個好的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針對讀取進行了優化,而不是寫入,但這非常糟糕。

+0

您是否允許進行熱身期,從而將JIT和其他創業活動分解出來? – 2011-08-11 14:33:06

回答

9

我不知道你是否會因爲整個「優化讀取,而不是寫入」而獲得更快的速度。

但是,如果你通過閱讀this thread有一些建議:

  • 批寫了(你正在做的)。我不知道你需要關閉,然後雖然重新打開會話,你應該能夠調用SaveChanges()
  • 設置事務模式懶(Raven/TransactionMode
  • 做進口異步,即從多個線程你可以嘗試

的另一件事是embedded mode,即改變你的會話

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

這繞過了HTTP流量,並直接插入文檔,見the docs爲更多信息。

+0

我確實嘗試了所有這些,並且性能提升並不明顯。我想RavenDB對於我的使用場景來說太慢了(寫得很重)。無論如何,我會給你答案的,但在這一點上這個問題是無法解決的。 – Chris 2010-07-08 19:46:25

+0

您可能希望將其發佈在RavenDB郵件列表http://groups.google.com/group/ravendb/上。我遠離RavenDB的專家,所以你可能會得到更好的答案。 – 2010-07-09 09:40:23

+6

2011年早些時候對於寫入重度方案進行了一些性能調整。現在您可能會獲得更好的結果。 – 2011-08-17 20:14:52