postgresql para almacenar documentos.

Horst H. von Brand vonbrand en inf.utfsm.cl
Mie Mar 7 15:12:47 CLST 2007


Rodrigo Fuentealba <darkprox en gmail.com> wrote:
> Quiero implementar un software de administración de archivos al estilo
> CVS/Subversion pero este es para planos en CAD, documentos de
> OpenOffice (y Office, lamentable decirlo), y hartas cosas varias.

Hum... alli no sirve de mucho lo de "control de versiones", andas
buscando mas bien alguna clase de repositorio de documentos.

[Los formatos OASIS son basicamente un .zip lleno de XMLses y otros
 cachivaches; al comprimir se pierde lo que hace que "solo guardar las
 diferencias con el anterior" permite ganar. No tengo idea de los CAD,
 etc. La estructura de los Hasefroch no se que tanto mantenga "comun"
 con el anterior. Ojo, esas cosas /tienen/ su propio sistema de control
 de versiones integrado (por algo el archivo que solo dice "Nos vemos
 man~ana" pesa 357KiB... tiene todos los mensajitos anteriormente
 enviados empotrados en "versiones previas" para "undo"), hay gente que
 ha pagado caro el no considerar esto (y de cuyos archivos publicados se
 extrajeron borradores conteniendo datos suculentos)]

> Para esto (ya que va integrado con un montón de aplicaciones más como
> control de horarios, control y asignación de trabajadores a un
> proyecto, Intranet y cosas varias, que están corriendo en PostgreSQL)
> modelé algunas tablas, 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,

Te conviene pensar en algo como xdelta(1) (el algoritmo es la base de
muchos de los esquemas de "manejo compacto" de diferencias entre
archivos arbitrarios que usan los SCM de a deveras)

>                                                   y recuperar en el
> lenguaje que sea (Java, PHP, Python o alguno de los de hasefroch) el
> documento (poder ver la lista de documentos con algo programado con
> fuse). Esa es mi idea, a grandes rasgos.

Mi idea, a rasgos aun mayores, seria ver si alguno de los tantos
sistemas de administracion de documentos hace algo como lo que quieres,
y usar eso. Si, no sera 100% lo que buscas/quieres, pero te costara a lo
mas un 5% de lo que es desarrollar el cuento por ti mismo, lo tendras en
funciones en 0,5% del tiempo, y el costo de mantencion se reduce a un 1%
de lo que significa hacerlo todo tu (suponiendo que elegiste bien, y es
un proyecto activo).

Y olvidate de "interfases hacia el lenguaje X du jour", mete todo el
cuento tras /una/ interfaz web, programada en lo que este de moda hoy.

> Ahora, para esto tengo dos posibilidades: OID's y byte arrays. En
> experiencias como ésta... por tonta que sea la idea de meter un
> documento en una base de datos para compartirlo entre varias
> aplicaciones (la experiencia me dice que en el sistema de archivos la
> cosa no siempre funciona bien porque no existe un fine tunning como el
> que se requiere), ¿cuál será mejor, y por qué? sé cómo manipular ambos
> tipos de datos, pero desconozco los detalles de las diferencias como
> para discriminar, ¿qué me aconsejarían ustedes?

Usar la base de datos para simplemente guardar el nombre del archivo en
un repositorio ad hoc no es mas simple? (Si, ocupa mas espacio; pero has
preguntado ultimamente cuanto cuesta un disco de taman~o decente?).
Tiene la ventaja que no porque se rompio la cadena desde la version 0 a
la 137 cuando se corrompio el 9o parche se pierde casi todo... y obtener
la "ultima version" (la unica que normalmente interesa) es mucho mas
eficiente (por algo ya el venerable RCS guardaba no diferencias desde el
comienzo incrementalmente hasta el final, sino la ultima version y
diferencias hacia atras).
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                    Fono: +56 32 2654431
Universidad Tecnica Federico Santa Maria             +56 32 2654239
Casilla 110-V, Valparaiso, Chile               Fax:  +56 32 2797513



Más información sobre la lista de distribución Linux