Я только что добавил функцию интеллектуального поиска (см. Пример ниже) на свой сайт, который работает на сервере Ubuntu. Это работает прямо из базы данных. Я хочу кэшировать результат для каждого поиска и использовать его, если он существует, иначе создать его.
Могут ли быть какие-либо проблемы со мной, сохраняя потенциальные результаты cira 10 миллионов в отдельных файлах в одном каталоге? Или целесообразно разбить их на папки?
Пример:
os.listdir
по этой причине категорически был отклонен запрос на создание версии генератора на python.Ответы:
Да. Вероятно, есть и другие причины, но я могу написать о них с головы до головы:
tune2fs
имеет опцию с названием,dir_index
которая обычно включена по умолчанию (в Ubuntu это так), которая позволяет хранить примерно 100 тыс. файлов в каталоге, прежде чем вы увидите снижение производительности. Это даже не близко к 10м файлам, о которых вы думаете.ext
файловые системы имеют фиксированное максимальное число inode. Каждый файл и каталог использует 1 индекс. Используйтеdf -i
для просмотра ваших разделов и inode бесплатно. Когда у вас заканчиваются inode, вы не можете создавать новые файлы или папки.Такие команды, как
rm
иls
при использовании подстановочных знаков, расширяют команду и в итоге получат «список аргументов слишком длинный». Вам придется использовать,find
чтобы удалить или перечислить файлы. Иfind
имеет тенденцию быть медленным.Да. Вероятнее всего. В принципе, вы не можете даже хранить 10м файлов в 1 каталоге.
Я бы использовал базу данных. Если вы хотите кэшировать его для веб-сайта, взгляните на « solr » («обеспечение распределенного индексирования, репликации и запросов с балансировкой нагрузки»).
источник
Закончилось тем же вопросом. Запустите мои собственные тесты, чтобы узнать, можете ли вы поместить все в одну папку вместо нескольких папок. Похоже, вы можете, и это быстрее!
Ссылка: https://medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
источник
Бинарный поиск может легко обрабатывать миллионы записей, поэтому поиск по одному каталогу не будет проблемой. Это будет сделано очень быстро.
В основном, если вы используете 32-битную систему, бинарный поиск до 2Гб записей прост и хорош.
Berekely DB, программное обеспечение с открытым исходным кодом, с готовностью позволит вам сохранить полный результат под одной записью и будет иметь встроенный поиск.
источник