はじめに
Solr を使ったシステムでは、データの追加(import)処理が性能や安定性に大きく影響します。
特に 数十万〜数百万件規模のデータを一括投入するケースでは、単純に add や commit を繰り返すだけでは十分なパフォーマンスが出ず、処理時間が大幅に増加してしまいます。
今回の取り組みでは、大量データインポート時の処理速度を改善することを明確な目的として、Solr の動作特性やリソース負荷を踏まえながら改善を進めました。
この記事では、その過程で実際に効果のあった Solr インポート高速化のための実践的な Tips をまとめて紹介します。
前提
- Solrバージョン:6.6.6(旧系統)
- 使用ライブラリ:
rsolr(Ruby) - 対象データ件数:数十万〜数百万件
- 処理内容:Solrからの取得 → 加工 → Solrコアへ投入
- 処理方式:バッチ単位で複数プロセス並列実行
- 目的:処理の速度の向上
1. commitのタイミングを最適化する
Solrは、addしたデータがすぐには検索結果に反映されません。
明示的にcommitを行うことで初めて検索対象になります。
✅ 悪い例
records.each do |record|
solr.add(record)
solr.commit
end→ 各レコードごとにcommitが走るため、極端に遅くなります。
✅ 良い例
batch_size = 5000
records.each_slice(batch_size) do |batch|
solr.add(batch)
solr.commit
end- commit回数を減らすことでI/O負荷を軽減。
2. commitWithinを上手く使う
Solrには、commitWithinというパラメータがあります。
rsolrでの記述方法solr.add(docs, add_attributes: { commitWithin: 20000 })
これは「20秒以内に自動でcommitしてほしい」というリクエストです。
手動commitを減らしたい場合に有効ですが、以下のような特徴があります。
項目内容
👉 確実にcommitタイミングを制御したいときは、明示的なcommitの方が安全です。
3. openSearcher=falseで一時的に検索負荷を抑える
大量インポート中に検索も同時に走っている場合、commitごとにSearcherが再オープンされて負荷が増します。
これを防ぐには、openSearcher=falseを指定します。
solr.commit(params: { openSearcher: false })
- 検索の再読み込みを抑止
- インポート処理完了後、最後に一度だけ
openSearcher=trueでcommit
# 最後に反映 solr.commit(params: { openSearcher: true })
これにより、バッチ中の検索負荷を大幅に削減できます。openSearcher=falseなので、Solr上にデータは存在するが、検索は不可な状態です。Solrのdocsや各処理の整合性を確認しつつ適用しましょう。
4. 並列処理時はcommit衝突に注意
複数プロセスで同一コアに対してcommitを投げると、Solr内部でロックが発生し、
「commit待ち状態」が連鎖的に遅延を引き起こすことがあります。
対策例
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/53973
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
フリーランスエンジニア大募集中!
現在、「WEBエンジニア」「フロントエンジニア」「データサイエンティスト」など、様々な職種のフリーランスエンジニア様を募集中です。まずは以下よりお気軽にご応募ください!
採用ページはこちら:https://itanken.com/register
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
Wantedly:https://www.wantedly.com/companies/rightcode
コーポレート:https://rightcode.co.jp/