mysql - los - sistemas de archivos de propósito especial
Almacenamiento de archivos para aplicaciones web: sistema de archivos vs DB vs motores NoSQL (4)
Tengo una aplicación web que almacena una gran cantidad de archivos generados por los usuarios. Actualmente, todos están almacenados en el sistema de archivos del servidor, lo que tiene varias desventajas para mí.
- Cuando movemos "carpetas" (como lo define nuestra aplicación) también tenemos que mover los archivos en el disco (aunque esto se debe más a extrañas decisiones de diseño por parte de los desarrolladores originales que a un requisito de almacenar cosas en el sistema de archivos).
- Es difícil escribir pruebas para las acciones del sistema de archivos; Tengo una clase de sistema de archivos falso que registra acciones como mover, eliminar, etc., sin realizarlas, lo que hace más o menos el trabajo, pero no tengo 100% de confianza en las pruebas.
- Agregaré algunos otros trabajos que necesitan acceder a los archivos de otro servicio para realizar tareas adicionales (por ejemplo, indexación en Solr, generación de miniaturas, conversión de formato de película), así que necesito acceder a los archivos de forma remota. Hacer esto en redes compartidas parece dudoso ...
- Tratar con permisos en el sistema de archivos como a veces nos ha dado problemas en el pasado, aunque ahora que nos hemos movido a un entorno Linux puro esto debería ser un problema menor.
Entonces, mis preguntas principales son
- ¿Cuáles son los inconvenientes de almacenar archivos como BLOB en MySQL?
- ¿Existen los mismos problemas con los sistemas NoSQL como Cassandra?
- ¿Alguien tiene alguna otra sugerencia que pueda ser apropiada, por ejemplo, MogileFS, etc.?
No es una respuesta directa, sino algunos consejos para preguntas muy interesantes y de alguna manera similares (sí, se trata de blobs e imágenes, pero esto es IMO comparable).
¿Cuáles son los inconvenientes de almacenar archivos como BLOB en MySQL?
- Almacenar imágenes en DB - ¿Sí o No?
- Imágenes en la base de datos vs sistema de archivos
- https://.com/search?q=images+database+filesystem
¿Existen los mismos problemas con los sistemas NoSQL como Cassandra?
- NoSQL para la organización y replicación del almacenamiento de sistemas de archivos
- Almacenamiento de imágenes en tiendas NoSQL
PD: No quiero ser el mejor, pero no creo que ninguna solución NoSQL resuelva tu problema (NoSQL es irrelevante para la mayoría de las empresas).
Puede almacenar archivos de hasta 2GB fácilmente en Cassandra dividiéndolos en columnas de 1MB más o menos. Esto es bastante común.
También podría almacenarlo como una gran columna, pero luego tendría que leer todo en la memoria al acceder a él.
Si el sistema operativo o la aplicación no necesita acceder a los archivos, entonces no es realmente necesario almacenar los archivos en el sistema de archivos. Si desea hacer una copia de seguridad de los archivos al mismo tiempo que hace una copia de seguridad de la base de datos, entonces hay menos ventajas de almacenarlos fuera de la base de datos. Por lo tanto, podría ser una solución válida para almacenar los archivos en la base de datos.
Un inconveniente adicional es que el procesamiento de archivos en el archivo db tiene más sobrecarga que el procesamiento de archivos en el nivel del sistema de archivos. Sin embargo, siempre que las ventajas superen los inconvenientes, y parece que podría ser en su caso, podría intentarlo.
Mi principal preocupación sería administrar el almacenamiento en disco. A medida que los archivos de su base de datos crecen, la administración de toda su base de datos se vuelve más complicada. No quieres salir de la sartén y entrar al fuego.
tal vez una solución híbrida.
Use una base de datos para almacenar metadatos sobre cada archivo y use el sistema de archivos para almacenar el archivo.
cualquier reestructuración de ''carpetas'' podría modelarse en la base de datos y desreferenciarse de la ubicación real del sistema operativo.