Solr 1.3と1.4の検索パフォーマンス比較

TopHatenarBlogopolisでは現在、全文検索用途にApache Solr 1.3を使っていますが、去年11月にSolr 1.4がリリースされたので、近いうちに1.4に移行したいと思っています。

そこで、1.3と1.4の検索パフォーマンスにどのくらい差があるのか、TopHatenarで収集しているブログの本文データを使って、以下の条件で計測してみました。

計測は、事前にSolrをウォームアップし、キャッシュが十分に効いた状態で行いました。

  • Solrサーバ環境
    • OS: CentOS 5.4 (x86_64)
    • CPU: Phenom II X4 905e
    • RAM: DDR2-800 9GB
    • HDD: Seagate ST3160815AS (160GB, 7200rpm)
    • JRE: 1.6.0_17-b04 (64bit)
    • Tomcat: 6.0.20
    • Solrのキャッシュ設定
      • filterCache size: 512
      • queryResultCache size: 512
      • documentCache size: 512
      • queryResultMaxDocsCached: 200
  • インデックス
    • ドキュメントの内容: ブログ記事(URL, タイトル, 本文)
    • ドキュメント数: 約30万
    • インデックスサイズ: 2.1GB
  • 検索方法
    • Solrサーバへの接続手段: Javaプログラム (CommonsHttpSolrServerを使用)
    • 使用クエリ: はてなブックマークの最頻出タグ1000個
    • 検索対象フィールド: 本文
    • 取得フィールド: URL, タイトル
    • 検索結果の最大取得行数: 10, 100, 1000
    • 同時接続数(スレッド数): 1, 2, 4, 8, 16, 32, 64

計測結果

スループット(QPS, 1秒あたりのクエリ処理数)は、以下のグラフのようになりました。


レイテンシ(クエリの応答時間)の平均値は、以下のグラフのようになりました。


今回の条件下でSolr 1.3と1.4を比較すると、接続数が少ないうちはほとんど同等の検索パフォーマンスを示していますが、並列性が高くなると、圧倒的に1.4の方が速くなりました。64スレッドの場合、10行取得(最初の10件まで検索)時のスループットは3倍、レイテンシは10倍も優秀です。1000件取得になると、レイテンシは1.3に少し劣るものの、スループットはやはり3倍以上優秀です。

この大幅なパフォーマンス向上がSolr自身によるものか、Solrで内部使用しているLuceneが2.4-devから2.9に上がったことによるものか自分には分かりませんが(多分両方)、高負荷な環境でSolr 1.3を運用している場合、1.4への移行を検討した方が良さそうです。