2010-07-07 27 views
9

Tôi đã tìm kiếm một cơ sở dữ liệu NoSQL tốt cho một số dự án của chúng tôi trong một thời gian và gần đây tôi đã phát hiện ra RavenDB trông khá tuyệt vời từ góc nhìn hỗ trợ .NET, vì vậy tôi quyết định thử và viết một chút điểm chuẩn. Đơn hàng đầu tiên của doanh nghiệp đã được thử nghiệm tốc độ chèn, sử dụng đoạn mã sau:Tôi nên mong đợi mức độ hiệu suất nào từ 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; 
    } 
} 

Kết quả như sau:

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

Đây là trên một máy tương đối nhanh (3GHz, 2GB ram chạy Windows 7)

Gọi cho tôi là điên rồ, nhưng 1000 lần chèn/giây chậm chạp, đặc biệt đối với các tài liệu chỉ chứa hai trường. có phải cái này đã được chờ đợi? Tôi biết RavenDB được tối ưu hóa cho đọc, không viết, nhưng điều này là khá xấu.

+0

Bạn có cho phép thời gian khởi động, chẳng hạn như JIT và các hoạt động khởi động khác đã được tính toán không? –

Trả lời

9

Tôi không biết liệu bạn sẽ nhanh hơn nhiều so với điều đó do toàn bộ "được tối ưu hóa cho lần đọc, không viết".

Nhưng nếu bạn đọc qua this thread có một số gợi ý:

  • hàng loạt lên viết (mà bạn đang làm). Tôi không chắc chắn bạn cần phải đóng và sau đó mở lại phiên giao dịch tuy nhiên, bạn chỉ nên có thể gọi SaveChanges()
  • Đặt chế độ giao dịch để lười biếng (Raven/TransactionMode)
  • Do nhập khẩu đồng bộ, tức là từ một số chủ đề

Một điều khác mà bạn có thể thử là embedded mode, tức là thay đổi phiên của bạn để

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

này sẽ bỏ qua lưu lượng HTTP và chèn văn bản trực tiếp, xem the docs cho thêm thông tin.

+0

Tôi đã thử tất cả những điều này và hiệu suất đạt được không đáng chú ý. Tôi đoán RavenDB chỉ là quá chậm cho các kịch bản sử dụng của tôi (viết nặng). Tôi sẽ cho bạn câu trả lời, nhưng vấn đề là không thể giải quyết tại thời điểm này. – Chris

+0

Bạn có thể muốn đăng bài này trên danh sách gửi thư RavenDB http://groups.google.com/group/ravendb/. Tôi xa một chuyên gia RavenDB nên bạn có thể nhận được câu trả lời tốt hơn. –

+6

Đã có một số điều chỉnh hiệu suất được thực hiện để viết kịch bản nặng vào đầu năm 2011. Bạn có thể sẽ nhận được kết quả tốt hơn ngay bây giờ. –

Các vấn đề liên quan