Về cơ bản bạn có hai sự lựa chọn. Bạn có thể lưu trữ dữ liệu ngay trong hàng hoặc có thể sử dụng cơ sở vật chất lớn. Vì PostgreSQL hiện sử dụng một thứ gọi là TOAST để di chuyển các trường lớn ra khỏi bảng sẽ không bị phạt về hiệu suất liên quan đến việc lưu trữ trực tiếp dữ liệu lớn trong hàng. Vẫn có giới hạn 1 GB về kích thước của một trường. Nếu điều này quá hạn chế hoặc nếu bạn muốn có một API phát trực tuyến, bạn có thể sử dụng cơ sở đối tượng lớn, cung cấp cho bạn một cái gì đó giống như bộ mô tả tệp trong cơ sở dữ liệu. Bạn lưu trữ ID LO trong cột của mình và có thể đọc và ghi từ ID đó.
Cá nhân tôi sẽ đề nghị bạn tránh cơ sở vật thể lớn trừ khi bạn thực sự cần nó. Với TOAST, hầu hết các trường hợp sử dụng được đề cập bằng cách chỉ sử dụng cơ sở dữ liệu theo cách bạn mong đợi. Với các đối tượng lớn, bạn tự tạo thêm cho mình gánh nặng bảo trì, bởi vì bạn phải theo dõi các LO ID bạn đã sử dụng và đảm bảo hủy liên kết chúng khi chúng không được sử dụng nữa (nhưng không phải trước đây) hoặc chúng sẽ nằm trong thư mục dữ liệu chiếm dung lượng vĩnh viễn. Ngoài ra còn có rất nhiều cơ sở có hành vi đặc biệt xung quanh chúng, các chi tiết trong số đó khiến tôi không hiểu vì tôi không bao giờ sử dụng chúng.
Đối với hầu hết mọi người, hình phạt hiệu suất lớn liên quan đến việc lưu trữ dữ liệu lớn trong cơ sở dữ liệu là phần mềm ORM của bạn sẽ lấy ra dữ liệu lớn trên mọi truy vấn trừ khi bạn hướng dẫn cụ thể không làm như vậy. Bạn nên cẩn thận thông báo cho Hibernate hoặc bất cứ điều gì bạn đang sử dụng để coi các cột này là lớn và chỉ tìm nạp chúng khi chúng được yêu cầu cụ thể.