会社のプロジェクトで使用する RavenDB プロトタイプの評価期間が終わりに近づいているという興味深い状況があります。それが興味深い理由は、99.99% の確率で Raven のスイート スポットに合っていると信じているからです。新しいデータを頻繁に小さなバッチ (一度に 1000 ドキュメント未満) で繰り返しクエリします。
ただし、最初のロード期間があり、2 日分のデータをロードする必要があり、場合によっては 300 万 (またはそれ以上) のレコードになることもあります。
図が役立つ場合があります。
3 つの実稼働データベースから正しいデータを取得し、RavenDB に格納するのは Transfer Service です。WCF サービスは、このデータを照会し、クライアントが利用できるようにします。
何百万ものレコード/ドキュメントを RavenDB に最初にロードすると、それを再度行う必要はほとんどありません。
初期負荷テストとして、4 GB の RAM と 2 つのプロセッサを搭載したマシンで、初期データを読み取るのに 23 分強かかりました。この場合、約 128 万件のレコードしかありませんでした。各読み取りが他の読み取り操作によって妨げられないようにしたかったため、この初期ロードからすべての非同期操作を削除しました。この方法で最良の結果を見つけました。
推奨されていないことはわかっていますが、これをすべて達成するには、変更が推奨されていない設定を変更する必要がありました。
タイムアウトを増やす必要がありました:
documentStore.JsonRequestFactory.ConfigureRequest += (e, x) => ((HttpWebRequest)x.Request).Timeout = ravenTimeoutInMilliseconds;
Raven.Server.exe.config で、ページ サイズを (int.MaxValue に) 増やす必要がありました。
<add key="Raven/MaxPageSize" value="2147483647"/>
また、検索メソッドでは、Take(int.MaxValue) を使用する必要がありました。
return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList();
これはすべて、その 1 回限りの初期ロード用であることを忘れないでください。その後、多くのクエリがすばやく頻繁に実行されます。また、RavenDB では各ドキュメントが自己完結型であることにも注意してください。管理する関係はありません。
これらすべてを知っている場合、RavenDB は適切でしょうか?