Solr の write-only モード | KandaSearch Community Support Forum

Solr の write-only モード

トピック作成者:ks-solruserml-bot (2025/02/12 15:26 投稿)
4
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/vwvowkvwbftf2fynw6q1nzg0l9v6wtdh into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

私たちは現在、次のようなセットアップを使用しています。「オフライン」でSolrを定期的にインデックスし、そのデータフォルダをストレージにコピーします。その後、プロダクション環境にSolrをデプロイするときに、コンテナがそのデータフォルダをファイルシステムの適切な場所にダウンロードしてからSolrサーバーを起動します。Solrが起動した後は更新されることはなく、次のサイクルで破棄して置き換えるだけです。

この方法は問題なく動作していますが、インデックスの高速化に役立つ調整が何かあるのではないかと思い、質問させていただきます。特に、インデックス作成中は検索が行われないことが確実な場合に効果的な方法を探しています。
現在、インデックス対象のデータは約4,000万件のドキュメントで、ほとんどの時間はコミットの待機に費やされています。現在は500万件ごとにコミットしていますが、これが妥当でしょうか?もっと頻繁にコミットすべきですか?それとも最後に一度だけコミットすべきでしょうか?

もちろん、ここで提供している情報は十分ではないかもしれませんが、このようなセットアップに関するアドバイスがあれば教えていただきたいです。

よろしくお願いします。
/Noah

返信投稿者:ks-solruserml-bot (2025/02/12 15:26 投稿)

こんにちは、Noahさん

以前に聞いたことがある方法ですが、自分では試したことがありません。それは、すべてのソフトコミットとハードコミットを無効にして、最後に1回だけ手動でコミットするという方法です。
これが4,000万件すべてのドキュメントに対して機能するかどうかは分かりませんが、大きなチャンク単位で処理するとインデックス作成が速くなる可能性があります。

—ufuk

返信投稿者:ks-solruserml-bot (2025/02/12 15:27 投稿)

複数のスレッドを使ってバッチを送信してください。私は中程度のサイズのバッチを2つ、CPUごとに2つのスレッドを使用しています。CPU利用率がほぼ100%に近づくまで調整できます。

なぜCPUごとに2つのクライアントスレッドを使うのか?おおよそ、一方のバッチはCPUで処理され、もう一方のバッチはネットワークを介して送信中で、すぐに処理を開始できる状態になるからです。

インデックス作成はCPU集約的な作業なので、CPU利用率が100%に近づくと、それ以上は性能を引き出せません。

さらに高速化するには、CPUを増やしてください。

コミットの調整が意味のある違いを生むとは思えません。自動コミットを使用することで、インデックス作成スレッドが待機するのを防ぎます。

wunder
Walter Underwood
wunder@wunderwood.org
http://observer.wunderwood.org/ (私のブログ)

返信投稿者:ks-solruserml-bot (2025/02/12 15:27 投稿)

すみません、編集が不完全でした。「中程度のサイズのバッチを使用しています」とするべきでした。

また、「CPUごとに2つのスレッド」という考え方は、クエリ用にいくらかのCPUを確保したい場合にも機能します。例えば、4つのCPUを持つマシンで4つのスレッドを使ってインデックス作成を行うと、おおよそ2つのCPUがクエリ用に空いている状態になります。あくまで大まかな目安ですが。

wunder
Walter Underwood
wunder@wunderwood.org
http://observer.wunderwood.org/ (私のブログ)

返信投稿者:ks-solruserml-bot (2025/02/12 15:27 投稿)

私もUfukに賛成です。最後までコミットしない方が良いでしょう。コミットは変更の可視性に関するものであり、耐久性(SolrCloudや場合によってはスタンドアロンモードでは)には関係ありません。そのため、クライアントから明示的なコミットを送信する必要は、最後までありません。

また、solrconfig.xmlで自動ソフトコミットを無効化することで多少の効果があるかもしれませんが、Walterが示唆するように、大きな違いはないかもしれません。主にインデックス作成をブロックしないためです。ただし、自動ソフトコミットはSolrに余計な作業をさせる可能性があり、バックグラウンドのマージを引き起こします。そして、一度に1つのバックグラウンドマージしか実行できません。

さらにインデックス作成を高速化するためには、mergeFactorを20程度に設定し、最後に10セグメントへの「最適化(optimize)」を実行すると良いでしょう。

〜 David Smiley
Apache Lucene/Solr検索開発者
http://www.linkedin.com/in/davidwsmiley

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2025 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?