Мой опыт в этом может быть датирован (NTFS), но вы должны проверить, насколько быстро вы можете открыть файл в каталоге из 30 000 файлов. Я думаю, вы можете обнаружить, что лучше распределять файлы по большему количеству каталогов.
Если вы контролируете структуру каталогов, рассмотрите возможность хэширования имен файлов с номерами от 0 до 660000. Затем вы можете использовать файловую систему в качестве индекса:
00/
00/
<99 files that hash here>
..
65
Вам все еще нужно написать простой «индексатор», который читает каждый файл, вычисляет его хэш и сохраняет его в правильном месте. Затем вы ищите файл как:
Lookup(string filename)
{
int hash = filename.GetHashCode() % 660000;
string directory = HashToDirectory(hash);
string path = Path.Combine(directory, filename);
...
В этом подходе хорошо то, что вы можете профилировать различные «плотности» для количества файлов в каталоге. Вы просто меняете функцию HashToPath
. Вам также не нужна база данных.
Мы использовали аналогичный подход с веб-сканером, который хранил много файлов. Это было против NTFS, так что YMMV.