2

会社のプロジェクトで使用する 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 は適切でしょうか?

4

3 に答える 3

2

私があなたの質問について理解していることから、あなたはWCFWebサービスを「準備」する必要があります。これを行うには、RavenDBから120万のドキュメントを(約23分で)読み取り、それらをメモリに保持して、WCFサービスがそれらからのクエリを処理できるようにします。これは正しいですか?それとも私は何かが足りないのですか?

WCFサービスにクエリを一度に1つずつRavenに送信させてみませんか?つまり、クライアントから取得するクエリごとに、RavenDBにクエリを実行するように依頼しますか?

于 2012-04-17T23:08:31.357 に答える
2

にぴったり?

全文検索?はい。バックグラウンド集計 (マップ/リデュース)? はい。簡単なレプリケーションとシャーディング、たとえばスケーリング? はい...

臨時報告?いいえ。おそらく何千ものサードパーティ製ツールをサポートしていますか? いいえ...

パフォーマンスについて話している場合は、おそらくそれに関する Orens の最新の投稿を見たいと思うでしょう。彼の数値はあなたの数値とよく似ています: http://ayende.com/blog/154913/ravendb-amp-freedb-an-optimization-story

于 2012-04-17T20:45:45.793 に答える
1

他の回答のコメントであなたが私たちに言ったことから、wcfクライアントに十分な速さでサービスを提供する唯一の良い方法は、実際にすべてをメモリに保存することだと思います。

RavenDB がその状況に適しているかどうかという問題は、データ モデルがドキュメント指向の性質から他の方法で恩恵を受けるかどうかによって異なります。したがって、リレーショナル データベースである種の EAV と多数の結合を必要とする動的データがある場合、RavenDB はおそらく非常に優れたソリューションになります。ただし、フラット データを投入できるものが必要な場合は、ここではリレーショナル データベースを使用します。ライセンス コストと使いやすさの観点から、PostgreSql も検討することをお勧めします。これは、完全に無料で提供される非常に優れたデータベースです。

于 2012-04-18T18:43:10.347 に答える