[mysql+php] где хранить картинки?
От: sushko Россия  
Дата: 26.03.19 06:37
Оценка:
У меня есть десктопный проект (win32/C++/MFC), в котором информация может снабжаться картинками; картинки при этом хранятся в базе данных в BLOB-полях. БД без картинок занимает примерно 3-15 мегабайт, с картинками — сотню-полторы мегабайт; баз данных крупнее 700MB я у пользователей не видел. Я не замечал, чтобы наличие картинок в БД как-то замедляло работу программы.

Сейчас хочу вынести часть этого проекта в веб: php+mysql. Скажите, где правильно будет хранить картинки, в базе данных или в отдельной папке на сервере?
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re: [mysql+php] где хранить картинки?
От: Anton Batenev Россия https://github.com/abbat
Дата: 26.03.19 07:51
Оценка: +2
Здравствуйте, sushko, Вы писали:

s> Сейчас хочу вынести часть этого проекта в веб: php+mysql. Скажите, где правильно будет хранить картинки, в базе данных или в отдельной папке на сервере?


В отдельной директории.
Re[2]: [mysql+php] где хранить картинки?
От: VikDD  
Дата: 26.03.19 14:39
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>В отдельной директории.


Директориях

./images
 |- /1
   |- /2
     |- 12.jpg
 |- /3
   |- /4
     |- 34.jpg


что бы потом не напороться на лимиты файловых дескрипторов ФС
С уважением, VikDD
Re[3]: [mysql+php] где хранить картинки?
От: sushko Россия  
Дата: 26.03.19 16:07
Оценка:
Здравствуйте, VikDD, Вы писали:

VDD>что бы потом не напороться на лимиты файловых дескрипторов ФС


А подробнее об этом можно? Гугля расшифровывает только "лимиты ОТКРЫТЫХ файловых дескрипторов", т.е. к-во одновременно открытых файлов. С раскладыванию файлов по папкам эта проблема, очевидно, не относится...
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[4]: [mysql+php] где хранить картинки?
От: Anton Batenev Россия https://github.com/abbat
Дата: 26.03.19 18:02
Оценка:
Здравствуйте, sushko, Вы писали:

s> VDD>что бы потом не напороться на лимиты файловых дескрипторов ФС

s> А подробнее об этом можно? Гугля расшифровывает только "лимиты ОТКРЫТЫХ файловых дескрипторов", т.е. к-во одновременно открытых файлов. С раскладыванию файлов по папкам эта проблема, очевидно, не относится...

Количество inode на файловой системе.

$ df -i
Файловая система    Iнодов IИспользовано IСвободно IИспользовано% Cмонтировано в
/dev/md1         915546112      61340827 854205285             7% /


Но выше написано немного про другое. Сложность поиска файла в директории EXT4 составляет O(log n). Следовательно, чем больше файлов в директории, тем больше времени будет тратиться на поиск. Оптимально будет раскидать большое число файлов на 1-2 уровня вложенных директорий. Например, md5 хэш файла имеет значение:

72bfb007fadf8b09231e26423a4472b8

тогда этот файл кладется по пути:

/8/2b/72bfb007fadf8b09231e26423a4472b8

(md5 тут не принципиально — исключительно для демонстрации принципа).
Бэкапимся на Яндекс.Диск
Re[3]: [mysql+php] где хранить картинки?
От: Anton Batenev Россия https://github.com/abbat
Дата: 26.03.19 18:02
Оценка:
Здравствуйте, VikDD, Вы писали:

VDD> что бы потом не напороться на лимиты файловых дескрипторов ФС


Там речь шла про пару сотен MB. Если же говорить про большой объем/число файлов, то тогда в распределенной ФС.
Бэкапимся на Яндекс.Диск
Re[5]: [mysql+php] где хранить картинки?
От: Слава  
Дата: 26.03.19 20:10
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Количество inode на файловой системе.


А не расскажет ли уважаемый all, почему внутри Amazon S3 для хранения данных используется именно BDB и MySQL, а не просто "файлы-на-файловой-системе", столь любимые нашими одминами? Говорят, что Tumblr (сайт такой, с картинками) хранил свои картинки именно в многопетабайтном S3 bucket.
Re[6]: [mysql+php] где хранить картинки?
От: Ops Россия  
Дата: 27.03.19 03:50
Оценка:
Здравствуйте, Слава, Вы писали:

С>А не расскажет ли уважаемый all, почему внутри Amazon S3 для хранения данных используется именно BDB и MySQL, а не просто "файлы-на-файловой-системе", столь любимые нашими одминами? Говорят, что Tumblr (сайт такой, с картинками) хранил свои картинки именно в многопетабайтном S3 bucket.


