172 похожих чатов

А если серьезно. Лучше хранить файлы в папках и держать

ссылки в постгрес? Или держать все в байнари в самом постгрес?

13 ответов

17 просмотров

Чаще всего лучше отдельно. Т.е. чтобы хранить внутри - надо очень точно знать зачем вам это надо.

правильнее держать в постгресе, а лучше - снаружи:)

Если вам не нужна транзакционность и единый способ бекапа для данных базы и файлов в базе вам по плечу то ОК.

В принцыпе, некоторые минусы в том, чтобы держать файлы в постгресе -- есть. Начиная с того, что постгрес и так работает поверх файлов, и лишний уровень только добавляет тормозов, обычно без какой-либо пользы. Кроме того, там лимит на размер файл в гигабайт -- это мало. Ну, в смысле -- если просто делать -- то лимит будет в гигабайт. К тому жэ, на самом деле, оно ещё и гигабайт-то выберет относительно неспешно -- все эти преобразования в формат протокола и обратно... Но, с другой стороны, никаких совсем приныпиальных противоречий с тем, чтобы в базе были файлы -- нет. И это, в общем, вполне нормально решэние.

Emirlan Rasulov
Ладно спасибо

Да у меня на горизонте маячит организация хранилища файлов, потому тоже очень интересен этот вопрос:)

Ilya Anfimov
В принцыпе, некоторые минусы в том, чтобы держать ...

С другой стороны по через хранимки и plproxy организовать горизонтально масштабируемое хранилище файлов в ПГ - ну оно таки рабочее решение. А распределённые хранилища - они, в своём большинстве используют СУБД для хранения метаинформации. И запись в эти хранилища - ну совсем не быстрая.

Eshu Marabo
А в чем минус храния файлов в постгресе?

В Постгресе нет нормальных BLOB-ов. Есть TOAST - нём большие записи наслайсены на кусочки по 2kb, которые лежать в отдельной таблице. Т.е. когда вы извлекаете файл из постгреса, вы по сути делаете select * from xxx_toast where obj_id=? order by toast_id; Очевидно, что не самый эффективный способ получения файла. Опять таки - зачем вам этот файл нужен. Чтобы отдать наружу через HTTP сервер? Ну так последний как раз и так прекрасно умеет отдавать файлы ... при условии,что это файлы. А не результат запроса к базе.

Михаил Шурутов
С другой стороны по через хранимки и plproxy орган...

Ну, там всё-таки обычно другого типа "распределённые". А такие, как через plproxy -- обычно делаются шардированием, которое в файловой системе очень естественное. Кроме того, часто раздача файлов с одной ноды досутпна со скоростью сети примерно (дажэ диски часто менее ограничивают, поскольку самое актуальное в кэшах в RAM). То есть десятки гигабит на такой очень умеренный сервер. СУБД до такого далеко обычно.

Это от задачи зависит. Иногда так лучше, иногда наоборот

Я храню либо в aws s3, либо в Minio (s3-совместимое хранилище). В базе, соответственно, держу ключи файлов только. Например, df3/a3bd4a.jpg. При отдаче юзеру в простейшем случае можно дописывать спереди префикс с доменом. Например: https://blabla.ru/media/df3/a3bd4a.jpg

Похожие вопросы

Обсуждают сегодня

Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
было так ;void set_http_ver(RESPD* ptr, char* version, uint32_t length) // example: 'RTSP/1.1 ' set_http_ver: mov eax, [esp + 4] mov ecx, [esp + 8] ...
Mixail Frolov
5
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Code Explorer / обновление содержимого окна, задержка - задержка, по моему, слишком большая, примерно 1 сек, хотелось-бы установить - макс. быстро - в настройках ide не нашел...
livontiy
1
Карта сайта