Как оптимально хранить медиаконтент для сайта в базе данных или в файловой системе?
Подскажите, как лучше хранить большие объёмы файлов в бд или в файловой системе?
Основные требования к решаемой задаче, быстрый поиск по файлам.
Как это делают социальные сети (instagram, fb, vk)?
Спасибо.
Вообще все индивидуально, и нужно смотреть под конкретную задачу.
Если в общем - файлы хранятся в файловой системе, в БД хранятся имена и пути к файлам.
Как это делают социальные сети (instagram, fb, vk)?
Все по своему делают, у крупных сетей поиск и хранение как правило разнесены по разным серверам - одни сервера занимаются поиском, а другие хранением и отдачей контента.
Да кто вообще первый придумал хранить файлы в БД? Руки поотрывал бы за такое. Даже если надо что-то быстро искать по контенту файла, никакого смысла хранить весь файл в БД нет.
Roman Kitaev: Ну к примеру делаем софт для хранения архива первичной документации - бумажный документ сканируем в PDF, распознаем, загоняем номер документа, название, дату и прочие реквизиты в БД.
Возникает вопрос - где хранить сами PDFки? Т.е изображение документа в графическом виде.
С одной стороны - если запихать их в БД, то она распухнет, не будет влезать в память, в результате просядет быстродействие, и вообще нафига они там. Проще хранить их в папке файловой системы, а в БД только пути к ним.
Но с другой стороны - файлы будут хранится отдельно, это сразу ухудшает переносимость системы - кроме БД надо еще переносить каталог с файлами и указывать путь к нему, сложнее бэкапить - надо бэкапить и БД и каталог, сложнее администрировать - БД поставил настроил и забыл, а тут еще и права на каталог надо прописывать.
В результате если общий объем не такой уж и большой, проще запихать их в БД, это сразу убирает кучу проблем, пусть ценой быстродействия. Но тут уж надо выбирать что в данном случае важнее, и насколько быстродействие просядет.
АртемЪ: это отличный пример когда нужно хранить в файлах. Проще - далеко не всегда правильно. Ответьте на вопросы: что делать когда на диске закончится место? Что будет когда ссылку на Ваш файл выложат на Хабре?
Сергей Савостин: Место на диске надо контролировать как под БД так и под папкой с файлами.
Если файлы в БД - контролируется только одно место?
С чего вы решили что ссылку на файл могут где-то выложить, и что база вообще доступна по сети?
Я же говорю - есть конкретная задача, есть конкретные требования, и исходя из них решаем что важнее, и как лучше.
Правильно это когда соответствует заданию и устраивает заказчика.
АртемЪ: Только что ты рассказал пример, который называется "это проще хранить в БД, поэтому я хочу так". Я прошу показать реальный пример, когда хранение файлов в BLOB даёт какой-то выигрыш перед файлами. Желательно с бенчами против файлов, где они глотают пыль от скорости распухшей, как намоченная манту, базы данных.
Roman Kitaev: Выигрыш в чем? В скорости? В удобстве использования? В удобстве разработки?
Хранение контента вне БД это правило. И как у каждого хорошего правила у него есть исключения.
Тут дело не в хочу так, а дело в том чего хочет заказчик.
А заказчик может хотеть разных взаимоисключающих вещей - когда то критична скорость работы, когда-то критична скорость разработки, а на остальное можно наплевать, когда-то критична цена вопроса.
АртемЪ: Скорость разработки сильно разнится между хранением блобов и файлов? Я тебя умоляю.
В удобстве использования? Одинаково. Пару сигналов повешал на изменение объекта, чтобы старые файлы вычищались и готово.
И всё же, не будем отходить от темы. Приведи реальный пример, когда "Бывают случаи когда хранить контент в БД выгоднее".
P.S. Заказчику плевать, пишешь ты проект на ПХП, на Питоне или на Ассемблере. Хранишь ты файлы в БД или нет, да хоть на удалённом FTP или DVD диске. Ему нужен результат и чтобы этот результат нормально работал.