Ответ 1
У вас есть в основном два варианта. Вы можете сохранить данные прямо в строке или использовать объект большого объекта. Поскольку PostgreSQL теперь использует что-то под названием TOAST для перемещения больших полей из таблицы, не должно быть штрафа за производительность, связанного с хранением больших данных в строке напрямую. Остается ограничение 1 ГБ в размере поля. Если это слишком ограничено или вам нужен потоковый API, вы можете использовать объект большого объекта, который дает вам нечто большее, чем файловые дескрипторы в базе данных. Вы сохраняете идентификатор LO в своем столбце и можете читать и писать с этого идентификатора.
Я лично предлагаю вам избегать объекта большого объекта, если он вам не нужен. С помощью TOAST большинство случаев использования покрываются за счет использования базы данных так, как вы ожидали. С большими объектами вы предоставляете себе дополнительную нагрузку на обслуживание, потому что вам нужно отслеживать используемые вами идентификаторы LO и обязательно отключайте их, когда они больше не используются (но не раньше), или они будут сидеть в вашем каталог данных занимает пространство навсегда. Есть также множество объектов, которые имеют исключительное поведение вокруг них, детали из которых убегают от меня, потому что я никогда не использую их.
Для большинства людей большое ограничение производительности, связанное с хранением больших данных в базе данных, заключается в том, что ваше программное обеспечение ORM вытаскивает большие данные по каждому запросу, если вы специально не поручаете ему этого делать. Вы должны позаботиться о том, чтобы сообщить Hibernate или тому, что вы используете, чтобы обрабатывать эти столбцы как большие и только извлекать их, когда они специально запрошены.