2011-12-15 38 views
9

Estoy creando un sistema de blogging mongodb/nodejs (similar a wordpress).Almacenar archivos en disco o MongoDB

Actualmente tengo las imágenes guardadas en el disco y un puntero colocado en mongo. Me preguntaba, dado que tengo todas las sesiones almacenadas en MongoDB para permitir un balanceo de carga fácil en todos los servidores, el almacenamiento de los archivos reales en Mongo también sería una idea inteligente para configuraciones fáciles de multiservidor y/o mejoras de rendimiento.

Si todo se almacena en una base de datos, sólo tiene que generar más servidores web y/o repeticiones mongo a escalar horizontalmente

opiniones?

Respuesta

10

MongoDB es una buena opción para almacenar sus archivos (Estoy hablando de GridFS), especialmente para el caso de uso usted describió arriba Cuando almacena archivos en MongoDB (GridFS, no documentos), obtiene toda la capacidad de replicación y fragmentación de forma gratuita, lo cual es increíble.

Si tiene que generar un nuevo servidor y ya tiene los archivos en MongoDB, todo lo que tiene que hacer es habilitar la replicación (por lo tanto, escalar horizontalmente). Estoy seguro de que esto puede ahorrarte muchos dolores de cabeza.

Recursos:

Is GridFS fast and reliable enough for production?
http://www.mongodb.org/display/DOCS/GridFS
http://www.coffeepowered.net/2010/02/17/serving-files-out-of-gridfs/

2

Almacenar la imagen como documento en mongodb sería una mala idea, ya que los recursos que podrían haberse utilizado para enviar una gran cantidad de datos informativos se usarían para enviar archivos.

Eche un vistazo al almacenamiento de archivos mongoDb GridFS, que podría resolver su problema de almacenamiento de imágenes, y proporcionar escalabilidad horizontal también.

http://www.mongodb.org/display/DOCS/GridFS http://www.mongodb.org/display/DOCS/GridFS+Specification

4

Aparte de GridFS, usted podría estar considerando una distribución basada en la nube. En ese caso, podría considerar almacenar archivos en el almacenamiento específico de la nube (Windows Azure tiene Blob Storage, por ejemplo). Siguiendo con Windows Azure en este ejemplo (ya que es con lo que trabajo), haría referencia a un archivo por su URI de cuenta de almacenamiento. Por ejemplo:

https://mystorageacct.blob.core.windows.net/mycontainer/myvideo.wmv 

Desde que estaría almacenando la base de datos MongoDB sí mismo en su propia burbuja (y ha montado como volumen de disco en su máquina virtual Linux o Windows), entonces puede optar por almacenar sus archivos, ya sea en el mismo cuenta de almacenamiento o una cuenta de almacenamiento completamente diferente (con cada cuenta de almacenamiento que proporciona 100TB 200TB de almacenamiento).

Cuestiones relacionadas