技術者の皆さん、こんにちは。
月に数百万の訪問者がいる(PHP)Webサイトがあり、400万のドキュメントがホストされているWebサイトでSolRインデックスを実行していると仮定します。Solrは4つの別々のサーバーで実行されており、1つのサーバーがマスターで、他の3つのサーバーが複製されます。
5分ごとに何千ものドキュメントをSolrに挿入できます。さらに、ユーザーは自分のアカウントを更新できます。これにより、solrの更新もトリガーされます。
ドキュメントを見逃すことなく、インデックスをすばやく安全に再構築するための安全な戦略を探しています。そして、安全なデルタ/更新戦略を立てること。私は戦略について考えました。ここで専門家と共有して、このアプローチを採用すべきかどうか、または彼らが(まったく)異なるアドバイスをする可能性があるかどうかについての意見を聞きたいと思います。
Solr DataImport
すべての操作で、1つのデータインポートハンドラーを使用します。データとデルタインポートをDataImportHandlerDeltaQueryViaFullImportのような1つの構成ファイルに混合したいと思います。MySQLデータベースをデータソースとして使用しています。
インデックスの再構築
インデックスを再構築するために、私は次のことを念頭に置いています。「ライブ」コアの近くに「reindex」という新しいコアを作成します。dataimporthandlerを使用して、ドキュメントセット全体(400万ドキュメント)を完全に再構築します。これには、合計で約1〜2時間かかります。ライブインデックスには、1分ごとに更新、挿入、削除があります。
約1〜2時間かかった再構築後、新しいインデックスはまだ実際には最新ではありません。遅延を小さくするために、新しいコアに対して1つの「デルタ」インポートを実行して、過去1〜2時間のすべての変更をコミットします。これが行われると、コアスワップを実行します。毎分実行される通常の「デルタ」インポートハンドラーは、この新しいコアを取得します。
ライブコアへの更新のコミット
ライブコアを追跡するために、デルタインポートを毎分実行します。コアスワップにより、インデックスの再作成コア(現在はライブコア)が追跡され、最新の状態に保たれます。dataimport.propertiesもスワップされるので、このインデックスが数分間遅れても、実際には問題にならないはずだと思いますか?デルタインポートはこれらの数分間の遅延を追い越しましたが、可能であるはずです。
あなたが私の状況と私の戦略を理解し、私があなたの目に正しい方法でそれをしているのかどうかアドバイスしてくれることを願っています。また、思いもよらなかったボトルネックがないか知りたいのですが。Solrバージョン1.4を実行しています。
私が持っているいくつかの質問は、レプリケーションについてはどうですか?マスターサーバーがコアを交換する場合、軟膏はこれをどのように処理しますか?
また、スワッピングなどで書類を紛失するリスクはありますか?
前もって感謝します!