Właśnie dodałem funkcję wyszukiwania predykcyjnego (patrz przykład poniżej) do mojej witryny działającej na serwerze Ubuntu. Działa to bezpośrednio z bazy danych. Chcę buforować wynik dla każdego wyszukiwania i użyć go, jeśli istnieje, w przeciwnym razie utwórz go.
Czy byłby jakiś problem ze mną, zapisując potencjalne 10 milionów wyników w osobnych plikach w jednym katalogu? Czy wskazane jest podzielenie ich na foldery?
Przykład:
os.listdir
Pythona zostało z tego powodu stanowczo odrzucone.Odpowiedzi:
Tak. Prawdopodobnie jest więcej powodów, ale mogę je zrzucić z głowy:
tune2fs
ma opcję o nazwie,dir_index
która zwykle jest domyślnie włączona (w Ubuntu), która pozwala przechowywać około 100 000 plików w katalogu, zanim zobaczysz spadek wydajności. To nie jest nawet blisko 10-metrowych plików, o których myślisz.ext
systemy plików mają ustaloną maksymalną liczbę i-węzłów. Każdy plik i katalog używa 1 i-węzła. Użyjdf -i
do widoku swoich partycji i i-węzłów za darmo. Po wyczerpaniu i-węzłów nie można tworzyć nowych plików ani folderów.polecenia takie jak
rm
ils
podczas używania symboli wieloznacznych rozwiń polecenie i skończy się na „zbyt długiej liście argumentów”. Będziesz musiał użyćfind
do usunięcia lub listy plików. Ifind
zwykle jest powolny.Tak. Z całą pewnością. Zasadniczo nie można nawet przechowywać plików 10m w 1 katalogu.
Korzystałbym z bazy danych. Jeśli chcesz buforować go dla strony internetowej, spójrz na „ solr ” („zapewniające rozproszone indeksowanie, replikację i równoważenie obciążenia zapytania”).
źródło
Skończyło się z tym samym problemem. Uruchom moje własne testy porównawcze, aby dowiedzieć się, czy możesz umieścić wszystko w tym samym folderze w porównaniu z wieloma folderami. Wydaje się, że możesz i to szybciej!
Ref: https://medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
źródło
Wyszukiwanie binarne może z łatwością obsłużyć miliony rekordów, więc przeszukiwanie pojedynczego katalogu nie byłoby problemem. Zrobi to bardzo szybko.
Zasadniczo, jeśli używasz systemu 32-bitowego, wyszukiwanie binarne do rekordów 2 Gb jest łatwe i dobre.
Berekely DB, oprogramowanie typu open source, z łatwością pozwoli ci zapisać pełny wynik pod jednym wpisem i ma wbudowane wyszukiwanie.
źródło