Pregunta

Quiero almacenar una gran cantidad de archivos de sonido en una base de datos, pero no sé si es una buena práctica. Me gustaría saber los pros y los contras de hacerlo de esta manera.

También pensé en la posibilidad de tener " enlaces " a esos archivos, pero quizás esto conlleve más problemas que soluciones. Cualquier experiencia en esta dirección será bienvenida :)

Nota: la base de datos será MySQL.

¿Fue útil?

Solución

Todos los sistemas que conozco que almacenan grandes cantidades de archivos grandes los almacenan externamente en la base de datos. Almacena todos los datos del archivo (título, artista, longitud, etc.) que se pueden consultar en la base de datos, junto con una ruta parcial al archivo. Cuando llega el momento de recuperar el archivo, extrae la ruta del archivo, le añade un archivo raíz (o URL) y lo devuelve.

Por lo tanto, tendrías una " ubicación " columna, con una ruta parcial en ella, como " a / b / c / 1000 " que luego asigna a: " http: //myserver/files/a/b/c/1000.mp3 "

Asegúrese de que tiene una manera fácil de apuntar la base de datos de medios a un servidor / directorio diferente, en caso de que lo necesite para la recuperación de datos. Además, es posible que necesite una rutina que vuelva a sincronizar la base de datos con el contenido del archivo comprimido.

Además, si va a tener miles de archivos multimedia, no los almacene todos en un directorio gigante, eso es un cuello de botella en el rendimiento de algunos sistemas de archivos. En su lugar, divídalos en múltiples subárboles equilibrados.

Otros consejos

Creo que almacenarlos en la base de datos está bien, siempre y cuando uses una buena implementación. Puede leer este artículo antiguo pero bueno para obtener ideas sobre cómo evitar que grandes cantidades de datos en la base de datos afecten el rendimiento.

http://www.dreamwerx.net/phpforum/?id=1

He tenido literalmente cientos de conciertos cargados en bases de datos mysql sin ningún problema. El diseño y la implementación son clave, hazlo mal y sufrirás.

Más ventajas de DB (no mencionadas anteriormente): - Funciona mejor en un entorno de carga equilibrada. - Puede incorporar más escalabilidad de almacenamiento backend

He experimentado en diferentes proyectos haciéndolo de ambas maneras y finalmente decidimos que también es más fácil usar el sistema de archivos. Después de todo, el sistema de archivos ya está optimizado para almacenar, recuperar e indexar archivos.

El único consejo que tendría sobre eso es que solo se almacene un " pariente de raíz " la ruta al archivo en la base de datos, luego haga que su programa o sus consultas / procedimientos almacenados / middle-ware utilicen un parámetro raíz específico de la instalación para recuperar el archivo.

Por ejemplo, si almacena XYZ.Wav en C: \ MyProgram \ Data \ Sounds \ X \ la ruta completa sería

C:\MyProgram\Data\Sounds\X\XYZ.Wav

Pero almacenaría la ruta o el nombre del archivo en la base de datos como:

X\XYZ.Wav

En otra parte, en la base de datos o en los archivos de configuración de su programa, almacene una ruta raíz como SoundFilePath igual a

C: \ MyProgram \ Data \ Sounds \

Por supuesto, donde usted divide la raíz de la ruta de la base de datos depende de usted. De esa manera, si mueve la instalación de su programa, no tiene que actualizar la base de datos.

Además, si van a haber lotes de archivos, encuentre alguna forma de modificar los caminos para que no se cierre con un directorio que contenga cientos o miles de archivos (en mi pequeño ejemplo , hay subdirectorios basados ??en el primer carácter del nombre de archivo, pero puede profundizar o usar hashes aleatorios). Esto también hace felices a los indexadores de búsqueda.

Ventajas de usar una base de datos:

  • Fácil de unir archivos de sonido con otros bits de datos.
  • Evitando operaciones de e / s de archivos que omitir la seguridad de la base de datos.
  • No hay necesidad de operaciones de separación para eliminar archivos de sonido cuando la base de datos se eliminan los registros.

Desventajas de usar una base de datos:

  • Bloqueo de la base de datos
  • Las bases de datos pueden ser más caras que los sistemas de archivos

Puede almacenarlos como BLOBs (o LONGBLOBs) y luego recuperar los datos cuando desee acceder a los archivos de medios.

o

Simplemente puede almacenar los archivos multimedia en una unidad y almacenar los metadatos en la base de datos.

Me inclino hacia el último método. No sé cómo se hace esto en general en el mundo, pero sospecho que muchos otros harían lo mismo.

Puede almacenar enlaces (rutas parciales a los datos) y luego recuperar esta información. Facilita el movimiento de las cosas en las unidades y sigue accediendo a ellas.

Almaceno la ruta relativa de cada archivo en la base de datos junto con otros metadatos sobre los archivos. La ruta base se puede cambiar sobre la marcha si necesito reubicar los datos reales en otra unidad (ya sea local o por la ruta UNC).

Así es como lo hago. Estoy seguro de que otros también tendrán ideas.

Algunas ventajas de usar blobs para almacenar archivos

  • Menor costo de administración: use una sola herramienta para hacer copias de seguridad / restaurar, etc.
  • No hay posibilidad de que la base de datos y el sistema de archivos no estén sincronizados
  • Capacidad transaccional (si es necesario)

Algunas desventajas

  • hace saltar la memoria RAM de los servidores de su base de datos con basura inútil que podría estar usando para almacenar filas, índices, etc.
  • Hace que las copias de seguridad de su base de datos sean muy grandes, por lo tanto, menos manejables
  • No es tan conveniente como un sistema de archivos para servir a los clientes (por ejemplo, con un servidor web)

¿Qué pasa con el rendimiento? Su experiencia puede ser diferente. Los sistemas de archivos son extremadamente variados, al igual que las bases de datos en su desempeño. En algunos casos, un sistema de archivos ganará (probablemente con menos archivos más grandes). En algunos casos, una base de datos podría ser mejor (tal vez con un número muy grande de archivos pequeños).

En cualquier caso, no te preocupes, haz lo que parece mejor en ese momento.

Algunas bases de datos ofrecen un servidor web incorporado para servir blobs. En el momento de escribir esto, MySQL no.

Almacenarlos como archivos externos. A continuación, guarde la ruta en un campo varchar. Poner grandes gotas binarias en una base de datos relacional es generalmente muy ineficiente: solo usan espacio y hacen más lento el proceso, ya que los cachés se llenan y son inutilizables. Y no hay nada que ganar, las manchas no se pueden buscar. Sin embargo, es posible que desee guardar metadatos de medios en la base de datos.

Una solución simple sería simplemente almacenar las ubicaciones relativas de los archivos como cadenas y dejar que el sistema de archivos lo maneje. Lo probé en un proyecto (estábamos almacenando archivos adjuntos de oficina en una encuesta) y funcionó bien.

La mejor forma de almacenar archivos de audio / video, puede usar cualquier almacenamiento distribuido que pueda ser local o en la nube.

https://min.io/

para la nube: AWS S3

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