代码之家  ›  专栏  ›  技术社区  ›  Chris

我应该期望RavenDB有什么样的表现?

  •  9
  • Chris  · 技术社区  · 14 年前

    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 . . .
    

    1 回复  |  直到 14 年前
        1
  •  9
  •   Matt Warren    14 年前

    我不知道你是否会得到比这快得多,因为整个“优化阅读,而不是写”的事情。

    但如果你通读 this thread 有一些建议:

    • 批量写入(您正在执行)。我不确定你是否需要关闭然后重新打开会话,但是,你应该可以打电话 SaveChanges()
    • 将事务模式设置为lazy( Raven/TransactionMode )

    你可以尝试的另一件事是 embedded mode ,即将会话更改为

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

    这将绕过HTTP通信并直接插入文档,请参见 the docs 更多信息。