postgresql para almacenar documentos.
Rodrigo Fuentealba
darkprox en gmail.com
Mie Mar 7 18:26:36 CLST 2007
El 7/03/07, Alvaro Herrera <alvherre en alvh.no-ip.org> escribió:
> Rodrigo Fuentealba escribió:
>
> > Ahora, para esto tengo dos posibilidades: OID's y byte arrays.
>
> Yo te recomendaria usar bytea.
>
> Los "large objects" (LO) tienen la desventaja de que no tienen control
> de acceso y tienen una API que es totalmente diferente de lo que uno
> acostumbra a usar en SQL (lo_open, lo_read etc). Cuando quieres hacer
> alguna cosa en "relacional" quedas muy amarrado de manos.
Ya me ha pasado con oids
> Por otro lado, en Postgres el uso de bytea esta bastante optimizado por
> el mecanismo conocido como TOAST. Te recomiendo usar
> ALTER TABLE tabla ALTER COLUMN columna SET STORAGE EXTERNAL
> en la columna bytea, de manera que el sistema no trate de comprimir los
> datos almacenados (generalmente la compresibilidad de esos documentos no
> es mucha, y es mas rapido el acceso si no tiene que estar
> comprimiendo/descomprimiendo).
Dato interesante.
> (*) la alternativa a escapar/des-escapar es usar una API como
> PQexecParams, pero si vas a usar PHP creo que eso no esta disponible.
> En lenguajes razonables puedes hacerlo y es mucho mas eficiente porque
> los datos binarios pasan directo a la base de datos y no se tiene que
> gastar memoria en el proceso de escape.
(-_-) si... me rindo con php...
> Con respecto a la alternativa de almancenar los datos en el sistema de
> archivos y guardar solo una referencia en la BD, te recomiendo que no lo
> hagas a menos que el volumen de datos sea muy grande (hablo de decenas
> de GB). Es muy dificil hacerlo correctamente, sobre todo si nunca lo
> has hecho, y no hacerlo correctamente lleva a documentos sin referencia
> y referencias a documentos inexistentes, que son muy incomodos de
> manejar.
<!-- lo siguiente llegó en otro correo de Alvaro -->
>> de tal manera que yo pueda hacer una suerte de
>> "diff" para archivos binarios y guardar el archivo una sola vez y
>> luego poder ir viendo progresivamente los cambios,
> Lo que estas proponiendo es un mecanismo muy fragil e
> ineficiente. Almacenarlo todo tiene un costo mayor en espacio de
> almacenamiento, pero es mucho mas simple de manejar en codigo y mas
> resistente a fallas.
Muchas gracias Alvaro.
La solución que se planteó fue precisamente para intentar ahorrar
"algo" de espacio en disco y emular el comportamiento de otra
aplicación como esta, que guarda sus datos en disco y ha funcionado
como... bueno, mal.
No había visto esa cara de la moneda.
--
Rodrigo Fuentealba Cartes
Desarrollador de Sistemas Web
Registered User 387639 - http://counter.li.org
Más información sobre la lista de distribución Linux