Мы хотели бы хранить миллионы текстовых файлов в файловой системе Linux, чтобы иметь возможность архивировать и обслуживать произвольную коллекцию в качестве службы. Мы пробовали другие решения, такие как база данных ключ / значение, но наши требования к параллелизму и параллелизму делают использование собственной файловой системы лучшим выбором.
Самый простой способ - хранить все файлы в папке:
$ ls text_files/
1.txt
2.txt
3.txt
это должно быть возможно в файловой системе EXT4 , у которой нет ограничений на количество файлов в папке.
Два процесса FS будут:
- Записать текстовый файл из веб-скрипта (не должно зависеть от количества файлов в папке).
- Zip выбранные файлы, заданные списком имен файлов.
Мой вопрос заключается в том, повлияет ли хранение до десяти миллионов файлов в папке на производительность вышеупомянутых операций или общую производительность системы, чем создание дерева подпапок для файлов, в которых они будут жить?
ls -l
или что-то еще, что stat
каждый инод в каталоге (например, bash
завершение глобализации / табуляции) будет искусственно быстрее чем после некоторого износа (удалите несколько файлов, напишите несколько новых). ext4 мог бы справиться с этим лучше, чем XFS, потому что XFS динамически распределяет пространство для инодов и данных, так что я думаю, что вы можете получить иноды более разбросанными. (Но это чистое предположение, основанное на очень небольших подробных знаниях; я едва использовал ext4). Перейти с abc/def/
subdirs.
ZipOutputStream
, обгонит практически любую свободную собственную файловую систему Linux - я сомневаюсь, что вы хотите платить за GPFS от IBM. Цикл для обработки результирующего набора JDBC и создания этого zip-потока, вероятно, состоит всего из 6-8 строк кода Java.
dir_index
, которое по умолчанию часто включено, ускорит поиск, но может ограничить количество файлов в каталоге.