Комментарии 6
Не то что бы я когда то по-настоящему задавался этим вопросом, но в моем окружении на протяжении уже 18 лет файлы в бд - лютый зашквар :)
Даже придумать путь где это удобно может быть уже не могу, просто в голову не приходит
Зависит от объёма и способа доступа... Тот же sqlite неплох на мелких файлах, даже быстрее ФС. А у postgresql на запись скорость низкая.
да вот пример - недавно надо было сохранить пару сотен тысяч json'ов по мегабайту каждый, в итоге пришли к решению пожать их brotli и хранить в блобах в sqlite, вынеся в отдельные столбцы поля для поиска и индексации. И не вижу ни одной причины, почему в этом случае было бы лучше использовать файлы
Ситуации бывают разные. Иногда ничего плохого в хранении файлов в БД нету (ну или я не вижу).
Пример - наша почти коробочная ERP с элементами CRM, ну и различные ISV вертикальные решения. Она расчитана на малый и средний бизнес, поэтому ожидать там петабайт данных не прихдится. Есть настройка храниния файлов (AWS/Azure/Local), но ею почти никто не пользуется, а хранят всё в самой БД. Основные объекты - сгенерированные документы (инвойсы, ордера и проч., которые может позникнуть необходимость посмотреть позднее) и аттачменты к входящим письмам (там могут быть либо документы нужные - договора к примеру, либо те же инвойсы от поставщиков, которые позднее распознаются в системе).
Почему же клиенты почти не пользуются внешним хранилищем? Ну, всё это усложняет процесс управления. Большинство клиентов не хотят настраивать доступ, отдельно бекапить файлы. А база - она вот. В большинстве своём - малого размера в 50-100ГБ. Файлы в ней тоже жмутся. Скорость - не проблема. Есть и исключения, конечно. К примеру если клиент имеет характерные файлы в 200-400МБ. И вот тут лучше внешнее хранилище конечно.
Я и раньше знал, что large objects в постгрес - это от лукавого. Ваша статья - последний гвоздь в гроб использования этих возможностей. Если приспичит хранить файлы больше одного ГБ, то резать эти файлы на соответствующие порции и хранить эти порции в пользовательских таблицах будет существенно дешевле, нежели использовать large objects. Спасибо за материал!

Как хранятся большие бинарные данные в БД: накладные расходы BLOB в Oracle и Large Object в Postgres