Pregunta

I desarrollar un nuevo sitio web y quiero usar GridFS como almacenamiento para todos los archivos subidos por el usuario, ya que ofrece una gran cantidad de ventajas en comparación con un sistema de ficheros de almacenamiento normal.

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

Benchmark con nginx

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

¿Fue útil?

Solución

Yo uso GridFS en el trabajo sobre uno de nuestros servidores, que es parte de un sitio web de comparación de precios con las estadísticas de tráfico de honor (arround 25k visitantes por día). El servidor no tiene mucho carnero, 2gigs, e incluso la CPU no es muy rápido (1,8 GHz Core 2 Duo) pero el servidor tiene mucho espacio de almacenamiento: 10 TB (SATA) en configuración RAID 0. El trabajo del servidor está haciendo es muy simple:

Cada producto en nuestro precio-comparador tiene una imagen (hay unos 10 millones de productos de acuerdo a nuestra db producto), y el trabajo de los servidores es para descargar la imagen, cambiar su tamaño, almacenarlo en GridFS, y entregarlo a la visitantes navegador ... si no está presente en la red ... o ... entregarlo al navegador visitantes si ya está almacenada en la red. Por lo tanto, esto podría ser llamado como un 'esquema CDN tradicional'.

Hemos almacenado y procesado de 4 millones de imágenes en este servidor, ya que es en funcionamiento. El material de cambio de tamaño y la tienda se realiza mediante un simple script php ... pero sin duda, un script en Python, Java o algo así podría ser más rápido.

Tamaño de datos actual: 11.23g

tamaño de almacenamiento actual: 12,5 g

Índices: 5

Índice de tamaño: 849.65m

Sobre la fiabilidad: Esto es muy fiable. El servidor no se carga, el tamaño del índice está bien, las consultas son rápidos

Acerca de la velocidad: Por cierto, ¿no es más rápido que el almacenamiento de archivos local, tal vez un 10% más lento, pero lo suficientemente rápido como para ser utilizado en tiempo real, incluso cuando las necesidades de imagen a procesar, que es en nuestro caso, muy php dependientes . los tiempos de mantenimiento y desarrollo también se han reducido: se hizo tan fácil de eliminar una o varias imágenes: simplemente consulta la base de datos con un simple comando de eliminación. Otra cosa interesante: cuando reiniciado nuestro viejo servidor, con el almacenamiento de archivos local (por lo que millones de archivos en miles de carpetas), que a veces se bloquea durante horas hacer que el sistema estaba realizando una comprobación de integridad de archivos (esto realmente tomó horas ...). No tenemos este problema más con GridFS, nuestras imágenes se almacenan en grandes trozos mongodb (2 GB archivos)

Así que ... en mi mente ... Sí, GridFS es rápido y lo suficientemente confiable para ser utilizado para la producción.

Otros consejos

Como se ha mencionado, puede que no sea tan rápido como un sistema de archivos normal, pero entonces se le da ventajas sobre el hombre sistemas de ficheros ordinarios que creo que están dando un valor de hasta una velocidad de bits para.

En última instancia, la sharding, es posible llegar a un punto donde sin embargo el almacenamiento GridFS realidad se convierte en el más rápido opción en lugar de un sistema de archivos común y un único nodo.

módulo de nginx-GridFS mdirolf de es grande y bastante fácil de obtener una configuración. Lo estamos usando en la producción en paint.ly para servir a todos los cuadros y no ha habido problemas hasta ahora.

heads-up en reparaciones para DBs más grandes aunque -. Un nuevo sistema que estamos desarrollando, mongo no ha salido de forma limpia, y la reparación de las miradas 7TB GridFS que va a tener 130 horas

Debido a esto, creo que voy a ver el cambio a OpenStack Swift o Ceph. Sin embargo, hasta entonces, era bueno. Y el nginx-GridFS módulo es dulce.

No recomiendo el uso de GridFS a menos que sepa lo que está haciendo. GridFS es sólo la capa de abstracción que divide los archivos en trozos y almacena los archivos en dos colecciones. Más archivos - más sobrecarga. Si espera que los archivos sean bastante del mismo tamaño, no superior a 32M o menos - usted está en el camino correcto. No trate de almacenar archivos de gran tamaño en GridFS. ¿Por qué?

  1. Los conductores 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 trozos y aumentar la carga de la base de datos Si el sistema de archivos está creciendo, tendrá que decidir a fragmentar los GridFS. ¡Ten cuidado! No se garantiza la consistencia cuando se está iniciando sharding!

Si se piensa en leer proyecto cargado -. Considerar cargar los archivos en documentos directamente (si 16M o menos del tamaño) o elige un ClusterFS, y el enlace de nombre de archivo / i-nodo a su lógica

Espero que esto ayude.

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