У меня есть сайт PHP, который создает и хранит файлы шаблонов HTML на сервере на основе пользовательского ввода. Один пользователь может создавать множество шаблонов. Так, чтобы хранить файлы шаблонов и связывать их с записью БД, то, что я делаю,
«шаблоны» – это таблица, в которой содержатся другие сведения о шаблоне, например, кто их создал и т. д. с уникальным идентификатором auto-increment id как template_id
например, если идентификатор шаблона равен 1001, я конвертирую его в шестнадцатеричный, который является 03e9. Теперь я разделяю шестнадцатеричное число на 03 и e9 (после двух чисел) становится папкой, а e9 становится файлом с некоторым расширением как «e9.tpl»,
Вот как я могу найти шаблон из файловой системы, если мне известен идентификатор шаблона. Мне не нужно отдельно хранить путь к файлу.
это хороший подход? любые недостатки такого подхода? есть ли другой подход лучше этого?
Каковы преимущества / недостатки хранения пути к файлу в самой базе данных? например, чтобы разрешить использование разных дисков, обслуживающих шаблоны и т. д.?
Вы делаете это, потому что вы обеспокоены тем, что в каталоге могут отсутствовать записи файла / inodes? В ext3 практический предел составляет около 100 000 файлов (и 32 000 dirs).
Создание структуры каталогов «на лету» лучше выполняется с использованием modulu, как в $dir = $id % 1000
а затем помещает новый шаблон в этот $dir/$id.tpl
( $dir/$id.tpl
). Эта стратегия создаст максимум 1000 копий, и вы позволили бы обрабатывать около 100.000.000 файлов.
Я не вижу причин для возиться с шестнадцатеричными значениями или подстроками.
Если идентификатор в таблице DB уже UNIQUE, зачем вообще преобразовывать идентификатор для файловой системы? Просто добавьте файл 1001.tpl, и вы все настроены. Если вы хотите, чтобы файлы шаблонов отсортировались по папкам, используйте идентификатор пользователя (который, как я полагаю, тоже UNIQUE), вы получите папку 124 / 1001.tpl.
В зависимости от процесса развертывания вы захотите сохранить созданные файлы вне папки приложения, чтобы случайно не удалять их при обновлении приложения.
Если вам нужно попасть в базу данных, чтобы получить идентификатор, вы можете просто сохранить шаблон в нем. Но нет ничего категорически неправильного в их хранении в файловой системе. Я вообще хотел бы.
Когда вы нажмете 65536, вы получите 0x10000. Убедитесь, что ваш код может справиться с этим. Я был бы более склонным хранить 0x1234 как: 1 / 1234.tpl, просто для ясности. Обратите внимание, что в силу последовательных идентификаторов ваши папки будут заполняться последовательно.
Я бы, вероятно, даже не конвертировал их в шестнадцатеричный. Вы можете использовать оператор модуля, чтобы определить, в какую папку их помещать. Объясните, сколько файлов вы, вероятно, используете, и используйте это, чтобы определить, сколько папок вам нужно.
Например:
$path = ($id % NUMBER_OF_FOLDERS) . "/$id.tpl"
где $id
– идентификатор шаблона в десятичном формате.
Я не понимаю смысла разделять гексагон на две части для создания разных папок … Это может создать сотни и сотни разных папок, которые станут полным беспорядком на вашем сервере. Почему бы просто не хранить на шаблонах в одной папке с шестнадцатеричным значением в качестве имени файла, например, 03e9.tpl
?