2009-10-17 8 views
9

Lucene検索クエリのパフォーマンスを向上させる必要があります。 RAMDirectoryを使用することはできますか?パフォーマンスを最適化しますか?これにはインデックスサイズの制限はありますか? 誰かがRAMDirectoryを使うことの長所と短所を挙げることができたら、私は感謝します。RAMDirectoryを使用する際の賛否両論を知りたい

ありがとうございました。

答えて

6

RAMDirectoryは高速ですが、ディスクに書き込まれることはありません。プログラムが実行されている間だけ存在し、プログラムを実行するたびにゼロから作成する必要があります。

索引がRAMに快適に収まり、索引を頻繁に更新しない場合は、ディスクに索引を作成してから、RAMDirectory(Directory dir)コンストラクタを使用してRAMDirectoryを作成できます。クエリは、ディスク上のクエリを実行するよりも速くなければなりません。いったん読み込むとペナルティを支払った後です。しかし、違いを測定してください。インデックスがRAMDirectoryとしてメモリに収まる場合は、ディスクキャッシュにも収まるため、大きな違いはありません。

+0

ur入力に感謝します。私はどのくらい小さな "十分に小さい"知っているかもしれませんか? – user43498

+0

私は利用可能な物理RAMよりも小さいと思います。 –

4

RAMDirectoryの使用状況をプロファイルする必要があります。少なくともLinuxでは、RAMDirectoryを使用するのは、OSがI/Oをバッファする方法のために、デフォルトのFSDirectoryを使用するよりも高速ではありません。

12

私はFSDirectoryとRAMDirectoryを比較します。

  • インデックスサイズは1.4G
  • CentOSに、5Gメモリ

検索千個のキーワード、平均/最小/最大応答時間(ms)であり、ここで

    あります
  • FSDirectory
    • 最初の実行: 351/7/2611
    • セカンドラン:47/7/837
    • 第ラン(再起動アプリ):53/7/2343
  • RAMDirectory
    • 最初のラン:38/7/1133
    • セカンドラン:34/7/189
    • 第ラン(再起動アプリ):38/7/959

RAMDirectoryはFSDirectoryより高速ですが、 'osファイルキャッシュがウォームアップした'の後では速度差がそれほど明確ではありません。 RMADirectoryの欠点は何ですか?私のテストで

  • それはメモリにそれをロードするためには、より多くのメモリを食べる、1.4Gファイル約2Gが必要です。 FSDirectoryはわずか700mしか使用しません。それはフルgcのためのより長い時間を意味します。
  • 特にインデックスファイルが大きい場合は、読み込みに時間がかかります。インデックスを開くときにファイルからメモリにデータをコピーする必要があります。つまり、アプリを再起動すると、リクエストがブロックされる時間が長くなります。
  • 同時に2つのインデックスを管理するのはあまり実用的ではありません。私たちのアプリは数時間ごとにインデックスを切り替えるからです。私たちは新しいインデックスがウォームアップして、古いインデックスが同じTomcatでまだ動作していることを望みます。
関連する問題