Upload
ebisawa-shinobu
View
1.198
Download
3
Embed Size (px)
Citation preview
徹底比較!! Heliosearch vs Solr
デジタル・インフォメーション・テクノロジー株式会社
海老澤 志信
第15回Solr勉強会
2014/12/08
・ 海老澤 志信
・ 所属
・ 現業務
リクルートグループの検索システム
コンサル・開発・保守・運用・サイト導入
・ 経歴
組み込み系~Android端末開発
自社でのSolr/ElasticSearch業務増加に伴い部署移動
・ Solr歴 半年です。が……
▶ 先日Solrメーリングリストに投稿したパッチが
Lucene4.10.0で採用されました。
■自己紹介
■自己紹介(2)
こんな感じで。(Lucene 4.10.0 リリースノート抜粋)
(業務用メールの差出人名設定が日本語フルネームだったため。
業務用メアドで送信してしまったが故の悲劇でした……)
■アジェンダ
・ Heliosearchとは
・ Heliosearchの特徴
・ Heliosearchを検証することにした理由
・ 検証方法
・ 検証結果
・ Heliosearchを使ってみて
■Heliosearchとは
▶Lucene/Solrのコードを使用して拡張実装された、
次世代のオープンソース検索エンジン
▶Solrの製作者である
“Yonik Seeley”氏のプロジェクト
先日開催されたLucene/Solr Revolution 2014でも
Heliosearchについてスピーチされていました。
Heliosearch is a high-performance NoSQL search server,
the next generation of Solr open source search.
http://heliosearch.org/より引用
■Heliosearchの特徴(1)
1. クエリ構文はSolrの上位互換
▶ クライアントは相手が
SolrかHeliosearchか意識しないで
そのまま使えます!
■Heliosearchの特徴(2)
2. ファセット処理の高速化
▶ Heliosearchのファセット処理は
なんと、Solrの約2倍のパフォーマンスが
出る!!
参考:http://heliosearch.org/native-code-faceting/
■Heliosearchの特徴(3)
3. GC負荷の軽減
▶ フィルタキャッシュを
オフヒープ化することにより
CMS/Full GCを大幅削減!!
参考:http://heliosearch.org/off-heap-filters/
■Heliosearchの特徴(4)
4. フィルタクエリの最適化
▶ フィルタクエリに、
ORを連結したTermQueryを指定すると
最適化によってクエリが高速!!
参考:http://heliosearch.org/solr-terms-query/
■Heliosearchを検証することにした理由
本当にHeliosearchって
こんなにすごいの?
■検証方法
今回は、業務でお世話になっているリクルートグループの2サイトから
インデックス、クエリを一部利用させていただき検証を行います。
4.10.2 0.08
[比較ソフト]
VS
サイト名 Aサイト Bサイト
CPU使用率 低め 高め
平均QPS 高め 低め
[比較データ傾向]
Select
■検証方法(イメージ)
Select Select
Update Update
Update
ドキュメント1万件単位
Commit
実行後、5分間ウェイト
Web バッチ
検証は、一律30分1セットで実施します。
■検証環境
サイト名 Aサイト Bサイト
ドキュメント件数 1000万件以下
ノード数 1ノード
検索の負荷 500 QPS 50 QPS
更新の負荷 前述通り
JVMヒープ 約7GB
サーバスペック
CPU: 8コア
OS: Linuxサーバ(Red Hat)
物理メモリ:約96GB
サイト別の条件
※あくまで検証はサイトA・B相当のデータを
使うということだけ。
■検証開始
■検証結果
▶ 全て、Solrと変わりませんでした。
・ CPU...
・ QTime...
・ GC負荷...
QTime 全クエリ ファセットクエリ
Aサイト
Bサイト
■考察(1):ファセット処理の高速化
▶ SolrとHelioの差は誤差の範囲です。
▶ ファセット付クエリは特に速くなかった。
Solr Helio
■考察(2): GC負荷の軽減
JVM ヒープ 使用サイズ
Aサイト
Bサイト
Solr Helio
0%
25%
50%
75%
100%
125%
0%
25%
50%
75%
100%
125%
▶ Aサイト・Bサイトともに
ヒープ使用サイズはがくっと下がった。が……
-22%
-77%
GC実行時間
Aサイト
Bサイト
■考察(3): GC負荷の軽減
-1.7秒
(-5% )
-0.03秒
(-9% )
▶ またも、誤差の範囲……。
Solr Helio
■考察(4)
今後に向けて
(1) 試験方法の見直し
▶ Heliosearchに適した
クエリ・インデックスの 組み方は無いか?
(2) Heliosearchの理解
▶ ソースコードを読み込み
実装面からもHeliosearchの特性を追求。
[おまけ]
今回の検証では本格的に比較していないが、
フィルタクエリの最適化についても、
処理速度はあまり変わらない印象があった。
■Heliosearchを使ってみて(1)
1. Heliosearchのクラス仕様差分
▶ カスタマイズ処理周りで修正が発生し
Solr4.10.2と同一コードを使用出来なかった。
2. “facet.offset=-1”でJVMクラッシュ
▶ SolrだとExceptionとなるコード。
Nativeメモリへの不正アクセスでNG。
■Heliosearchを使ってみて(2)
3. ログ仕様変更
(1) 500文字以上省略
(2) QTime/Status非出力化
▶ 必要なら、Solr相当に戻しましょう!
[...115 more chars]hits=37340 status=0 QTime=313
4. 新機能周りの品質
▶ 「フィルタクエリの最適化」に関わるコードで
見つけた不具合をプルリクしコミットしてもらいました。
▶ まだあまりgithubが盛り上がってないですが
ぜひ皆さんも使って、向上させて行きましょう!
■Q&A
この時間を借りてご紹介させて下さい。
弊社製品『 』が
「ITpro EXPO AWARD 2014」で
優秀賞を受賞いたしました。
http://www.ditgroup.jp/
ご清聴ありがとうございました。
お問い合わせ先・エンジニア募集中