Jeśli w jednym katalogu znajduje się 1 000 000 pojedynczych plików (w większości o rozmiarze 100 000), bez żadnych innych katalogów i plików, czy istnieją jakieś kompromisy pod względem wydajności lub niedogodności w jakikolwiek inny możliwy sposób?Co stanie się, jeśli w jednym katalogu w Linuxie znajduje się zbyt wiele plików?
Odpowiedz
ARG_MAX ma zamiar zająć to ... na przykład, rm -rf * (podczas gdy w katalogu) powie "zbyt wiele argumentów". Narzędzia, które chcą wykonać jakiś rodzaj globowania (lub powłoki), będą miały pewne problemy z działaniem.
Jeśli ten katalog jest dostępny publicznie (powiedzmy przez ftp lub serwer WWW), mogą wystąpić dodatkowe problemy.
Wpływ na dowolny system plików zależy wyłącznie od tego systemu plików. Jak często są one dostępne, czym jest system plików? Pamiętaj, że Linux (domyślnie) preferuje utrzymywanie ostatnio otwieranych plików w pamięci podczas wprowadzania procesów do wymiany, w zależności od twoich ustawień. Czy ten katalog jest obsługiwany przez http? Czy Google go zobaczy i zaindeksuje? Jeśli tak, być może trzeba dostosować ciśnienie cache VFS i swappiness.
Edit:
ARG_MAX to system szeroki limit ile argumenty mogą być przedstawione do punktu wejścia danego programu. Zatem weźmy "rm", a przykład "rm -rf *" - powłoka zmieni "*" w listę plików rozdzielaną spacjami, która z kolei stanie się argumentem "rm".
To samo stanie się z ls i kilkoma innymi narzędziami. Na przykład ls foo * może się zepsuć, jeśli zbyt wiele plików zaczyna się od "foo".
Doradzam (bez względu na to, co jest w użyciu), aby podzielić go na mniejsze fragmenty katalogów, tylko z tego powodu.
Kiedy przypadkowo wykonasz "ls" w tym katalogu, albo użyjesz tabulatora, lub chcesz wykonać "rm *", będziesz miał poważne kłopoty. Ponadto mogą występować problemy z wydajnością w zależności od systemu plików.
Uważa się za dobrą praktykę pogrupowanie plików w katalogi o nazwach pierwszych 2 lub 3 znaków nazw plików, np.
aaa/ aaavnj78t93ufjw4390 aaavoj78trewrwrwrwenjk983 aaaz84390842092njk423 ... abc/ abckhr89032423 abcnjjkth29085242nw ... ...
Większość dystrybucje używać Ext3 domyślnie, które mogą korzystać z b-tree indeksowanie dla dużych katalogów. Niektóre z dystrybucji mają domyślnie włączoną tę funkcję dir_index
w innych, które musisz włączyć samodzielnie. Jeśli ją włączysz, nie będzie spowolnienia nawet dla milionów plików.
Aby sprawdzić, czy dir_index
cecha Czy Do aktywacji (jako root):
tune2fs -l /dev/sdaX | grep features
Aby aktywować dir_index funkcję (jako root):
tune2fs -O dir_index /dev/sdaX
e2fsck -D /dev/sdaX
Wymień /dev/sdaX
z partycji, dla którego chcesz aktywować to.
Nie * jest * karą, różnica między karą wykładniczą, liniową lub logarytmiczną – dsm
Wykonuj swoje liczby. Masz 1 milion plików. Dzięki indeksowi przejście do pliku po nazwie zajmuje N sekund. Teraz podzielisz go na 1000 katalogów po 1000 plików każdy. Przejście do katalogu zajmuje N/2 sekundy, kolejne N/2 do dostępu do pliku. Łącznie N sekund nie licząc narzutu do przełączania katalogów. – vartec
Oczywistą odpowiedzią jest to, że folder będzie niezwykle trudny do wykorzystania przez ludzi na długo przed jakimkolwiek ograniczeniem technicznym, (czas potrzebny na odczytanie wyniku z ls dla jednego, ich są dziesiątki innych powodów). Czy istnieje dobry powód, dla którego nie można podzielić na podfoldery?
Moje doświadczenie z dużych katalogów na ext3 i dir_index
włączona:
- Jeśli znasz nazwę pliku, który chcesz uzyskać dostęp, nie ma prawie kara
- nie Jeżeli chcesz zrobić operacje, które potrzebę do odczytu w całym wpisie do katalogu (jak prosty
ls
w tym katalogu) zajmie to kilka minut po raz pierwszy. Następnie katalog pozostanie w pamięci podręcznej jądra i nie będzie już żadnych kar. - Jeśli liczba plików jest zbyt wysoka, pojawiają się problemy z ARG_MAX i innymi. Oznacza to, że dzikie karty (
*
) nie zawsze działają zgodnie z oczekiwaniami. To jest tylko, jeśli naprawdę chcesz, aby wykonać operację na wszystkich plikach na raz
Bez dir_index
jednak jesteś naprawdę wkręca :-D
Nie każdy system plików obsługuje że wiele plików.
W przypadku niektórych z nich (ext2, ext3, ext4) bardzo łatwo jest przekroczyć limit i-węzła.
- 1. Jak mogę się dowiedzieć, ile plików znajduje się w katalogu?
- 2. Wiele repozytoriów w jednym katalogu
- 3. Co jest lepsze dla wydajności - wiele plików w jednym katalogu lub wiele podkatalogów z jednym plikiem?
- 4. Co się stanie, jeśli zapomnę zamknąć zestaw?
- 5. Co się stanie, jeśli konstruktor zgłasza wyjątek?
- 6. Co się stanie, jeśli tag <script> używa tego samego atrybutu "src" wiele razy w jednym dokumencie HTML?
- 7. Co się stanie, jeśli zmieni się obiekt __hash__?
- 8. Co się stanie, jeśli program sterownika się zawiesi?
- 9. Co się stanie, jeśli konstruktor shared_ptr zakończy się niepowodzeniem?
- 10. Jeśli używam dokumentu w formacie HTML 5, co się stanie?
- 11. Co stanie się, jeśli nie zamkniesz uchwytu pliku w Perlu?
- 12. Co się stanie, jeśli chcę zapisać wartość None w memcache?
- 13. Co się stanie, jeśli zaimplementuję klasę w pliku nagłówkowym?
- 14. Co się stanie, jeśli nie użyjesz "tego" w klasie?
- 15. Co się stanie, jeśli nigdy nie wywołasz polecenia `close` w otwartym strumieniu plików?
- 16. Co stanie się z Braintree.js, jeśli JavaScript jest wyłączony?
- 17. Co rozszerza się do wszystkich plików w bieżącym katalogu rekursywnie?
- 18. Co się stanie, jeśli funkcje rekursywne będą wstawiane jako wbudowane?
- 19. Wiele plików package.json w jednym pakiecie
- 20. Co się stanie, jeśli przypisujesz wartość do $ _REQUEST?
- 21. Wiele plików .nuspec w katalogu projektu?
- 22. Co się stanie, jeśli segment uzgadniania połączenia TCP zostanie utracony?
- 23. Co się stanie, jeśli klasa nie ma udokumentowanego wyznaczonego inicjatora?
- 24. Co się stanie, jeśli spróbujesz przekierować przed przesłaniem formularza?
- 25. Co się stanie, jeśli usuniesz spację między operatorami + i ++?
- 26. co się stanie, jeśli użyjesz belongs_to bez odpowiedniego has_one?
- 27. Co się stanie, jeśli obiekt zmieni rozmiar własnego kontenera?
- 28. Co się stanie, jeśli użyję "rzutu"; bez wyjątku do rzutu?
- 29. Co się stanie, jeśli niepoprawny adres zostanie uprzednio pobrany?
- 30. Co się stanie, jeśli zadzwonię wait na zmienną warunku powiadomienia
Wielkie dzięki, Sir :) Ten wpis bardzo mi pomógł! –