used nodejs example data are mongodb nginx gridfs

mongodb - nodejs - ¿GridFS es lo suficientemente rápido y confiable para la producción?



mongoose gridfs (5)

Desarrollo un nuevo sitio web y quiero usar GridFS como almacenamiento para todas las subidas de usuarios, ya que ofrece muchas ventajas en comparación con el almacenamiento normal de un sistema de archivos.

Los puntos de referencia con GridFS servidos por nginx indican que no es tan rápido como un sistema de archivos normal servido por nginx.

Punto de referencia con nginx

¿Hay alguien por ahí, que usa GridFS que ya está en un entorno de producción, o que lo usaría para un nuevo proyecto?


Como se mencionó, puede que no sea tan rápido como un sistema de archivos ordinario, pero luego le da ventajas al hombre sobre los sistemas de archivos ordinarios, a los que creo que vale la pena ceder un poco.

En última instancia, con la fragmentación, puede llegar a un punto, sin embargo, donde el almacenamiento de GridFS se convierte en la opción más rápida en comparación con un sistema de archivos ordinario y un solo nodo.


El módulo nginx-gridfs de mdirolf es genial y bastante fácil de configurar. Lo estamos utilizando en producción en paint.ly para servir a todas las pinturas y hasta ahora no ha habido problemas.


No recomiendo usar gridfs a menos que sepa lo que está haciendo. GridFS es solo una capa de abstracción que divide los archivos en fragmentos y almacena los archivos en dos colecciones. Más archivos: más sobrecarga. Si espera que los archivos sean del mismo tamaño, que no superen los 32 millones, está en el camino correcto. No intente almacenar archivos grandes en gridfs. ¿Por qué?

  1. Los controladores en diferentes idiomas pueden leer todo el archivo (por ejemplo, trozos) al leer la pequeña parte del archivo.
  2. La modificación del archivo puede afectar a todos los fragmentos y aumentar la carga de la base de datos. Si su sistema de archivos está creciendo, tendrá que decidir fragmentar los gridfs. ¡Ten cuidado! ¡La consistencia no está garantizada cuando se inicia la fragmentación!

Si piensa en un proyecto cargado de lectura, considere cargar los archivos en documentos directamente (si tiene un tamaño de 16M o menos) o elija otro clusterfs, y enlace nombre de archivo / inode a su lógica.

Espero que esto ayude.


Sin embargo, cabe destacar las reparaciones para DB más grandes: un nuevo sistema que estamos desarrollando, mongo no salió limpiamente y la reparación de 7 TB de GridFS parece que demorará 130 horas.

Debido a esto, creo que consideraré cambiar a OpenStack Swift o Ceph. Aún así, hasta entonces estuvo bien. Y el módulo nginx-gridfs es dulce.


Utilizo gridfs en el trabajo en uno de nuestros servidores, que es parte de un sitio web de comparación de precios con estadísticas de tráfico honorables (cerca de 25,000 visitantes por día). El servidor no tiene mucha ram, 2gigs, e incluso la CPU no es realmente rápida (Core 2 duo 1.8Ghz) pero el servidor tiene mucho espacio de almacenamiento: 10Tb (sata) en la configuración de raid 0. El trabajo que hace el servidor es muy simple:

Cada producto en nuestro comparador de precios tiene una imagen (hay alrededor de 10 millones de productos de acuerdo con nuestro producto db), y el trabajo de los servidores es descargar la imagen, cambiar su tamaño, almacenarla en grillas y entregarla al navegador de los visitantes. ... si no está presente en la red ... o ... entregarlo al navegador de visitantes si ya está almacenado en la red. Por lo tanto, esto podría llamarse un "esquema de cdn tradicional".

Hemos almacenado y procesado 4 millones de imágenes en este servidor desde que está en funcionamiento. El tamaño y el material de la tienda se realiza mediante un simple script php ... pero seguro, un script python, o algo así como java podría ser más rápido.

Tamaño de datos actuales: 11.23g

Tamaño de almacenamiento actual: 12.5g

Índices: 5

Tamaño del índice: 849.65m

Acerca de la fiabilidad: esto es muy confiable. El servidor no carga, el tamaño del índice está bien, las consultas son rápidas

Acerca de la velocidad: seguro, no es tan rápido como el almacenamiento local de archivos, tal vez un 10% más lento, pero lo suficientemente rápido para ser utilizado en tiempo real incluso cuando la imagen necesita procesarse, que en nuestro caso es muy dependiente de php. Los tiempos de mantenimiento y desarrollo también se han reducido: se hizo tan simple eliminar una o varias imágenes: simplemente consulte el archivo db con un simple comando de eliminación. Otra cosa interesante: cuando reiniciamos nuestro servidor anterior, con almacenamiento de archivos local (así que millones de archivos en miles de carpetas), a veces se cuelga durante horas porque el sistema estaba realizando una comprobación de integridad de archivos (esto realmente tomó horas ...). Ya no tenemos este problema con gridfs, nuestras imágenes ahora están almacenadas en grandes trozos de mongodb (archivos de 2 gb)

Entonces ... en mi mente ... Sí, gridfs es lo suficientemente rápido y confiable para ser utilizado para producción.