Размещение многих (10 миллионов) файлов в одной папке

14

Я только что добавил функцию прогнозирующего поиска (см. пример ниже) на мой сайт, который запускается на сервере Ubuntu. Это выполняется непосредственно из базы данных. Я хочу кэшировать результат для каждого поиска и использовать его, если он существует, а затем создать его.

Будет ли у меня проблема с сохранением потенциальных результатов в размере 10 миллионов в отдельных файлах в одном каталоге? Или желательно разделить их на папки?

Пример:

    
задан Kohjah Breese 11.02.2015 в 18:04
источник

2 ответа

24
  

Будет ли у меня проблема с сохранением потенциала около 10 миллионов результатов в отдельных файлах в одном каталоге?

Да. Вероятно, есть больше причин, но я могу опубликовать их с головы:

  • tune2fs имеет параметр, называемый dir_index , который, как правило, включен по умолчанию (на Ubuntu это), который позволяет хранить примерно 100 тыс. файлов в каталоге, прежде чем вы увидите поражение в производительности. Это даже не близко к 10 м файлам, о которых вы думаете.

  • ext filesystems имеют фиксированное максимальное количество инодов. Каждый файл и каталог использует 1 inode. Используйте df -i для просмотра ваших разделов и inodes бесплатно. Когда вы заканчиваете inodes, вы не можете создавать новые файлы или папки.

  • команды, такие как rm и ls при использовании подстановочных знаков, расширяют эту команду и заканчиваются слишком длинным списком аргументов. Вам нужно будет использовать find для удаления или списка файлов. И find имеет тенденцию быть медленным.

  

Или желательно разделить их на папки?

Да. Вероятнее всего. В принципе вы даже не можете хранить 10m файлов в 1 каталоге.

Я бы использовал базу данных. Если вы хотите кэшировать его для веб-сайта, посмотрите « solr » («предоставление распределенной индексирования, репликации и балансировки нагрузки выполнение запроса ").

    
ответ дан Rinzwind 11.02.2015 в 20:32
источник
0

Двоичный поиск может легко обрабатывать миллионы записей, поэтому поиск в одном каталоге не будет проблемой. Он будет делать это очень быстро.

В принципе, если вы используете 32-битную систему, двоичный поиск до записей 2Gb прост и хорош.

Berekely DB, программное обеспечение с открытым исходным кодом, с готовностью позволит вам хранить полный результат в одной записи и будет иметь встроенный поиск.

    
ответ дан Ashok Chand Mathur 18.02.2015 в 02:57