2010-07-07 2 views
9

필자는 몇 가지 프로젝트를 위해 좋은 NoSQL 데이터베이스를 꽤 오랫동안 찾고 있었으며 .NET 지원 관점에서 보면 정말 멋진 RavenDB를 발견했습니다. 그래서 그것을 시험해보고 약간의 벤치 마크를 작성하기로 결정했습니다.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로는, 2 기가 바이트 램은 윈도우 7을 실행하는) 상대적으로 빠른 컴퓨터에

나에게 전화를해라. 그러나 초당 1000의 인서트는 끔찍하게 느리다. 특히 단순한 2 개의 들판을 포함하고있는 문서의 경우 특히 그렇다. 예상 되나요? 나는 RavenDB가 쓰기가 아닌 읽기에 최적화되어 있다는 것을 알고있다. 그러나 이것은 꽤 나쁘다.

+0

JIT 및 기타 시작 작업을 고려하여 예열 시간을 허용 했습니까? –

답변

9

전체적으로 "읽기 전용, 쓰지 않음"으로 인해 그 속도가 훨씬 빨라질 지 모르겠습니다.

  • 배치 최대 쓰기 (당신이하고있는) : 당신이 this thread을 읽어 경우

    은 그러나 몇 가지 제안이 있습니다. 나는 그냥 여러 스레드에서 즉, SaveChanges()

  • 비동기 가져 오기를 수행 게으른 (Raven/TransactionMode)
  • 에 트랜잭션 모드를 설정 호출 할 수 있어야합니다, 당신은 비록 세션을 다시 엽니 다 닫고 할 필요가 확실하지 않다 당신이 시도 할 수

또 한가지는 대한 the docs를 참조 embedded mode, 즉

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

이것은 HTTP 트래픽을 우회하여 문서를 직접 삽입하는 세션을 변경할 수있다 더 많은 정보.

+0

나는이 모든 것을 시도했지만 성능 향상은 눈에 띄지 않았습니다. 나는 RavenDB가 너무 사용 속도가 느릴 것이라고 생각한다. 어쨌든 대답을 드리겠습니다. 그러나이 시점에서는 문제가 해결되지 않습니다. – Chris

+0

RavenDB 메일 링리스트 http://groups.google.com/group/ravendb/에 게시하고 싶을 수도 있습니다. 나는 RavenDB 전문가가 아니므로 더 나은 대답을 얻을 수 있습니다. –

+6

2011 년 초에 무거운 시나리오를 작성하는 데 약간의 성능 튜닝이있었습니다. 이제는 더 나은 결과를 얻게 될 것입니다. –

관련 문제