NearRealTimeSearchの紹介

あけましておめでとうございます。大谷です。本年もよろしくおねがいいたします。
新年最初のエントリーはNearRealTimeSearchの紹介です。(
PDF版はこちら

1. NearRealTimeSearchとは
Solrを利用した検索サイトを作成するとき、多くの場合は登録するデータはバッチによる定期的な更新を行うようにするのが一般的です。これは、Solrのインデックスへの書き込みがトランザクションに対応していないことやインデックス更新を行なっている間の検索性能の劣化などが要因となっています。
ただ、最近では定時更新ではなく、よりリアルタイムに検索インデックスにデータの追加更新を反映したいという要件が多くなってきています。この要件に対応するために提案、実装されたものがNearRealTimeSearch(ほぼリアルタイム検索)と呼ばれる機能です(以降ではNRTと略します。)。
Luceneには2.9ですでにNRTが実装されていましたが、Solrにて利用できる形にするためにSOLR-2193で提案されました。

2. NRTの仕組み
NRTはLuceneのNRTを利用した仕組みになります。LuceneのNRTはインデックスの書き込みを行うIndexWriterから、Index検索のためのオブジェクトIndexReaderを取得することができるようになる機能になります。すなわち、インデックスがファイルに書き込まれる前の(メモリ上にあるインデックス)状態で検索が可能になることになります。
Solrでは、この機能を利用するためにこれまでコミット(commit)と呼ばれていた機能を以下の2つコミットとして再定義しました。

  • Hard Commit
    これまでのコミットと同義。停電からのデータロスをなくすためにfsyncを呼び出し、ファイルにインデックスを出力する。
  • Soft Commit
    新たに追加されたコミットの種類。インデックスの変更をファイルに反映せず、メモリ上に反映する。
    Soft CommitがNRTを利用するためのコミットとなります。ディスクへの書き込みは保証されませんが、ほぼリアルタイムに検索結果に反映がされます。

3. 制約事項
現在、NRTが利用できるのはtrunkである4.x系のみとなります。3.x系以前では残念ながら利用できません。
前述ですが、ディスクへ書き込みも保証されません。VMがクラッシュしたり停電が発生した場合は直前のHard Commitが実行された時点までインデックスの状態が戻ることに注意が必要です。
また、Soft Commitの仕組み上、レプリケーションによる同期が利用できません。こちらもHard Commit時点ごとにしかレプリケーションが動作しません。Soft Commitによるほぼリアルタイム反映についてはデータ更新対象となっているSolrサーバでのみ恩恵をうけることが可能です。

4. 利用方法
2で説明しましたが、Commitの新しいタイプとしてSoft Commitが追加されています。まずは、XMLによるコミット時の指定は次の様になります。

softCommit=”true”オプションを指定するとSoft Commitの動作となります。
管理画面のPendingDocsを見ると、Soft Commit前に更新したデータ件数がコミットされていない状態がわかります。ただし、Soft Commitは実施されていますので、検索結果には表示されます。
次は設定によるAutoCommitについてです。Solrではsolrconfig.xmlの設定によりAutoCommitが設定可能です。設定は次の通りです。

これまで同様、maxDocsによる指定とmaxTimeによる指定が可能です。

  • maxDocs
    直前のSoft Commitが実施されてから登録されたデータ数が指定された数に達した場合にSoft Commitが実行される。
  • maxTime
    データが登録されてから指定されたミリ秒経過するとSoft Commitが実行される。
    Hard Commitの設定についてはこれまでと同様のタグにて指定可能です。Soft Commitを毎秒、Hard Commitを数分おきとすることで、定期的にファイルにインデックスを保存しつつ、ほぼリアルタイムに更新を反映させるといった設定が可能になります。

5. 今後の展開
前述しましたがNRTは、マスタスレーブ構成(レプリケーション)には対応していません。マスタスレーブ構成についてはSolrのMLで話が上がりましたが、現在のレプリケーションの機能との併用は望めないようです。代わりにSolrCloudと呼ばれる別の新しい分散インデックスの機能が紹介されています。SolrCloudとはクラウドでの検索サービスとしてSolrを運用管理するために現状のSolrの拡張する機能です。
NRTについてはまずは、マスタスレーブでない環境で利用してみるのはいかがでしょうか。

参考:
http://wiki.apache.org/solr/NearRealtimeSearch
http://wiki.apache.org/solr/UpdateXmlMessages#Optional_attributes_for_.22commit.22_and_.22optimize.22
http://wiki.apache.org/solr/SolrConfigXml?#Update_Handler_Section
http://www.lucidimagination.com/blog/2011/07/11/benchmarking-the-new-solr-%E2%80%98near-realtime%E2%80%99-improvements/
http://lucene.472066.n3.nabble.com/NRT-and-replication-tt3422940.html
http://wiki.apache.org/solr/NewSolrCloudDesign

Solrの機能と性能について

はじめまして、シーマークの大谷です。

Solr入門が出版されてから1年以上経ちました。

SolrのコミュニティはSolr入門を書いて以降も活発に活動が続いており、Luceneプロジェクトと統合され、現在はバージョン3.3がリリースされています。(最近は2ヶ月おきにリリースが行われるくらいです)

Solrも多くのサイトで導入が検討されたり、実際に利用されてきています。

ただ、Solrは手軽に様々な機能が利用出来る反面、構成やケアすべき点が色々と存在します。

 

私の方では新機能の紹介や、Wikipediaのデータを利用した簡単な性能測定の結果などを

このブログで取り組んでいこうと思っています。よろしくお願いします。

 

※あと、個人のブログですが、lucene-gosenというSenの後継にあたる形態素解析ツールについて記述をしています。こちらも参考にしていただければと。

デジタルコンテンツ管理システム Lily について

はじめまして。シーマークの山本です。

我社でも、エンジニアがそれぞれ持っている興味やテーマを題材にして、技術系ブログを書き始めることになりました。同じ興味をもつエンジニアの方々との情報共有を通し、さらなるコラボレーションのきっかけとしていければいいな、と思っています。

そこで、1エンジニアである私の第一回目の記事を何で飾ろうかといろいろと考えました。最近のエンジニア世界で流行っているようなトピックをきれいにまとまてスマートに紹介!ってのもやってみたいです。

でも、我々がやっている実際のお仕事としては、既存の技術を使っただけでは解決できそうもない課題(新サービス開発、業務効率化、経営戦略実現など)に対して、どのようなアプローチで挑み、それを実現するためのアーキテクチャーとはどのようなものか、そういったことをお客様と一緒に考え成長しながら課題解決を目指すことが多いのです。

その中では、海のものとも山のものともつかない生まれたてのアプリやミドルウェアをうまく使いこなすことが、課題解決のためのキー・テクノロジーとなることがあります。そのためには、そのプロダクトがもつ特長と限界を、実践的な方法で突き詰めていくことが必要になってきます。

そこで今回、HBase+Solrを有機的に組み合わせた ”Lily” というオープンソースのデジタルコンテンツを管理するためのシステムについて、どんな特長があり、その限界はどこにあるのかを明らかにしていくなかで、実践的なノウハウを共有していけたらと思っています。

http://outerthought.org/site/products/lily.html

次回からは、システムの概要説明からはじめて、具体的なインストール方法、使い方などについて、書かせていただこうと思っています。