Quand dois-je utiliser RAMDirectory de Lucene? Quels sont ses avantages par rapport aux autres mécanismes de stockage? Enfin, où puis-je trouver un exemple de code simple?Utilisation de RAMDirectory
Répondre
Lorsque vous ne souhaitez pas stocker de manière permanente vos données d'index. Je l'utilise à des fins de test. Ajoutez des données à votre RAMDirectory, faites vos tests unitaires dans RAMDir.
par exemple.
public static void main(String[] args) {
try {
Directory directory = new RAMDirectory();
Analyzer analyzer = new SimpleAnalyzer();
IndexWriter writer = new IndexWriter(directory, analyzer, true);
OU
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();
}
Habituellement, si les choses fonctionnent avec RAMDirectory, il sera à peu près fin de travail avec les autres. c'est-à-dire pour stocker de manière permanente votre index.
L'alternative à ceci est FSDirectory. Vous devrez prendre soin des permissions du système de fichier dans ce cas (qui n'est pas valide avec RAMDirectory)
Fonctionnellement, RAMDirectory n'a pas d'avantage sur FSDirectory (à part le fait que RAMDirectory sera visiblement plus rapide que FSDirectory). Ils ont tous les deux deux besoins différents.
- RAMDirectory -> Mémoire primaire
- FSDirectory -> Mémoire secondaire
assez similaire à la RAM & disque dur.
Je ne suis pas sûr de ce qui arrivera à RAMDirectory s'il dépasse la limite de mémoire. J'excepte un
OutOfMemoryException: System.SystemException
jeté.
salut, merci pour votre réponse ... quel est l'avantage d'utiliser RAMDirectory sur FSDirectory? Et aussi, que faire si la taille de l'index dépasse la mémoire RAM? – Jimmy
Il y a une limite de 2GM à la taille d'un objet. Si votre RAMDirecotry dépasse cela, vous obtiendrez une exception OutOfMemoryException même si vous avez beaucoup de RAM. – Barka
En interne, il utilise une carte simultanée pour organiser les fichiers. – Njax3SmmM2x2a0Zf7Hpd