1

AzureベースのWebサイトを開発しており、Luceneを使用して検索機能を提供したいと考えています。(構造化されたjsonオブジェクトはLuceneにインデックス付けされて保存され、Wordドキュメントなどの他のコンテンツはluceneにインデックス付けされますが、blobストレージに保存されます)1人のユーザーが所属するドキュメントを決して見ないように、検索を安全にしたい別のユーザーに。ユーザーが入力したアドホック検索を許可したい。最後に、プログラムでクエリを実行して、「ユーザーXのすべてのメモ」などの事前定義されたデータセットを返します。これらの3つの目的を達成するために、各ドキュメントにプロパティを追加する方法を理解していると思います。(私はそれらをここにリストしているので、誰かが答えるのに十分親切であれば、彼らは私が何をしようとしているのかについてより良い考えを持っているでしょう)

私の質問は、パフォーマンスとセキュリティに関するものです。

ユーザーごとに個別のインデックスを作成することでドキュメントのセキュリティを向上させることはできますか、または各検索のパラメーターとしてユーザーのIDを含めるだけで十分ですか?

ユーザーごとに個別のインデックスを作成することで、システムのインデックス作成速度と総スループットを向上させることはできますか?私の考えでは、個別のインデックスを使用すると、複数のインデックスライター(おそらく異なるサーバーインスタンス上でも)を同時に動作させ、それぞれが独自のインデックスを使用することで、システムを拡張できます。

任意の洞察をいただければ幸いです。

よろしく、

ネイト

4

2 に答える 2

2

もちろん、1つのインデックス。ManifoldCF(Solrの処理方法を知っているApache製品)を使用してセキュリティを管理することにより、提案したよりもさらに優れた方法を実行できます。

そして、1つのトピック、情報に基づいていない提案:Azureの代わりにCloudBeesまたはHeroku(またはAmazon)を使用したいと思います。

于 2012-06-22T22:13:41.713 に答える
0

インデックス作成に複数のマシンを使用するまでは、単一のインデックスを使用する方が便利だと思います。Luceneコミュニティは、インデックス作成プロセスを可能な限り効率的にするために多くの作業を行いました。したがって、意図的に分散インデックスを実装する場合を除いて、インデックスを分割することはお勧めしません。

ただし、インデックスを分割する理由はいくつかあります。

  • マシンに並行して利用できる複数のIOデバイスがある場合。この場合、IOバウンドの場合は、インデックスを分割することをお勧めします。
  • ドキュメントフィールドをインデックス間で分割します(これParallelReaderが想定されていることです)。これはよりエキゾチックな形式の分割ですが、フィールドの異なるグループを使用して検索を実行する場合は良い考えかもしれません。2つの検索クエリタイプがあるとします。1つはフィールドnameとを使用し、もう1つはフィールドとtypeを使用します。これらのフィールドが異なるレートで更新される場合(名前の更新は価格の更新よりもはるかにまれです)、インデックスの一部のみを更新すると、必要なIOリソースが少なくなります。これにより、システム全体のスループットが向上します。pricediscount
于 2012-06-25T03:12:34.887 に答える