По сути, ваш второй подход - это индекс - просто вы строите свой индекс в самой файловой системе. В этом нет ничего плохого, и если вы упорядочите все так, чтобы в одном каталоге не было слишком много файлов, это будет достаточно быстро.
Вы можете достичь цели "не помещать слишком много файлов в один каталог", используя несколько уровней каталогов - например, запись с ключом FOOBAR может храниться в data/F/FO/FOOBAR
, а не просто data/FOOBAR
.
В качестве альтернативы, вы также можете заставить работать один-большой файл, создав индексный файл, который содержит (отсортированный) список пар смещения ключа. Когда подход каталогов как индекс падает вниз, это когда вы хотите искать по ключу, отличному от того, который вы использовали для создания имен файлов - если вы использовали индексный файл, то вы можете просто создать второй индекс для этой ситуации.
Возможно, вы захотите пересмотреть ограничение «мы не можем использовать базу данных», поскольку вы все равно фактически просто создаете свою собственную базу данных.