私は以下のアーキテクチャ上の質問があります。私のアプリケーションのバックエンドはJavaとクライアント側でAngularJSで書かれています。今すぐ私は、アプリケーションのURLを共有してブックマークし、このURLで状態を復元できるように、ユーザー入力をページに保存する必要があります。ElasticsearchはJSON文書としてユーザ入力を格納します
私は、ページ上のデータと条件を選択してユーザーがアプリケーションとやりとりするたびに、複雑なJSONドキュメントですべての入力を収集し、このドキュメントをElasticsearchに保存します。 ESからのこのドキュメントのキークライアントアプリケーション(AngularJS)に送り返し、このキーに基づいてページのURLを更新します。
234532453455
は、ES内の文書の鍵となる
http://example.com/some-page/analysis/234532453455
:私は次のようにこのURLを更新しますサーバからのキーに基づいて
http://example.com/some-page
:たとえば、元のURLは次のようになります。
ユーザーが次のURLにアクセスしようとするたびに - http://example.com/some-page/analysis/234532453455
AngularJSアプリケーションは、JavaバックエンドRESTエンドポイント経由でキー(234532453455)で保存状態を取得しようとします。
正常に機能しますか?
また、私は現在、ESでのドキュメントの重複を防ぐ方法を疑っています。今私はESの経験がないので、この目的のためにどのようなアプローチをESから利用できるのか分かりません。
たとえば、各JSONドキュメントのハッシュコードを計算し、このハッシュコードをドキュメントのキーとして保存することをお勧めします。新しいドキュメントを保存する前に、古いドキュメントをハッシュコードでチェックすることができます。また、パフォーマンスは私にとって非常に重要ですので、これも考慮してください。
詳細な回答ありがとうございます。私は「技術的な動物園」を避けるためにESについて考えていました..これは私のプロジェクトの検索エンジンとしてESを使用するためです。 "近リアルタイム検索"機能を考慮に入れて、私はレディスがこのような種類のキャッシュに適していると考えています。 – alexanoid
また、データやプロジェクトの性質上、実際には "レポートタイプ"や "ユーザーID"データキー私はユーザーのCRC32(JSON文字列のために計算される)を私の文書のキーとして使用します。 – alexanoid
そして、今の主な基準 - 私は自分自身(私が提供する)IDでセット/ゲット操作のために非常に高速なストレージが必要です。私はレディスがこの目的のために良い選択になることを願っています。 – alexanoid