Использование RAMDirectory - PullRequest
       12

Использование RAMDirectory

14 голосов
/ 23 марта 2009

Когда мне следует использовать RAMDirectory от Lucene? Каковы его преимущества перед другими механизмами хранения? Наконец, где я могу найти простой пример кода?

1 Ответ

17 голосов
/ 23 марта 2009

Когда вы не хотите постоянно хранить данные вашего индекса. Я использую это в целях тестирования. Добавьте данные в ваш 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 над FSDirectory (кроме того факта, что RAMDirectory будет заметно быстрее, чем FSDirectory). Они оба сервера две разные потребности.

  • RAMDirectory -> Первичная память
  • FSDirectory -> Вторичная память

Очень похоже на RAM и жесткий диск.

Я не уверен, что случится с RAMDirectory, если он превысит лимит памяти. Я бы кроме

OutOfMemoryException: System.SystemException

выброшен.

...