Я храню некоторые файлы высокого разрешения на обслуживании (100K + если это имеет значение), и я организую их в разных галереях. Когда кто-то получает доступ к галерее, я показываю только миниатюры и низкую версию изображений, которые в некоторых случаях обозначаются водяным знаком, а в другом случае - нет. Теперь из-за того, что я говорю о огромном количестве фотографий, версия с низким разрешением, отображаемая на странице галереи, удаляется с сервера через X дней. Если кто-то действительно имеет доступ к галерее, а версия lowres этого файла не существует на сервере, она генерируется «на лету», однако, когда я создаю lowres, мне может понадобиться сделать это с водяным знаком или нет.PHP-имя strpos имя файла или запрос MySQL
В настоящее время сценарий, который отображает изображения не делает любой SQL называть все это основано на файловой системе (если файл существует, и т.д.) и решение водяного знака изображения или не основано на:
if (strpos($file_name,"FREE")===false){ //add watermark }else{ //just resize}
Моя логика говорит, что это более результативно, чем выполнение SQL-запроса с именем файла или файлом и проверка того, должен ли он быть не водяным знаком. Однако я нахожу это немного неудобством, чтобы иметь имена файлов, содержащие слово FREE.
Какая разница в производительности, которую я могу ожидать, если я использую SQL-запрос вместо strpos?
EDIT/UPDATE
Резюмируя итоги ответы и комментарии:
Система разрабатывается, чтобы работать в течение нескольких лет, со всеми галереями, которые добавляют более чтобы быть еще доступным. Это означает, что требования к хранению просто ОГРОМНЫ, а изображение с высоким разрешением для старых альбомов будет перемещено за пределы места на медленном и дешевом выделенном хранилище, поэтому предложение сохранить дополнительные накладные расходы со всех миниатюр - это серьезный вариант. В прошлом году мне нужно было хранить более 3 ТБ изображений (это только высочайший размер).
Я нахожусь на Lighttpd, и я намерен использовать
rewrite-if-not-file
, чтобы получить наилучшую производительность для существующих эскизов.Я знаю о штрафе за запись ввода-вывода, и я намерен сохранить его до минимума, написание только при необходимости, предпочтительно чтение. Однако комментарий от @ N.B. действительно заставил меня задуматься о сохранении изображений lowres на SSD, поэтому даже когда мне нужно создавать и записывать их на диск, производительность намного выше, чем у обычного жесткого диска.
Будет действительно сложно сделать какой-либо тест (@Steve E.) Я отстаю от графика, и система должна выйти вживую к концу этого месяца. (Сегодня я получил бомбу, что они затягивают штепсель старой системы). Да, гибкость - главная причина, по которой я соблазн пойти с SQL, но я ожидаю, что база данных SQL будет значительно расти, помимо информации о файле, есть масса другой информации, которую мне нужно также хранить, пометки, покупки , загрузки и т. д., поэтому я также пытаюсь убедиться, что я не слишком сильно надаю на SQL, когда я действительно могу использовать некоторые из них с хорошей структурой и доступом к файловой системе.
Где находится тег 'FREE' в имени файла? Если вы действительно хотите избежать SQL-запросов, вы все равно можете использовать memcached или другие хранилища KV для кэширования или поместить тег в определенную позицию в имени файла или пути. – Pred
Ваше наказание за исполнение происходит от записи на диск, а не от имени файла. Будь вы используете MySQL, файловую систему или что-то еще, ваш скрипт будет медленным, как только он начнет записывать на диск. Поэтому, независимо от программного обеспечения, которое вы можете использовать, вашим фактором сдерживания будет возможность ввода-вывода диска, который выполняет эту работу. Это еще одна проблема XY, вы просите совета между двумя подходами, которые, на ваш взгляд, дают решение, но настоящая проблема полностью в другом месте. –