7

私は ElasticSearch を初めて使用し、プロジェクトのために評価しています。

ES では、レプリケーションは同期または非同期にすることができます。非同期の場合、ドキュメントがプライマリ シャードに書き込まれるとすぐに、クライアントに成功が返されます。その後、ドキュメントは他のレプリカに非同期でプッシュされます。

非同期で記述した場合、GET が完了したときに、データがすべてのレプリカに伝搬されていなくてもデータが返されるようにするにはどうすればよいでしょうか。ES で GET を実行すると、クエリは適切なシャードのレプリカの 1 つに転送されるためです。非同期で書き込みを行っている場合、プライマリ シャードにはドキュメントがあるかもしれませんが、GET を実行するために選択されたレプリカはまだドキュメントを受信/書き込みしていない可能性があります。Cassandra では、書き込み時と読み取り時に一貫性レベル (ONE、QUORUM、ALL) を指定できます。ESでの読み取りでそのようなことは可能ですか?

4

2 に答える 2

6

メーリングリストで私が出した答えは次のとおりです。

私が全体像を理解している限り、ドキュメントをインデックス化すると、トランザクション ログに書き込まれ、ES から成功した回答が得られます。その後、非同期で他のノードに複製され、Lucene によってインデックスが作成されます。

とは言っても、ドキュメントをすぐに検索することはできませんが、 GETすることはできます。ES は、ドキュメントを取得するときに、必要に応じて tlog を読み取ります。

レプリカが最新でない場合、GET はプライマリ tlog で送信されると思います (よくわかりません)。

私が間違っている場合は修正してください。

于 2012-12-29T11:05:14.947 に答える