Независимо от того, как вы это делаете (хеширование, кодирование, поиск в базе данных), я рекомендую вам не пытаться сопоставить огромное количество URL-адресов с файлами в большом плоском каталоге.
Причина в том, что поиск файлов для большинства файловых систем включает линейное сканирование по именам файлов в каталоге. Таким образом, если все N ваших файлов находятся в одном каталоге, поиск потребует в среднем 1/2 N сравнений; т.е. O(N)
(Обратите внимание, что ReiserFS организует имена в каталоге как BTree. Однако ReiserFS представляется скорее исключением, чем правилом.)
Вместо одного большого плоского каталога было бы лучше сопоставить URI с деревом каталогов. В зависимости от формы дерева, поиск может составлять O(logN)
. Например, если вы организовали дерево так, чтобы в нем было 3 уровня каталогов, содержащих не более 100 записей в каждом каталоге, вы могли бы разместить 1 миллион URL-адресов. Если вы спроектировали отображение для использования двухсимвольных имен файлов, каждый каталог должен легко помещаться в один блок диска, а поиск пути (при условии, что требуемые каталоги уже кэшированы) должен занять несколько микросекунд.