3

組織内のさまざまな製品チームへの参照データのソースとして機能する製品があります。データは、クライアントにこのデータへのアクセスを提供するサービスを公開した solr インデックスに格納されています。

ここで、サーバー側で何かが発生したときにクライアントが通知されるように、一種のイベント駆動型メカニズムを提供する必要があります。

これは Oracle coherence などの製品で簡単に実装できることはわかっていますが、solr はこの目的に適した製品ではありません。しかし今では、過去に戻ってソリューションを変更することはできません。

したがって、この要件を達成するために、特定のインデックス内のすべてのドキュメントを返す RESTFul サービスを公開し、クライアント アプリケーションはこの resful サービスにアクセスし続け、特定の反復回数で完全なデータセットを取得します。

これが最善の方法ではないことは承知していますが、このためだけに別のデータストアが必要なかったため、利用できるオプションは限られていました。

このアプローチの改善として、特定の時間枠での solr インデックスへの挿入/更新/削除を返す別のサービスを公開したいと考えています。/companyIndex/itr/15 のようなもので、過去 15 分間に会社のインデックスに対して行われた変更を示します。これは、クライアントが処理するデータ量を削減するのに役立ちます。クライアントがインデックスから完全なデータセットを取得すると、後で増分更新を行うことができます。このようにして、クライアントのデータ セットはマスター データセットと同期されます。多少のラグはまだありますが、それで問題ありません。

solr/lucene 自体を使用してこれを達成する方法はありますか? solr は公開可能な監査証跡を保持していますか?

データ読み込みレイヤーでそのような情報を保持できますが、solr で利用できるものを使用できるかどうかを知りたいですか?

提案/意見はありますか?

4

1 に答える 1

1

これを処理するにはいくつかの方法があります。Lucene は、 Solr が独自のレプリケーションを強化するために使用するIndexDeletionPolicy ( IndexCommitsを参照) でコミットに関する情報を公開します。おそらく、自分で複製にフックして、現在のバージョンのインデックスと、その間に変更されたファイルを取得できます (複製に関する HTTP API を参照してください)。

各コミット イベントの詳細が必要な場合は、もう少し深く掘り下げる必要がありますが、Lucene に直接フックして (Solr のレプリケーション ハンドラーが行うのと同じ方法で) 自分でイベントを観察することができると確信しています。次に、RabbitMQ またはその他のメッセージ キューを介してそれらをブロードキャストし、情報を複数のクライアントに公開します。

うまくいけば、それはあなたを正しい方向に向けるでしょう!

于 2012-01-30T11:38:19.190 に答える