我正在尝试学习如何使用 RavenDB,为此我创建了一个基本示例。似乎初始化存储和查询需要花费大量时间!
static void Main( string[] args )
{
const bool createNewEntities = true;
var sw = new Stopwatch();
using( var store = new EmbeddableDocumentStore {DataDirectory = "~\\Data"} )
{
sw.Start();
store.Initialize();
sw.Stop();
Console.WriteLine( "Initialized in {0} ms.", sw.ElapsedMilliseconds );
if (createNewEntities)
{
sw.Reset();
sw.Start();
using( var session = store.OpenSession() )
{
sw.Stop();
Console.WriteLine();
Console.WriteLine( "Opened session in {0} ms.", sw.ElapsedMilliseconds );
for( var i = 0; i < 10; i++ )
{
var entity = new EntityA( "Entity A " + DateTime.Now.ToLongTimeString() );
sw.Reset();
sw.Start();
session.Store( entity );
sw.Stop();
if (i < 3)
Console.WriteLine( "Stored '{0}' in {1} ms.", entity.Name, sw.ElapsedMilliseconds );
}
sw.Reset();
sw.Start();
session.SaveChanges();
sw.Stop();
Console.WriteLine( "Saved changes in {0} ms.", sw.ElapsedMilliseconds );
}
}
sw.Reset();
sw.Start();
using( var session = store.OpenSession() )
{
sw.Stop();
Console.WriteLine();
Console.WriteLine( "Opened EntityA session in {0} ms.", sw.ElapsedMilliseconds );
sw.Reset();
sw.Start();
var entities = session.Query<EntityA>().ToArray();
sw.Stop();
Console.WriteLine("Queried for all {0} EntityA in {1} ms.", entities.Length, sw.ElapsedMilliseconds);
}
sw.Reset();
sw.Start();
using( var session = store.OpenSession() )
{
sw.Stop();
Console.WriteLine();
Console.WriteLine( "Opened EntityA session (again) in {0} ms.", sw.ElapsedMilliseconds );
sw.Reset();
sw.Start();
var entities2 = session.Query<EntityA>().ToArray();
sw.Stop();
Console.WriteLine( "Queried (again) for all {0} EntityA in {1} ms.", entities2.Length, sw.ElapsedMilliseconds );
}
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine( "Press ENTER to exit..." );
Console.ReadLine();
}
这会产生以下输出:
在 6132 毫秒内初始化。 在 3 毫秒内打开会话。 在 129 毫秒内存储了“实体 A 08:50:14”。 在 0 毫秒内存储了“实体 A 08:50:15”。 在 0 毫秒内存储了“实体 A 08:50:15”。 在 29 毫秒内保存更改。 在 0 毫秒内打开 EntityA 会话。 在 463 毫秒内查询所有 10 个 EntityA。 在 0 毫秒内(再次)打开 EntityA 会话。 在 1 毫秒内(再次)查询所有 10 个 EntityA。
从这个粗略的例子中,我可以看到:
- 初始化商店需要大量时间!
- 存储第一个实体(十个)需要相当长的时间。
- 第一次查询所有实体需要很多时间,但第二次则完全没有时间。
如何正确查询数据库中特定类型(EntityA)的所有文档?当然,RavenDB 不可能每个查询都需要索引吗?特别是对于没有任何标准的查询?
(注意:我打算使用嵌入在桌面应用程序中的 DB,其中列出所有文档用于显示 DB 的内容。)