Основная суть того, что я пытаюсь сделать, - это настроить сервер обработки изображений.Так как код страницы создается в Coldfusion, может потребоваться изменить размер нескольких изображений на странице и нарастить их на соответствующие размеры, каждое из которых может иметь разный размер, а каждое - с другим алгоритмом.
Основная суть того, как оноработает с использованием простого тега img, атрибут src будет указывать на сервер изображений в соответствии со следующими строками:
<img src="http://imageserver.com/<clientname>/<primarykey>.jpg">
Это позволяет изменять размер изображения асинхронно, и надругой сервер, таким образом, не замедляя текущий вызов страницы.
Когда сервер обработки изображений получает вызов, он сначала проверит, существует ли этот файл, если Apache определит, существует ли файл, он сразу же его обслуживает, иначевызывает Coldfusion, который читает запись из базы данных, используя переданный ей первичный ключ, чтобы получить URL-адрес обрабатываемого изображения и любые связанные параметры (в этом случае ширина, высота, метод, URL-адрес, клиент, но, возможно, больше вбудущее).
В настоящее время я делаю это с использованием хэш-системы, где параметры упорядочены в алфавитном порядке, а затем хэшируются.Является ли это разумной системой, или в конечном итоге возникнут коллизии хеширования, даже если хешируемые данные достаточно малы (от 50 до 200 символов).Каждый клиент может хранить до 10 000 изображений (в своей собственной папке, чтобы коллизия хешей не была проблемой для разных клиентов).
Для сокращения вызовов БД при обработке страницы каждый раз, когда требуется обработанное изображениеЯ добавляю информацию об этом изображении в массив.В конце страницы я делаю 2 обращения к БД, сначала она проверяет, существуют ли строки в моем массиве в БД, а затем, если необходимо, добавляет любые несуществующие строки (сохраняя их различные параметры).Дилемма здесь заключается в том, что первичный ключ (или то, что входит в тег изображения) должен быть известен до того, как будет фактически вставлен в БД, поэтому я не проверяю каждое изображение, так как некоторые страницы могут иметьсотни изображений на них, и это было бы очень неэффективно.
Разве коллизии хешей не имеют значения для этого размера выборки (10 тыс. изображений на клиента, сгенерированных 50-200 символьными строками)?А что если я сделал что-то простое, например <width>_<height>_<hash>.jpg
, или поместил изображения в папки, такие как /<client>/<width>x<height>/<hash>.jpg
, потому что это еще больше уменьшило бы вероятность коллизий хешей (хотя и не удалял их)?