我想学习如何使用RavenDB,并为此创建了一个基本示例。 看起来初始化商店和查询需要很长时间!如何优化用于检索所有文档的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();
}
这将产生以下输出:
Initialized in 6132 ms. Opened session in 3 ms. Stored 'Entity A 08:50:14' in 129 ms. Stored 'Entity A 08:50:15' in 0 ms. Stored 'Entity A 08:50:15' in 0 ms. Saved changes in 29 ms. Opened EntityA session in 0 ms. Queried for all 10 EntityA in 463 ms. Opened EntityA session (again) in 0 ms. Queried (again) for all 10 EntityA in 1 ms.
从该粗例如,我可以看出:
- 初始化商店花费的时间量巨大!!
- 存储第一个实体(十个)需要相当长的一段时间。
- 查询所有实体首次需要很多时间,但第二次不需要任何时间。
如何正确查询某个类型(EntityA)的所有文档的数据库? 当然,它不可能是RavenDB需要每个查询的索引?特别是没有任何标准的查询?
(注:我打算使用嵌入在桌面应用程序,其中列出了所有文件,用于显示数据库中的内容DB)
这样的“为什么”这样的问题的答案通常很难找到,难以应用(因此,“不具有建设性”)。不要问为什么它是这样的,你可能想要编辑来问你需要在你的代码中做什么样的事情来优化性能。 – 2013-02-09 08:08:07
够公平的。举一个基本的例子,我的目的是作为一个解释性答案,比如“你使用错了,因为......”而不是简单的是/否的答案,例如“是的,使用索引”,它不能解释“为什么”。但你的观点是合理的。我会尝试重新说明我的问题! – Reyhn 2013-02-09 08:13:44