2009-03-23 19 views
13

LuceneのRAMDirectoryはいつ使用しますか?他のストレージメカニズムよりも優れている点は何ですか?最後に、簡単なコード例はどこで見つけることができますか?RAMDirectoryの使用

+0

内部的には、ファイルを整理するために並行ハンスマップを使用します。 – Njax3SmmM2x2a0Zf7Hpd

答えて

16

インデックスデータを永続的に保存しない場合。私はテスト目的のためにこれを使用します。 RAMDirectoryにデータを追加します。ユニットはRAMDirでテストしますか?

public static void main(String[] args) { 
    try { 
     Directory directory = new RAMDirectory(); 
     Analyzer analyzer = new SimpleAnalyzer(); 
     IndexWriter writer = new IndexWriter(directory, analyzer, true); 

OR

public void testRAMDirectory() throws IOException { 

    Directory dir = FSDirectory.getDirectory(indexDir); 
    MockRAMDirectory ramDir = new MockRAMDirectory(dir); 

    // close the underlaying directory 
    dir.close(); 

    // Check size 
    assertEquals(ramDir.sizeInBytes(), ramDir.getRecomputedSizeInBytes()); 

    // open reader to test document count 
    IndexReader reader = IndexReader.open(ramDir); 
    assertEquals(docsToAdd, reader.numDocs()); 

    // open search zo check if all doc's are there 
    IndexSearcher searcher = new IndexSearcher(reader); 

    // search for all documents 
    for (int i = 0; i < docsToAdd; i++) { 
     Document doc = searcher.doc(i); 
     assertTrue(doc.getField("content") != null); 
    } 

    // cleanup 
    reader.close(); 
    searcher.close(); 
    } 

通常物事がRAMDirectoryと一緒に作業する場合、それは他の人とかなりの作業罰金でしょう。インデックスを永続的に保存することができます。
これに代わるものはFSDirectoryです。この場合のファイルシステムのアクセス許可(RAMDirectoryでは無効)

機能上、RAMDirectoryは(RAMDirectoryがFSDirectoryよりも目に見えるほど高速であることを除けば)RAMDirectoryとは明確な利点はありません。彼らは両方とも2つの異なるニーズに対応します。

  • RAMDirectory - >プライマリメモリ
  • FSDirectory - >セカンダリメモリ

&ハードディスクをRAMにかなり似ています。

RAMDirectoryがメモリ制限を超えるとどうなるかわかりません。 System.SystemExceptionスロー

:私は

OutOfMemoryException例外を除く外思います。

+0

あなたのお返事ありがとうございます... RAMDirectoryをFSDirectoryに使用する利点は何ですか? また、インデックスのサイズがRAMメモリを超えている場合はどうなりますか? – Jimmy

+3

オブジェクトのサイズに2GMの制限があります。 RAMDirecotryがそれを超えている場合は、たくさんのRAMがあってもOutOfMemoryExceptionが発生します。 – Barka

関連する問題