INFORMATION
テクノロジ

Solr 3.6.2 と 4.1.0 の検索性能比較

著者:関口宏司

はじめに

Lucene/Solr 4.1.0がリリースされました。本記事は4.0から導入されたCodecに着目し、Codec(Flex API)導入以前の最終バージョンである3.6.2と最新の4.1.0の検索性能比較を行いましたのでその結果を簡単に報告します。

Codec〜Flex APIとは

CodecはLuceneインデックスのセグメントファイルを読み書きする低レベルのプログラムです。提案当時(4.0開発当時)はFlex APIなどと呼ばれ、Luceneインデックス内を自在に(4軸方向に!)イテレートするAPIを提供するとともに、セグメントファイルのフォーマットをより柔軟に切り替えられるよう、Codecレイヤを明確に分離するように大幅に書き換えられました。

これにより新しいCodecを取り込むのが容易になったり、今後の研究で最新のCodecを試すのにLuceneが選ばれることが増えることが期待されます。

ユニークキー検索

Lucene 4.1ではPulsing41が使えるようになりました。Pulsingは低いdocFreqの単語辞書においてdocやpostingリストなどの情報を単語辞書内にインラインに展開することでディスクseekが1回節約できる機能です。LuceneコミッターのMikeさんのブログによれば、セグメントファイルがページキャッシュに載っていない状態では、50%程度もの速度向上が見られたようです。

セグメントファイルがページキャッシュに載っていない状態を作るために、テスト実施時は毎回キャッシュをクリーンアップする必要があります。そのような場面もあるかもしれませんが、ここではより実際の場面に近い、キャッシュをクリーンアップしない通常の状態でテストしてみます。期待する結果としては、seek数が少なくなる分、CPU使用率がわずかでも減るのではないか、というところです。

テストには日本語Wikipediaの記事を使いました。日本語Wikipediaの各記事にはシーケンシャルな整数値のIDを振ってあります。そして検索はstring型としたタイトルフィールドに対して行いました。そのため、ほぼユニークキー検索のテストとなっています。

結果を以下に示します。期待に反し、4.1では検索性能はあがったものの、CPU使用率はわずかながら上昇してしまいました。試験にはSolrを使ったので純粋なLuceneのテストになっていないこと、また、負荷がけクライアントを十分確保できなかったので、サーバー側の余力は残されていることを注記しておきます。

QPS比(3.6.2を100とした場合)平均応答時間(ms)CPU(%)
3.6.2100.0332.1
4.1.0(デフォルト)101.0336.7
4.1.0(Pulsing41)100.6336.6

圧縮機能

Codecの切り替えでサポートされるのはpostingリストだけではありません。Lucene 4.1.0ではデフォルトでstoredフィールドがLZ4圧縮されるようになりました。これにより、長いフィールドではI/O時間が短縮されることが期待できます。

実際に計測してみました。同じく日本語Wikipediaの記事を使い、記事部分をインデックスから抽出した適当な単語でハイライトつきで検索しました。

結果を以下に示します。4.1.0ではstoredデータのインデックスサイズが大きく減少し、検索性能はQPS、応答時間ともにわずかですが改善されました。

storedサイズ比QPS比平均応答時間(ms)CPU(%)
3.6.2100.0100.0585.9
4.1.063.2108.4481.0

まとめ

新しいCodecを使ったLucene 4.1.0と、Codec導入以前のLucene 3.6.2の検索性能を簡単なテストによって比較しました。テストでは実際にはSolrを使ったため、純粋なLuceneの負荷試験にはなっていません。そのためかCPU使用率については予想とは異なる結果を得ましたが、単純な検索性能は4.1でわずかに向上し、storedフィールドのインデックスサイズは小さくなるという結果を得ました。今後Lucene単体で追試をしてみたいと思います。なお、Solrのキャッシュはすべてオフにしてあります。

最後にテストで用いた環境を以下に記します。

サーバー仕様
マシンDELL PowerEdge T410
CPUIntel Xeon E5620 2.40GHz, 4 Cores / 8 Threads
メモリ16GB
HDD3.5 インチ SATA 7,200rpm
OSUbuntu Server 11.10 64bit
JavaJava 1.6u29
負荷がけクライアント仕様
マシンMacBook Pro
CPUIntel Core 2 Duo 2.66 GHz
メモリ8GB
OSMac OS X 10.6.8
JMeterApache JMeter 2.5.1



KandaSearch

KandaSearch はクラウド型企業向け検索エンジンサービスです。
オープンAPIでカスタマイズが自由にできます。

  • セマンティックサーチ

    人間が理解するように検索エンジンがテキストや画像を理解して検索できます。

  • クローラー

    検索対象文書を収集するWebクローラーが使えます。

  • 簡単操作のUIと豊富なライブラリー

    検索や辞書UIに加え、定義済み専門用語辞書/類義語辞書やプラグインがあります。

  • ローコードで低コスト導入

    検索UIで使い勝手を調整した後、Webアプリケーションを自動生成できます。

セミナー

企業が検索エンジンを選定する際のポイントから、
実際の導入デモをお客様ご自身でご体験!