Потому что это хранилище, а не веб-сервер. Какой-нибудь nginx будет гораздо лучше отдавать файлы из FS, чем запрашивать их каждый раз у бекенда, который в свою очередь полезет за ними в базу.
А у всяких Tumblr, наверняка, есть свои системы отдачи контента, или же банальный кэш в памяти, или в той же FS перед веб-сервером. Но нужны ли эти слои ТС?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Отредактировано 27.03.2019 3:57 ути-пути . Предыдущая версия .
Re[4]: [mysql+php] где хранить картинки?
От: Ops Россия  
Дата: 27.03.19 03:55
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Там речь шла про пару сотен MB. Если же говорить про большой объем/число файлов, то тогда в распределенной ФС.


Пара сотен МБ файлов, если у них размеры в единицы КБ — это дофига для одной директории, так что идея раскидать по разным очень здравая.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: [mysql+php] где хранить картинки?
От: bnk СССР http://unmanagedvisio.com/
Дата: 27.03.19 17:44
Оценка:
Здравствуйте, sushko, Вы писали:

S>У меня есть десктопный проект (win32/C++/MFC), в котором информация может снабжаться картинками; картинки при этом хранятся в базе данных в BLOB-полях. БД без картинок занимает примерно 3-15 мегабайт, с картинками — сотню-полторы мегабайт; баз данных крупнее 700MB я у пользователей не видел. Я не замечал, чтобы наличие картинок в БД как-то замедляло работу программы.


S>Сейчас хочу вынести часть этого проекта в веб: php+mysql. Скажите, где правильно будет хранить картинки, в базе данных или в отдельной папке на сервере?


У базы есть определенные приемущества:

— транзакционность, совместный доступ из коробки.
— бэкапы
— удобный деплоймент
— минимальные изменения относительно текущей системы

По поводу производительности Microsoft исследование проводила как-то (гуглится), про свой SQL Server и NTFS, которое показало, что при размере файла менее 256кб выигрывает база, а при размере больше 1мб — файловая система.
Re: [mysql+php] где хранить картинки?
От: Qulac Россия  
Дата: 27.03.19 17:50
Оценка:
Здравствуйте, sushko, Вы писали:

S>У меня есть десктопный проект (win32/C++/MFC), в котором информация может снабжаться картинками; картинки при этом хранятся в базе данных в BLOB-полях. БД без картинок занимает примерно 3-15 мегабайт, с картинками — сотню-полторы мегабайт; баз данных крупнее 700MB я у пользователей не видел. Я не замечал, чтобы наличие картинок в БД как-то замедляло работу программы.


S>Сейчас хочу вынести часть этого проекта в веб: php+mysql. Скажите, где правильно будет хранить картинки, в базе данных или в отдельной папке на сервере?


Для картинок если данные редко удаляются (при удалении удаляются только запись в бд), то хорошо использовать индексный файл. Яндекс так делает.
Программа – это мысли спрессованные в код
Re[5]: [mysql+php] где хранить картинки?
От: sushko Россия  
Дата: 29.03.19 07:46
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>чем больше файлов в директории, тем больше времени будет тратиться на поиск. Оптимально будет раскидать большое число файлов на 1-2 уровня вложенных директорий.


А что такое "большое количество файлов"? Какое количество файлов в директории можно считать приемлемым? Ну, скажем, 3-5 тысяч файлов — это приемлемо?

P.S. Настройки ОС, Апача и т.п., разумеется, заранее неизвестны. Делаем серийный продукт.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[6]: [mysql+php] где хранить картинки?
От: Anton Batenev Россия https://github.com/abbat
Дата: 29.03.19 10:25
Оценка:
Здравствуйте, sushko, Вы писали:

s> AB>чем больше файлов в директории, тем больше времени будет тратиться на поиск. Оптимально будет раскидать большое число файлов на 1-2 уровня вложенных директорий.

s> А что такое "большое количество файлов"? Какое количество файлов в директории можно считать приемлемым? Ну, скажем, 3-5 тысяч файлов — это приемлемо?

Если меня не подводит память, то readdir под капотом дергает getdents с буфером в 32768. Т.е. верхняя граница, после которой в общем случае начнется "пенальти", должна быть где-то около этой цифры.
Re[7]: [mysql+php] где хранить картинки?
От: sushko Россия  
Дата: 30.03.19 13:11
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Если меня не подводит память, то readdir под капотом дергает getdents с буфером в 32768. Т.е. верхняя граница, после которой в общем случае начнется "пенальти", должна быть где-то около этой цифры.


Спасибо
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.