2009-08-18 12 views

Odpowiedz

16

Czy istnieje sposób na zachowanie indeksu w pamięci RAM zamiast przechowywania go na dysku twardym?

Korzystanie z klasy RAMDirectory

SampleUsage here

Również z Lucene FAQ

ImproveSearchingSpeed

Generalnie na wyższą wydajność indeksowania najlepiej opróżnić użycie pamięci RAM zamiast licznika dokumentów i użyć jak największego bufora RAM.

Also check this question:

EDIT:RE: RamDirectory, jako API mówi RamDirectory jest Implementacja pamięci rezydentem katalog., to zachowuje tylko te indeksu w pamięci RAM, w sposób określony przez katalogu RAMDirecory

RE: Buforowanie W mojej wiedzy, Lucene buforuje wyników wyszukiwania za pomocą filtrów pls Look @CachingWrapperFilter i QueryWrapperFilter

+0

Dziękuję bardzo za szczegółową odpowiedź. Mam dwa dalsze pytania. Po pierwsze, czytałem, że Lucene robi buforowanie, które utrzymywałoby indeks częściowo w pamięci RAM. Ale RAMDirectory jest inny, prawda? Czy zachowuje cały indeks w pamięci RAM? Po drugie, widziałem setRAMBufferSizeMB, rozumiałem, że chodziło o przyspieszenie indeksowania, a nie wyszukiwanie. Czy przyspiesza wyszukiwanie? – elif

+0

oops, zmieni mój wpis – Narayan

+0

Z "ImproveSearchingSpeed": "Otwórz IndexReader z readOnly = true", czy wiesz jak to zrobić w Lucene 4+? Nie mogłem znaleźć żadnych przykładów ... – Gevorg

1

Dysk RAM może być rozwiązaniem tego problemu. Mini-HOWTO jest dostępne pod adresem http://www.vanemery.com/Linux/Ramdisk/ramdisk.html. Zamontuj dysk RAM jako katalog indeksu i powinieneś to zrobić.

+0

pamiętać, że za duża indeksy, "sprzętowe" dyski RAM są również dostępne ... w zasadzie urządzenie z interfejsem dysku twardego, ale wypełnione DRAM zamiast talerzy. – erickson

+0

Dziękuję za odpowiedź. Rozważaliśmy to. Ale zwykle nie używamy tej opcji, ponieważ nie mamy tak dużego doświadczenia w systemie operacyjnym. Uważamy, że dałoby to nam mniej kontroli i mniejszą zdolność do obserwowania/monitorowania wskaźnika. – elif

1

Zapoznaj się z dokumentacją RAMDirectory. Oto basic usage example. Będzie działać tylko wtedy, gdy indeks jest wystarczająco mały.

+0

I dziękuję za odpowiedź. Jaki rozmiar będzie mały? Indeks ma około 20 MB i nie spodziewamy się, że wzrośnie on więcej niż 5 razy. Czy to wystarczająco małe? – elif

+0

Nie ma za co. 100 MB jest rzeczywiście wystarczająco małe. Powinieneś rozważyć użycie indeksu dysku z prawidłowymi ustawieniami rozmiaru stosu JVM. Spowoduje to konieczność ponownej indeksacji po ponownym uruchomieniu aplikacji i może być tak szybkie, jak RAMDirectory. Zobacz także: http://www.lucidimagination.com/Community/Hear-from-the-Experts/Articles/Scaling-Lucene-and-Solr o prędkości wyszukiwania. –

+0

Dlaczego jest on ponownie indeksowany po ponownym uruchomieniu aplikacji? Myślałem, że mogę odczytać indeks na dysku twardym do RAM za pomocą RAMDirectory. Czy muszę ponownie wyświetlać za każdym razem, gdy chcę odczytać indeks w pamięci RAM? Dziękujemy za link. – elif

Powiązane problemy