2010-12-30 20 views
5

Quiero almacenar un objeto serializado en algún lugar y después de mirar alrededor, me doy cuenta de que hay un par de maneras de hacerlo.postgresql ¿uso bytea blob o la ubicación del archivo para almacenar el objeto serializado?

Estoy buscando almacenar el archivo en algún lugar del sistema de archivos y almacenar la ubicación del archivo como entradas en una tabla.

Suponiendo que los archivos son alrededor de 100-500Kb, ¿es esta una forma adecuada de hacerlo? ¿O usar bytea o blob una mejor solución?

Respuesta

10

Los objetos pequeños (que 500Kb) califican como funcionarán bien como bytea. La principal limitación del tamaño es que tendrá que materializar todo el campo en la memoria primero en el servidor y luego en el cliente (hay formas de hacerlo, pero son limitadas). Para medio megabyte, eso no debería ser un problema, pero si comienzas a almacenar objetos mucho más grandes, es posible que necesites un poco de consideración.

Almacenarlo en el sistema de archivos y almacenar la ubicación (o almacenarlo con el nombre de una clave primaria sustituta de una secuencia SERIAL) es una buena manera de tratar con archivos más grandes, y por supuesto puede aplicarlo aquí también. Las desventajas son que pierdes integridad transaccional (no puedes estar seguro de que tanto el sistema de archivos como la base de datos se actualizaron, entonces necesitas implementar algún tipo de herramienta de verificación para ejecutarlos regularmente para compararlos), y probablemente lo más importante es que puedes ' Obtenga copias de seguridad consistentes (¿y si el archivo fue respaldado y no el registro de db? o al revés). Hay métodos para lidiar con esto también, por supuesto, pero rápidamente se vuelve mucho más complejo que mantener los datos almacenados en la mesa.

Cuestiones relacionadas