ссылки в постгрес? Или держать все в байнари в самом постгрес?
Чаще всего лучше отдельно. Т.е. чтобы хранить внутри - надо очень точно знать зачем вам это надо.
правильнее держать в постгресе, а лучше - снаружи:)
Если вам не нужна транзакционность и единый способ бекапа для данных базы и файлов в базе вам по плечу то ОК.
А в чем минус храния файлов в постгресе?
В принцыпе, некоторые минусы в том, чтобы держать файлы в постгресе -- есть. Начиная с того, что постгрес и так работает поверх файлов, и лишний уровень только добавляет тормозов, обычно без какой-либо пользы. Кроме того, там лимит на размер файл в гигабайт -- это мало. Ну, в смысле -- если просто делать -- то лимит будет в гигабайт. К тому жэ, на самом деле, оно ещё и гигабайт-то выберет относительно неспешно -- все эти преобразования в формат протокола и обратно... Но, с другой стороны, никаких совсем приныпиальных противоречий с тем, чтобы в базе были файлы -- нет. И это, в общем, вполне нормально решэние.
Ладно спасибо
Да у меня на горизонте маячит организация хранилища файлов, потому тоже очень интересен этот вопрос:)
С другой стороны по через хранимки и plproxy организовать горизонтально масштабируемое хранилище файлов в ПГ - ну оно таки рабочее решение. А распределённые хранилища - они, в своём большинстве используют СУБД для хранения метаинформации. И запись в эти хранилища - ну совсем не быстрая.
В Постгресе нет нормальных BLOB-ов. Есть TOAST - нём большие записи наслайсены на кусочки по 2kb, которые лежать в отдельной таблице. Т.е. когда вы извлекаете файл из постгреса, вы по сути делаете select * from xxx_toast where obj_id=? order by toast_id; Очевидно, что не самый эффективный способ получения файла. Опять таки - зачем вам этот файл нужен. Чтобы отдать наружу через HTTP сервер? Ну так последний как раз и так прекрасно умеет отдавать файлы ... при условии,что это файлы. А не результат запроса к базе.
Ну, там всё-таки обычно другого типа "распределённые". А такие, как через plproxy -- обычно делаются шардированием, которое в файловой системе очень естественное. Кроме того, часто раздача файлов с одной ноды досутпна со скоростью сети примерно (дажэ диски часто менее ограничивают, поскольку самое актуальное в кэшах в RAM). То есть десятки гигабит на такой очень умеренный сервер. СУБД до такого далеко обычно.
Это от задачи зависит. Иногда так лучше, иногда наоборот
Я храню либо в aws s3, либо в Minio (s3-совместимое хранилище). В базе, соответственно, держу ключи файлов только. Например, df3/a3bd4a.jpg. При отдаче юзеру в простейшем случае можно дописывать спереди префикс с доменом. Например: https://blabla.ru/media/df3/a3bd4a.jpg
Обсуждают сегодня