2012-06-25 48 views
14

En resumen: si tiene una gran cantidad de documentos con tamaños variables, donde relativamente pocos documentos alcanzan el tamaño máximo de objeto, ¿cuáles son las mejores prácticas para almacenar esos documentos en MongoDB?Almacenamiento de documentos muy grandes en MongoDB

He conjunto de documentos como:

{_id: ..., 
    values: [12, 13, 434, 5555 ...] 
} 

La longitud de la lista de valores varía enormemente de un documento a otro. Para la mayoría de los documentos, tendrá algunos elementos, para unos pocos tendrá decenas de millones de elementos, y alcanzaré el límite máximo de tamaño de objeto en MongoDB. El problema es que cualquier solución especial que se me ocurra para esos documentos muy grandes (y relativamente pocos) podría tener un impacto en cómo almaceno los pequeños documentos que, de lo contrario, vivirían felices en una colección de MongoDB.

Por lo que veo, tengo las siguientes opciones. Agradecería cualquier aporte sobre los pros y contras de esos, y cualquier otra opción que extrañara.

1) Use otro almacén de datos: Parece demasiado drástico. Me gusta MongoDB, y no es como si alcanzase el límite de tamaño para muchos objetos. En el caso de las palabras, mi aplicación podría tratar los objetos muy grandes y el resto de manera diferente. Simplemente no parece elegante.

2) Use GridFS para almacenar los valores: como un blob en una base de datos tradicional, podría guardar los primeros miles de elementos de valores en el documento y si hay más elementos en la lista, podría mantener el resto en una Objeto GridFS como un archivo binario. No podría buscar en esta parte, pero puedo vivir con eso.

3) Abuse GridFS: Podría guardar todos los documentos en gridFS. Para la mayoría de los documentos (pequeños), el fragmento binario estaría vacío porque la colección de archivos podría mantener todo. Por lo demás, podría conservar el exceso de elementos en la colección de trozos. ¿Eso introduce una sobrecarga en comparación con la opción n. ° 2?

4) Realmente abuse GridFS: podría usar los campos opcionales en la colección de archivos de GridFS para almacenar todos los elementos en los valores. ¿GridFS hace una agrupación inteligente también para la colección de archivos?

5) Use una colección "relacional" adicional para almacenar la relación de uno a varios, pero el número de documentos en esta colección excedería fácilmente cien mil millones de filas.

+0

¿Necesita consultar estos campos opcionales de alguna manera? – Thilo

+1

"¿GridFS también hace grupos inteligentes para la colección de archivos?". No. Los metadatos del archivo deben caber en un único documento BSON. – Thilo

+0

¿Qué tipo de atomicidad necesitas para las actualizaciones/inserciones? – Thilo

Respuesta

1

Si tiene documentos grandes, intente almacenar algunos metadatos sobre ellos en MongoDB y coloque el resto de los datos, la parte que no consultará, afuera.

Cuestiones relacionadas