Chcielibyśmy przechowywać miliony plików tekstowych w systemie plików Linux, aby móc spakować i udostępnić dowolną kolekcję jako usługę. Wypróbowaliśmy inne rozwiązania, takie jak baza danych kluczy / wartości, ale nasze wymagania dotyczące współbieżności i równoległości sprawiają, że korzystanie z macierzystego systemu plików jest najlepszym wyborem.
Najprostszym sposobem jest przechowywanie wszystkich plików w folderze:
$ ls text_files/
1.txt
2.txt
3.txt
co powinno być możliwe w systemie plików EXT4 , który nie ma ograniczenia liczby plików w folderze.
Dwa procesy FS będą następujące:
- Napisz plik tekstowy ze złomowania w Internecie (liczba plików w folderze nie powinna mieć wpływu).
- Spakuj wybrane pliki według listy nazw plików.
Moje pytanie brzmi: czy przechowywanie do dziesięciu milionów plików w folderze wpłynie na wydajność powyższych operacji lub ogólną wydajność systemu, inaczej niż tworzenie drzewa podfolderów dla plików, w których będą żyć?
ls -l
wszystko inne, stat
co jest każdym i-węzłem w katalogu (np. bash
Globbing / tabulacja), będzie sztucznie szybsze niż po pewnym zużyciu (usuń niektóre pliki, napisz nowe). ext4 może to zrobić lepiej niż XFS, ponieważ XFS dynamicznie przydziela miejsce dla i-węzłów vs. danych, więc myślę, że możesz skończyć z bardziej rozproszonymi i-węzłami. (Ale to tylko domysły oparte na bardzo małej szczegółowej wiedzy; ledwo używałem ext4). Idź z abc/def/
podkatalogami.
ZipOutputStream
, pokonałby prawie każdy wolny rodzimy system plików Linux - wątpię, czy chcesz zapłacić za GPFS IBM. Pętla przetwarzająca zestaw wyników JDBC i sprawiająca, że strumień zip to prawdopodobnie zaledwie 6-8 linii kodu Java.
dir_index
, które często jest domyślnie włączone, przyspieszy wyszukiwanie, ale może ograniczyć liczbę plików w katalogu.