私は 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 ms で初期化されます。 3 ミリ秒でセッションを開始しました。 「エンティティ A 08:50:14」を 129 ミリ秒で保存。 「エンティティ A 08:50:15」を 0 ミリ秒で保存しました。 「エンティティ A 08:50:15」を 0 ミリ秒で保存しました。 29 ミリ秒で変更を保存しました。 0 ミリ秒で EntityA セッションを開きました。 463 ミリ秒で 10 個の EntityA すべてを照会しました。 0 ミリ秒で EntityA セッションを (再び) 開きました。 1 ミリ秒で 10 個の EntityA すべてを (再度) 照会しました。
この大まかな例から、次のことがわかります。
- ストアの初期化には膨大な時間がかかります!!
- 最初のエンティティ (10 個のうち) を格納するには、かなりの時間がかかります。
- すべてのエンティティのクエリには、最初は時間がかかりますが、2 回目はまったく時間がかかりません。
特定のタイプ (EntityA) のすべてのドキュメントについて DB に適切にクエリを実行するにはどうすればよいですか? 確かに、RavenDB がすべてのクエリにインデックスを必要とするわけではありませんか? 特に基準のないクエリではありませんか?
(注: デスクトップ アプリケーションに埋め込まれた DB を使用するつもりです。この場合、すべてのドキュメントを一覧表示して DB の内容を表示します。)