2009-03-23 22 views
13

¿Cuándo debería usar Lucene's RAMDirectory? ¿Cuáles son sus ventajas sobre otros mecanismos de almacenamiento? Finalmente, ¿dónde puedo encontrar un ejemplo de código simple?Usando RAMDirectory

+0

Internamente, utiliza un mapa simultáneo para organizar los archivos. – Njax3SmmM2x2a0Zf7Hpd

Respuesta

16

Cuando no desea almacenar permanentemente sus datos de índice. Lo uso para fines de prueba. Agregue datos a su directorio RAM, realice las pruebas de su unidad en RAMDir.
p.

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

O

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(); 
    } 

Por lo general, si las cosas funcionan con RAMDirectory, lo hará más o menos bien el trabajo con los demás. es decir, para almacenar permanentemente su índice.
Alterna a esto es FSDirectory. En este caso, tendrá que encargarse de los permisos del sistema de archivos (que no es válido con RAMDirectory)

Funcionalmente, no hay una ventaja clara de RAMDirectory sobre FSDirectory (aparte del hecho de que RAMDirectory será visiblemente más rápido que FSDirectory). Ambos sirven dos necesidades diferentes.

  • RAMDirectory -> La memoria primaria
  • FSDirectory -> La memoria secundaria

muy similar a la RAM & disco duro.

No estoy seguro de qué pasará con RAMDirectory si supera el límite de memoria. Me excepto A OutOfMemoryException

: System.SystemException

tirado.

+0

hola, gracias por su respuesta ... ¿cuál es la ventaja de usar RAMDirectory sobre FSDirectory? Y también, ¿qué pasa si el tamaño del índice excede la memoria RAM? – Jimmy

+3

Hay un límite de 2GM para el tamaño de un objeto. Si su RAMDirecotry excede eso, obtendrá una OutOfMemoryException incluso si tiene mucha RAM. – Barka

Cuestiones relacionadas