Ho avviato un'applicazione con Hibernate 3.2 e PostgreSQL 8.4. Ho alcuni campi byte[]
mappati come @Basic
(= PG bytea) e altri che sono stati mappati come @Lob
(= PG Large Object). Perché l'incoerenza? Perché ero un noob in letargo.PostgreSQL: BYTEA vs OID + oggetto grande?
Ora, questi campi sono max 4 Kb (ma la media è 2-3 kb). La documentazione di PostgreSQL diceva che i LO sono buoni quando i campi sono grandi, ma non ho visto cosa significasse "grande".
Ho aggiornato a PostgreSQL 9.0 con Hibernate 3.6 e sono rimasto bloccato a modificare l'annotazione su @Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
. Questo bug ha portato avanti un potenziale problema di compatibilità, e alla fine ho scoperto che gli oggetti di grandi dimensioni sono un problema da affrontare, rispetto a un campo normale.
Quindi sto pensando di cambiarlo a bytea
. Ma sono preoccupato che i campi bytea
siano codificati in Hex, quindi c'è un sovraccarico nella codifica e nella decodifica, e questo danneggerebbe le prestazioni.
Ci sono buoni benchmark sulle prestazioni di entrambi? Qualcuno ha fatto l'interruttore e ha visto una differenza?
Inoltre non è memorizzato come esadecimale, e penso che libpq (e forse anche il protocollo) abbia un'interfaccia per i trasferimenti binari di entrambi. –