¿Cuál es la mejor manera de guardar y recuperar archivos binarios con Oracle 10g?

StackOverflow https://stackoverflow.com/questions/62876

  •  09-06-2019
  •  | 
  •  

Pregunta

Estoy a punto de implementar una función en nuestra aplicación que permite al usuario "cargar" un documento PDF o Microsoft PowerPoint, que la aplicación luego pondrá a disposición de otros usuarios en un visor (para que no puedan "descargarlo"). en el sentido 'Guardar como...').

Ya sé cómo guardar y recuperar información binaria arbitraria en columnas de bases de datos, pero como esta será una característica comúnmente utilizada de nuestra aplicación, me temo que la solución conduciría a tablas de bases de datos enormemente grandes (como sabemos, uno de nuestros clientes querrá poner vídeo en documentos de PowerPoint).

Sé que hay una manera de crear un objeto de 'directorio' en Oracle, pero ¿hay alguna manera de utilizar esta función para almacenar y recuperar archivos binarios guardados en otra parte del servidor de base de datos?

¿O estoy siendo demasiado paranoico con el tamaño de la base de datos?

(para que esté completo, nuestra aplicación es .Net WinForms usando Controladores CoreLab / DevArt OraDirect.Net a Oráculo 10g)

¿Fue útil?

Solución

Un par de opciones:Podrías poner la columna BLOB en su propio espacio de tabla, con sus propias características de almacenamiento;puede almacenar los BLOB en su propia tabla, vinculados a la otra tabla mediante una columna de ID.En cualquier caso, como sugirió, podría definir la columna como BFILE, lo que significa que el archivo real se almacena externamente desde la base de datos en un directorio.Lo que podría ser motivo de preocupación es que los BFILE LOB no participan en transacciones y no son recuperables con el resto de la base de datos.

Todo esto se analiza en la referencia SQL de Oracle 10gR2, capítulo 2, que comienza en la página 23.

Otros consejos

Supongo que depende de lo que consideres enormemente grande.

Realmente depende del caso de uso.Si rara vez se accede a los documentos, estaría bien colocarlos en la base de datos (con la ventaja de obtener copias de seguridad "gratuitas", por ejemplo, con la base de datos).

Si estos son archivos que van a ser visitados una y otra vez, sería mejor ponerlos directamente en el disco y simplemente almacenar la ubicación, o incluso (si el ancho de banda es realmente alto) buscar algo como MogileFS

Nadie podrá darte una respuesta de Sí o No a esto.

Puede usar un tipo de columna LOB normal y configurar los parámetros de almacenamiento para ese campo de modo que esté en un espacio de tabla separado.Cree el espacio de tabla en algún lugar que pueda soportar el lanzamiento de grandes cantidades de datos y minimizará el impacto.

Para estar realmente súper paranoico con el uso del disco, también puede comprimir el espacio de tabla marcándolo como tal.Algo parecido a:

Crear TableSpace Binary_Data1 DataFile Some_San_Location Almacenamiento de compresa predeterminado (...)

En mi experiencia, un campo VARCHAR2 simple que contenga el nombre del archivo adjunto es una solución mejor y más sencilla.El tamaño del sistema de archivos es mucho más fácil de administrar que el tamaño de la base de datos.

Los datos tienen que vivir en algún lugar, ya sea interno a la base de datos o si simplemente almacena un enlace a una ruta de archivo accesible (servidor), todavía está masticando espacio.

En el pasado solo usé campos LOB simples y parecía funcionar bien.Si mantiene los datos dentro de la base de datos, al menos mantendrá bajas las molestias de realizar copias de seguridad; es posible que tenga muchos datos de los que hacer una copia de seguridad, pero cuando los restaure, todos estarán allí.Dividir el binario significa que potencialmente puede romper la base de datos o perder datos si no tiene cuidado con lo que respalda.

Una razón para simplemente almacenar el enlace o una identificación que pueda usarse para construir el enlace es que el almacenamiento que normalmente usa para las bases de datos de Oracle es bastante costoso.Si tiene muchos archivos grandes, suele ser mucho más rentable colocarlos en una matriz de discos menos costosa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top