7

プロダクション solr インデックスのデータを制御する必要があり、新しい開発と互換性がある必要があります。理想的には、ローカル マシンでインデックスをモックし、solr でクエリを実行し、ユニット テストを記述してクエリを実行し、反復を高速化します。

RamDirectory は別の質問で同様のことを行うために使用されますが、質問は2年前のものです。このは、まさにそれを行っているように見えます (RamDirectory の代わりに FSDirectory を使用)。これらは、この問題に対する正しいアプローチですか? これを行うためのより良い方法はありますか?

次のようなテストを書きたいと思います:

setup mock index;
query mock index;
assert(stuff that should be true);
teardown mock index;

編集:追加の詳細:

私たちの考えでは、インデックスを作成し、バージョン管理で保持できるローカル データベースを除いて、インデックス作成者やシステムの残りの部分を必要とせずにドキュメントを追加する簡単な方法を用意することでした。以前はインデックスを生成し、非互換性が発生したときにインデックスを再生成していました。

インデックスを再作成すると、多くのオーバーヘッドが追加されます。インデクサーには多くのデータ処理ロジックが含まれているため (データベースから検索可能なフィールドにデータを追加するなど)、インデクサーをモックすることは適切なオプションとは思えません。 . 私たちのインデクサーは外部データベースに接続するので、それもサポートする必要があります。上記のように、オーバーヘッドがほとんどないローカル テスト データベースを使用できます。

テスト データベースを作成したら、インデックスを作成する必要があります。その後、上記の 2 番目のリンクから進むことができます。問題は、たとえばサイズが 1000 のドキュメントについて、テスト用に非常に迅速にインデックスを構築するにはどうすればよいかということです。

これに関する問題は、ローカル データベース スキーマを本番スキーマと同期させておく必要があることです。本番スキーマは頻繁に変更されるため、これが問題になります。これを処理するのに十分な柔軟性を備えたテスト インフラストラクチャを用意したいと考えています。現在のアプローチでは、毎回データベースを再構築するだけですが、これは遅く、他の人を怒らせます。

4

1 に答える 1

5

Solr を使用している場合は、モックやエミュレートを行う必要さえありません (つまり、その構成を変更しないでください)。

代わりに、solr インデックスを設定する統合テストを作成します。設定は、通常のようにデータにインデックスを付けるだけです。おそらく、開発者に独自の solr を実行してもらいたいと思うでしょう。

solr は信じられないほど高速にインデックスを作成するため、速度についてはそれほど心配する必要はありません (私たちの環境では 30 秒未満で 100,000 個のドキュメント...実際、ボトルネックはデータベースからデータを取得しています)。

したがって、実際には、モック インデックスは、solr にインデックスを付ける本番データの小さなサブセットにする必要があります (これは、@BeforeClass を使用して各 TestCase クラスに対して 1 回実行できます)。

編集 (あなたの編集に基づく):

私たちがどのようにそれを行うか (および他の人がどのように行うのを見たか) を説明します。

開発 schema/db と運用 schema/db があります。開発者が何かに取り組んでいるとき、彼らは「ビルド マシン」開発データベースのコピーを作成し、それをローカルに復元するだけです。このデータベースは本番データベースよりもはるかに小さく、テストに最適です。実稼働データベースは、開発データベースのスキーマとそれほど異なるべきではありません (その場合は、より小さな変更を行い、より頻繁にリリースしてください)。

于 2011-07-27T20:29:10.210 に答える