Szybkość odczytu java.nio a wielkość pliku

0

Szukam sposobu na zastąpienie baz danych jak Oracle, MySQL. Ponieważ zależy mi na szybkości wyszukiwania danych, dlatego postanowiłem zastosować java.nio. Mam w związku z tym dwa pytania:

1 Czy szybkość operacji na pliku jest uzależnione od wielkości tego pliku? Chodzi mi o to, czy podzielenie pliku na kilka i dostęp przy wykorzystaniu wątków dla każdego będzie efektywniejszy? Plik będzie zawierał około 2 milionów wierszy(Stringów).
2 Kompresja GZIP zmniejsza mi rozmiar do 1/9. Jak wpływa to na szybkość operacji na pliku. Jeśli to pomoże, to mam dysk SSD z tych dolnej półki cenowej.

FileChannel fc = ...
GZIPInputStream gis = new GZIPInputStream(Channels.newInputStream(fc));
0
  1. GZip generalnie jest formatem kompresji strumieniowej, tzn cały plik jest traktowany jako jeden blok i kompresowany - dlatego, aby się dostać do bajtu na pozycji n, trzeba wcześniej zdekodować n - 1 wcześniejszych bajtów. Aby twój program się skalował musiałbyś więc ręcznie podzielić plik na co najmniej tyle części ile masz wątków.
  2. Dobrze zrobione indeksy na bazie lub dobry program do indeksowania tekstu pozwoli ci wyszukiwać frazy sporo szybciej niż liniowe przeglądanie tekstu. Dla przykładu istnieje Apache Lucene.
  3. Jeśli zaindeksujesz sobie już plik to chyba można przełączyć bazę danych w tryb tylko do odczytu, skompresować offline, a potem wysyłać zapytania do takiej skompresowanej bazy.
  4. Nawet wolne SSD powinno przypieszyć mocno operacje na bazach danych. Z drugiej strony jeśli chcesz liniowo wczytywać i przeszukiwać pliki to czas dostępu (czyli największa zaleta SSD nad HDD) przestaje mieć znaczenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1