関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
<< Baileyのアーキテクチャ - 今後の超大規模検索インフラの指針 | main | Solr 2について >>
NIOFSDirectory (2.4)
FSDirectoryを拡張した新しいDirectoryクラスであるNIOFSDirectoryがLucene 2.4で導入されることになった。名前からわかるとおり、NIOFSDirectoryはjava.nio、具体的にはjava.nio.channels.FileChannelをFSIndexInputのreadInternal()メソッドの実装に用いたものである。

FSIndexInputのreadInternal()メソッドはマルチスレッドで複雑なクエリを多数投入してLuceneの負荷試験をしたことのある方なら見覚えがあるかもしれない。FSDirectory版の同クラス(FSIndexInputはFSDirectoryの内部クラスである)のreadInternal()メソッドは内部にsynchronizedブロックがあり、特にマルチスレッドで複雑なクエリを多数投入しているときにwaitが発生しやすい場所となっていた。このsynchronizedブロックは独自にseek()のpositionを管理している同クラスが、読み込もうとしている位置がpositionと等しいときは余計なseek()をしないように、seek()とsetPosition()をアトミックに行えるよう、RandomAccessFileクラスを拡張して設けているものである。よって検索の負荷試験をしているときなどにスタックトレースを採取すると、FSIndexInputのreadInternal()メソッドでwaitしているところが観察できることがよくあるのだった。

新しいNIOFSDirectoryではFileChannelのread(ByteBuffer dest, long position)メソッドを用いることにより、seek()とsetPosition()をアトミックに行うためのsynchronizedブロックが不要となる。試験的なプログラムではこれで結構速くなるようだ。

多数ユーザから同時に複雑なクエリ(多数のORで接続されたクエリなど)が投入されるアプリケーションを運用している方は試してみるといいだろう。

https://issues.apache.org/jira/browse/LUCENE-753
| 関口宏司 | Luceneクラス解説 | 16:47 | comments(0) | trackbacks(0) |









http://lucene.jugem.jp/trackback/248
+ Solrによるブログ内検索
+ PROFILE
 123456
78910111213
14151617181920
21222324252627
282930    
<< April 2019 >>
+ LINKS
検索エンジン製品 - 比較のポイント
商用検索エンジンを購入した企業担当者は読まないでください。ショックを受けますから・・・
>>製品比較 10のポイント
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン (JUGEMレビュー »)
関口 宏司,三部 靖夫,武田 光平,中野 猛,大谷 純
+ RECOMMEND
Lucene in Action
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless
FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
qrcode
+ SPONSORED LINKS