Tôi bắt đầu một ứng dụng với Hibernate 3.2 và PostgreSQL 8.4. Tôi có một số trường byte[]
được ánh xạ là @Basic
(= PG bytea) và các trường khác đã được ánh xạ dưới dạng @Lob
(= PG đối tượng lớn). Tại sao mâu thuẫn? Bởi vì tôi là một Noob Hibernate.PostgreSQL: BYTEA vs OID + Đối tượng lớn?
Bây giờ, các trường đó tối đa là 4 Kb (nhưng trung bình là 2-3 kb). Tài liệu PostgreSQL đã đề cập rằng LOs là tốt khi các trường lớn, nhưng tôi không thấy ý nghĩa 'lớn'.
Tôi đã nâng cấp lên PostgreSQL 9.0 bằng Hibernate 3.6 và tôi bị kẹt để thay đổi chú thích thành @Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
. Lỗi này đã đưa ra một vấn đề tương thích tiềm năng, và cuối cùng tôi phát hiện ra rằng các đối tượng lớn là một nỗi đau để đối phó với, so với một lĩnh vực bình thường.
Vì vậy, tôi đang nghĩ đến việc thay đổi tất cả thành bytea
. Nhưng tôi lo ngại rằng các lĩnh vực bytea
được mã hóa trong Hex, do đó, có một số chi phí trong mã hóa và giải mã, và điều này sẽ làm tổn thương hiệu suất.
Có điểm chuẩn tốt về hiệu suất của cả hai loại này không? Bất kỳ ai đã thực hiện công tắc và thấy sự khác biệt?
Ngoài ra nó không được lưu trữ dưới dạng hex và tôi nghĩ libpq (và thậm chí cả giao thức) có giao diện truyền nhị phân của cả hai. –