2012-05-08 8 views
7

Czy ktoś może mi wyjaśnić, jaka jest różnica między katalogiem FSD a katalogiem MMapDirectory? Chcę ogrzać moją pamięć podręczną. Czytałem, że może to być przydatne, ale nie mogłem znaleźć sposobu, w jaki będzie to pomocne podczas rozgrzewania pamięci podręcznej. Wyjaśnij mi, jeśli masz jakiś pomysł. Nawet wskaźniki są mile widziane.różnica między katalogiem FSD a katalogiem MMap?

Dokumentacja Lucene mówi, że MMap korzysta z pamięci wirtualnej, aby przyspieszyć wyszukiwanie indeksów.

Jak speedp się osiąga, a co się stanie, jeśli moje indeksy są duże, tak że nie zmieści się w mojej pamięci wirtualnej>

+0

Masz pierwszą część :) Ponieważ indeksy są dostępne w pamięci wirtualnej, wyszukiwanie będzie szybsze. Pomóż mi wymyślić drugą część pytania – ganesshkumar

Odpowiedz

7

MMapDirectory jest jednym z konkretnych podklas klasy abstrakcyjnej FSDirectory . Używa plików mapowanych w pamięci, aby uzyskać dostęp do informacji w indeksie. Dostępne są następujące opcje: SimpleFSDirectory i NIOFSDirectory, które używają różnych metod. Powinieneś rzucić okiem na documentation for FSDirectory po krótkie wyjaśnienie wszystkich trzech. Jak zobaczysz, FSDirectory.open(File) próbuje wybrać najlepszą implementację dla twojego środowiska.

Z własnego doświadczenia, że ​​nie zauważyli żadnej znaczącej różnicy w wydajności pomiędzy NIOFSDirectory i MMapFSDirectory, ale trzeba zrobić kilka testów wydajności z wykorzystaniem własnych danych i konfiguracji sprzętowej.

Jeśli skończy się używanie MMapFSDirectory, pamięć wirtualna i rozmiar indeksu mogą być problemem tylko na komputerze 32-bitowym (unless your indexes are larger than 2^48 bit = 32TB).

+0

Zrobiłem z tego projektu i wpływ MMapDirectory jest niezwykły. Zauważysz różnicę, jeśli rozmiar pliku jest ogromny. Ładuję plik, który nie pasuje do pamięci. – ganesshkumar

1

Jeśli Twoje indeksy nie zmieszczą się w pamięci wirtualnej, prawdopodobnie lepiej będzie korzystać z FSDirectory. Problem polega na tym, że użycie MMapDirectory, gdy nie mieści się w pamięci wirtualnej, jest równoważne użyciu FSDirectory i użyciu algorytmu buforowania systemu operacyjnego (algorytm buforowania systemu operacyjnego może być lepszy niż ten, który można ręcznie kodować). ("Równoważny", ponieważ w obu przypadkach tylko części indeksu będą znajdować się w pamięci fizycznej na raz.)

Ale jako "martin" wspomniano powyżej, musisz zrobić własne testy wydajności.