|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
Добрый день Товарищи! Помогите пожалуйста советом. В систему загружаются картинки, и для разных целей требуются разные варианты размеров картинок. Помогите советом с описанием этого в БД. Ниже мой вариант, к нему прошу ваше мнение и замечания. Картинки, для удобного отображения в ФС, хранятся в БД таким образом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
И по sha512 хешу файла ( a8be.......cf ) в ФС они однозначно располагаются таким образом: /imgFolder/a8/be/a8be.....cf.png И организация значит такая, что если imgID IS NULL , то это оригинал картинки загруженной. А для вариаций этой картинки, соответственно imgID - это id в этой же таблицы оригинала, затем соотв-но imgX и imgY - это размеры "производной" и sha512 тоже его. Стоит ли так хранить информацию или лучше разбить на 2 таблицы, в одной "оригиналы", в другой "производные"? И можно и надо ли делать такой внешний ключ в таблице на саму себя FK(imgID) => img_info(id) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 13:54 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
1. Производные лучше вообще не хранить, а генерировать на лету. 2. К хэшу надо добавлять id, иначе первая же коллизия разрушит твою цивилизацию. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 14:35 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov1. Производные лучше вообще не хранить, а генерировать на лету. 2. К хэшу надо добавлять id, иначе первая же коллизия разрушит твою цивилизацию. Дмитрий, ну по поводу генерации, это ж не напасёшься серверов генерировать изменение на лету. Другой путь, вроде как например не хранить в БД информацию о производной, а в ФС с доп. в имени по размеру, типа: /imgFolder/a8/be/a8be.....cf_100x50.png и уже по file_exists его генерировать единожды. По поводу коллизий... Блин конкретно в данном случае: Это картинки, валидность которых проверяется при загрузке, до оформления в БД. В том числе по лимитам на W*H , не верю я что в ситуации с максимум сотней миллионов разных изображений, будет коллизия по sha512 . Про хранение производных в БД, видимо принимаю. Сделаю их реализацию в ФС с параметром в имени файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 15:06 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
kormotпо поводу генерации, это ж не напасёшься серверов генерировать изменение на лету. Брось, для уменьшения картинки не нужен Ланкзос, а бикубик или даже ближайший сосед способны обрабатывать сотни и тысячи картинок в секунду даже на моём ноутбуке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 15:13 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
Дмитрий, а какой непосредственный профит от генерации на лету? Ведь если картинки генерировать по условию: 1. Нужна картинка (sha512 хеш) такого размера по X. 2. Проверка есть ли файл sha512_X.png 3. Если нет, то сгенерировать, если да то выдать существующую то это меньше в любом случае затрат, то же самое кеширование. Если например юзерпики выводить каждому клиентам, а генерировать их из большой картинки постоянно, то при каждом запросе странички - генерируются картинки, это всё равно неверно? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 15:27 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
kormotто это меньше в любом случае затрат, то же самое кеширование. А тебя не смущает, что ресайз картинки делается быстрее, чем вычисление её хэша?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 16:23 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПроизводные лучше вообще не хранить, а генерировать на лету.Не согласен. Если требуется быстрая и дешевая отдача картинки, то выгоднее иметь их готовые, а ресайзить их на стороне или в часы наименьшей нагрузки. Dimitry SibiryakovК хэшу надо добавлять id, иначе первая же коллизия разрушит твою цивилизацию.Согласен. Тем более, что со временем может понадобится изменить алгоритм обработки картинок (другой размер, другой алгоритм ресайза, обрезка пустых полей и т.п.), тогда хэш изменится. Dimitry SibiryakovА тебя не смущает, что ресайз картинки делается быстрее, чем вычисление её хэша?..Во-первых, не факт. Во-вторых, если хранить предрасчитанные картинки, то не понадобится ни того, ни другого. Dimitry Sibiryakovдля уменьшения картинки не нужен Ланкзос, а бикубик или даже ближайший соседЗависит от картинок. Для некоторых простые алгоритмы не годятся, т.к. слишком высок уровень артефактов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 17:16 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
miksoftНе согласен.Если требуется быстрая и дешевая отдача картинки, то выгоднее иметь их готовые, а ресайзить их на стороне или в часы наименьшей нагрузки. Ну так-то да. Вот только "быстрая и дешёвая отдача" как-то не очень стыкуются с использованием БД. Всё же запрос туда это сама по себе небыстрая и недешёвая операция. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 17:42 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
Так тут-же в БД не картинка хранится, а условно только путь к ней. Получается список пользователей и JOIN'ом sha512 картинки юзерпика для каждого условно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 19:14 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
kormot, Без понимания принципов выборки и использования этих картинок сложно сказать какой вариант лучше. Может быть вам просто инкремент подойдет и хранить тогда картинки под именем айдишника без всяких хешей. То есть хеш от файла я бы использовал только если надо отслеживать идентичность/уникальность загружаемых файлов. В противном случае можно внутри кухню построить на int, а уже отдавать пользователю можно с рандомным именем. Что касается ресайзов картинок, то я бы задавался вопросами а какая информация мне нужна (в дальнейшем может понадобиться) дополнительно к ресайзам. Например, если я не сразу делаю ресайз, а по мере появления ресурсов, то возможно мне надо хранить время создания для каждого варианта и тп. То есть возможно надо посмотреть на залитые картинки и на их производные как на разные сущности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 08:33 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
kormotТак тут-же в БД не картинка хранится, а условно только путь к ней. Вы, наверное, не в курсе, что в БД можно и саму картинку хранить? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 21:07 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
Cat2Вы, наверное, не в курсе, что в БД можно и саму картинку хранить? Вполне себе в курсе. Не настолько уж я нуб как вам показалось :) Просто файлы как по мне лучше хранить в ФС, она для этого и предназначена. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 23:12 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
kormotCat2Вы, наверное, не в курсе, что в БД можно и саму картинку хранить? Вполне себе в курсе. Не настолько уж я нуб как вам показалось :) Просто файлы как по мне лучше хранить в ФС, она для этого и предназначена.Ни да ни нет. У Сиквела есть FILESTREAM для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 23:22 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
Ну так, у меня всё на простом мускуле строится. А там это просто BLOB. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 23:25 |
|
Как лучше организовать хранение картинок и их производных?
|
|||
---|---|---|---|
#18+
kormotCat2Вы, наверное, не в курсе, что в БД можно и саму картинку хранить? Вполне себе в курсе. Не настолько уж я нуб как вам показалось :) Просто файлы как по мне лучше хранить в ФС, она для этого и предназначена. Файлы, а не картинки. Картинки же ужать можно! Современные фотоаппараты могут создать файл весом в мегабайты при размере по горизонтали 4000 и больше. Возможно это нужно в дизайнерской фирме, которая создает банеры-растяжки 10 на 5 метров. Если картинка предназначена для показа на экране монитора, то размер можно смело ограничивать при загрузке изображения в базу. Так же можно снизить качество при сжатии в JPG. По моему опыту, сжатие любых фотографий до 400-500 КБайт, при размере по наибольшей стороне около 1200, совсем не сказывается на качестве изображения на мониторе. 400 килобайт - это вполне себе быстрое получение одного изображения Так же можно сразу записывать в базу иконки для предпросмотра. Пусть будет два поля, ничего страшного. Я для себя утилитку написал. Можно поиграться с параметрами и посмотреть, что получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2018, 21:04 |
|
|
start [/forum/topic.php?fid=32&fpage=6&tid=1539972]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 248ms |
total: | 404ms |
0 / 0 |