Es GridFS rápido y lo suficientemente confiable para la producción?

Puedo desarrollar un nuevo sitio web y quiero usar GridFS como almacenamiento para todas las cargas de usuario, ya que ofrece una gran cantidad de ventajas en comparación con un sistema de archivos normal de almacenamiento.

Puntos de referencia con GridFS servido por nginx indicar, que no es tan rápido como un sistema de archivos normal servido por nginx.

Punto de referencia con nginx

Es alguien por ahí, que utiliza GridFS ya en un entorno de producción, o usarlo para un nuevo proyecto?

5 Kommentare

  1. 115

    Yo uso gridfs en el trabajo en uno de nuestros servidores, que se parte de un precio de comparación de sitio web con el honorable estadísticas de tráfico (cerca de 25 mil visitantes por día). El servidor no tiene mucha ram, 2gigs, e incluso la cpu no es muy rápido (Core 2 duo de 1.8 Ghz), pero el servidor tiene un montón de espacio de almacenamiento : 10 tb (sata) en configuración raid 0. El trabajo que el servidor está haciendo es muy simple:

    Cada producto en nuestro precio-comparador de una imagen (hay alrededor de 10 millones de productos de acuerdo a nuestro producto db), y los servidores trabajo es descargar la imagen, cambiar el tamaño, la tienda en gridfs, y se la entregará al navegador de los visitantes… si no está presente en la red… o… entregar a los visitantes del navegador si es que ya están almacenados en la red. Así, este podría ser llamado como «tradicional cdn esquema’.

    Tenemos almacenada y procesada de 4 millones de imágenes en este servidor ya está funcionando. El cambio de tamaño y almacenar cosas se hace por un simple script php… pero sin duda, una secuencia de comandos de python, o algo como java podría ser más rápido.

    Actual tamaño de los datos : 11.23 g

    De almacenamiento actual tamaño : 12,5 g

    Índices : 5

    Índice tamaño : 849.65 m

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

    Acerca de la velocidad : Por supuesto, no es rápido como los locales de almacenamiento de archivos, tal vez un 10% más lento, pero lo suficientemente rápido como para ser utilizado en tiempo real, incluso cuando la imagen tiene que ser procesada, que en nuestro caso, muy php dependientes. De mantenimiento y los tiempos de desarrollo también se han reducido: se hizo tan simples para eliminar una o varias imágenes : solo una consulta a la db con un simple comando eliminar. Otra cosa interesante : cuando nos reiniciar nuestro servidor antiguo, con los locales de almacenamiento de archivos (para millones de archivos en miles de carpetas), a veces se bloquea durante horas provocar que el sistema se realiza una comprobación de integridad de archivos (esto realmente tomó horas…). No tenemos este problema con gridfs, nuestras imágenes se almacenan ahora en gran mongodb en trozos (2 gb de archivos)

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

    • Yo estoy sorprendido de que nadie iba a usar raid 0 como almacenamiento principal en una producción del sitio web. Incluso con un buen copias de seguridad, el aumento de la probabilidad de un error de almacenamiento es de un muy alto precio a pagar para mejorar el rendimiento.
    • Usamos raid 0, porque en nuestro caso particular, los datos de imagen pueden ser volátiles. No importa si la imagen se pierde ya que vamos a descargar de nuevo el de los comerciantes web. Pragmáticamente, podríamos considerar que nuestro servidor es una imagen simple servidor de caché.
    • Pero está activamente el aumento de la probabilidad de fracaso (inicial de la unidad de fallo del factor multiplicado por el número de ejes). Raid 10 es ideal si usted necesita más escribe de lo que lee o Raid 5/6 si necesita más lecturas que escrituras.
    • ¿Por qué usas GridFS para almacenar las imágenes que más bien ser almacenada en un MongoDB documento? Supongo que no se alcance el 16 MB documento límite de tamaño. Y almacenamiento de la imagen como BLOB en un MongoDB documento sería más eficiente, ya que no necesita la GridFS capa en la parte superior de MongoDB documentos.
    • Tengo curiosidad acerca de @ArnaudBouchez pregunta. Estaba allí algunos de los beneficios que te hizo elegir GridFS simplemente guardarlo como datos binarios en un documento, Manu? Gracias!
  2. 12

    Como se ha mencionado, podría no ser tan rápido como un simple sistema de ficheros, pero luego se le da el hombre ventajas sobre ordinario de los sistemas de ficheros que creo que vale la pena dar un poco de velocidad para.

    En última instancia, con la fragmentación, se podría llegar a un punto sin embargo, en el GridFS de almacenamiento en realidad se convierte en la opción más rápida, como contraposición a un sistema de ficheros ordinarios y un único nodo.

  3. 5

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

    • de la pintura.ly ya no está disponible, parece. 🙁
  4. 5

    Heads-up en las reparaciones para las grandes DBs, aunque – un nuevo sistema que estamos desarrollando, mongo no salir de claridad, y la reparación de la 7TB GridFS parece que se va a tomar 130 hrs.

    Debido a esto, creo que voy a mirar de cambiar a OpenStack Swift o Ceph.
    Todavía, que hasta entonces era bueno. Y el nginx-gridfs módulo es dulce.

    • Entonces, ¿cómo ir?
  5. 2

    No recomiendo usar gridfs a menos que usted sepa lo que está haciendo.
    GridFS es sólo una capa de abstracción que divide archivos de trozos y almacena los archivos en dos colecciones. Más archivos – más gastos. Si usted espera que los archivos se bastante del mismo tamaño, que no exceda de 32M o usted está en el camino correcto.
    No intente almacenar archivos de gran tamaño en gridfs. Por qué?

    1. Los conductores en diferentes idiomas puede leer el archivo completo.(por ejemplo, fragmentos) cuando la lectura de una pequeña parte del archivo.
    2. De modificar el archivo puede afectar a todos los trozos y el aumento de la carga de base de datos
      Si su sistema de archivos está creciendo, usted tendrá que decidir fragmento de la gridfs. Cuidado! La consistencia no está garantizada cuando la fragmentación es inicializar!

    Si usted piensa acerca de leer cargado de proyecto considere la posibilidad de cargar los archivos en google docs directamente (si 16M o menor tamaño), o elegir otro clusterfs, y el enlace de nombre de archivo/inode a su lógica.

    Espero que esto ayude.

    • Soy bastante nuevo en GridFS aunque por lo que yo entiendo GridFS es más que una capa de abstracción que duplica el número de archivos. GridFS proporciona una manera sencilla de tomar ventaja de MongoDB duplicación y la fragmentación de las funciones. Creo que los demás también han mencionado que los archivos se almacenan en trozos de 2 gb que me imagino que reduciría el número total de archivos, especialmente si alguien tiene una cantidad muy grande de pequeñas imágenes.
    • +1 está a la derecha. Incluso los archivos más pequeños no beneficiaría a ser almacenados con GridFS. Si el archivo puede ser almacenada en un MongoDB documento (es decir, < sus 16 MB de límite de tamaño), prefiere guardar el archivo como un BLOB en un MongoDB documento. Se pasará por la sobrecarga de uso de GridFS en la parte superior de MongoDB almacenamiento. Consulte redactar.io/artículos/gridfs-y-mongodb-pros-y-contras

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea