与えられた:
- クライアント(ビジネス顧客)ごとに1つのデータベース
- 5000クライアント
- クライアントには2〜2000人のユーザーがいます(平均は約100ユーザー/クライアント)
- データベースあたり10万から1000万レコード
- ユーザーはこれらのレコードを頻繁に検索する必要があります(データをナビゲートするための最良の方法です)
おそらく関連情報:
- 毎週複数の新規クライアント(営業時間中いつでも)
- 複数のWebサーバーとデータベースサーバー(ユーザーは任意のWebサーバーを介してログインできます)
- Lucene(およびSolr)には幅広いサポートがあるため、言語やSQLブランドにとらわれないようにしましょう。
例えば:
Joel Spolskyはポッドキャスト#11で、彼のホスト型Webアプリ製品であるFogBugzOn-DemandはLuceneを使用していると述べました。彼には何千ものオンデマンドクライアントがいます。そして、各クライアントは独自のデータベースを取得します。
クライアントごとにインデックスを使用し、クライアントのデータベースに保存します。詳細はわかりません。そして、これがLuceneにとって深刻なmodであるかどうかはわかりません。
質問:
各クライアントがデータベース内でのみ検索できるように、Lucene検索をどのように設定しますか?
インデックスをどのように設定しますか?
インデックスはどこに保存しますか?
すべての検索クエリにフィルターを追加する必要がありますか?
クライアントがキャンセルした場合、そのインデックス(の一部)をどのように削除しますか?(これは些細なことかもしれません-まだわかりません)
可能な解決策:
各クライアント(データベース)のインデックスを作成します
- 長所:検索は高速です(すべてのインデックスを1つにする方法よりも)。インデックスは、クライアントのデータのサイズに関連しています。
- 短所:これが何を意味するのかわかりません。また、これがLuceneの範囲を超えているかどうかもわかりません。
database_nameフィールドを持つ単一の巨大なインデックスがあります。常にdatabase_nameをフィルターとして含めます。
- プロ:わからない。技術サポートや請求部門がすべてのデータベースで情報を検索するのに適しているかもしれません。
- 短所:検索は(クライアントごとのインデックス方式よりも)低速です。クエリフィルターが削除された場合のセキュリティの欠陥。
最後にもう1つ、 Solr(Luceneの拡張)
を使用した回答も受け入れます。おそらく、この問題により適しています。わからない。