¿El fragmentación es efectivo para colecciones pequeñas?

11

Parece que el fragmentación de la base de datos es excelente si tengo grandes colecciones. ¿Qué pasa si tengo muchas colecciones de tamaño considerable? Digamos que para 1 colección de 100 000 000 de documentos (comentarios no muy grandes) el fragmentación es efectivo. ¿También es efectivo para 10 000 colecciones con 10 000 documentos cada una?

(Creo que esta pregunta sigue siendo válida para bases de datos orientadas a tablas si reemplaza colecciones con tablas y documentos con filas. Si es posible, me gustaría saber la respuesta teórica, así como la respuesta en el escenario específico de MongoDB, si es diferente de la teórica responder.)

João Pinto Jerónimo
fuente

Respuestas:

5

¿También es efectivo para 10 000 colecciones con 10 000 documentos cada una?

La mayoría de las personas tiene el problema de la "colección grande única", por lo que el fragmentación es claramente útil para reducir los dolores de cabeza de equilibrar estos datos.

Sin embargo, cuando tiene 10.000 colecciones pequeñas, su dolor de cabeza probablemente no esté "equilibrando los datos". Con tantas colecciones pequeñas, es probable que su problema sea rastrear estas colecciones. Dependiendo del tamaño de su documento, es posible que ni siquiera rompa el límite inferior para que ocurra el fragmentación.

Para las colecciones realmente pequeñas, puede usar el comando movePrimary poco conocido para administrar la ubicación de sus datos.

Por supuesto, la otra forma de ver esto es ¿por qué tienes 10k colecciones? Una colección no necesita objetos homogéneos y con 10k colecciones, la mayoría de ellas tienen que ser generadas. Es bastante posible almacenar diferentes "tipos" de datos en la misma colección, reducir el número de colecciones y luego incluir el tipo como parte de la clave de fragmento.

Vicepresidente de Gates
fuente
Gracias, estaba tratando exactamente de saber si lo mejor que podía hacer es deshacerme de estas toneladas de colecciones y hacer una grande. Tuve toneladas de colecciones antes porque escuché una creencia común: "Las colecciones enormes son malas para ti porque los índices no caben en la RAM y será muy lento consultarlos y actualizarlos". Pero supongo que se crearon fragmentos para resolver ese problema ... ¡Gracias!
João Pinto Jerónimo
Honestamente, creo que a menudo también puedes "engañar" en los índices. Si tiene dos colecciones fooy barcon la misma estructura de datos, puede combinarlos en la bazrecogida y anular el _ids(en código): { _id: "foo123" }, { _id: "bar123" }. Tiene un índice más grande, pero solo tiene un índice que incluye el tipo. No es un requisito, solo "alimento para el pensamiento".
Gates VP
4

El fragmentación de MongoDB funciona al dividir una colección en "fragmentos" más pequeños y distribuirlos uniformemente en varias máquinas. El tamaño de fragmento predeterminado, que generalmente es el más eficiente, es de 200 MB. Entonces, a menos que una colección crezca mucho más de 200 MB, no se dividirá en trozos y, por lo tanto, no será elegible para fragmentación, por lo que no habrá beneficios.

En el caso general, compartir datos en varias máquinas es una forma muy efectiva de escalar lecturas, escrituras y consultas. Obtiene los beneficios de múltiples CPU, discos duros y almacenamiento de memoria, trabajando en paralelo para leer, escribir y procesar datos. Escalar la memoria es particularmente importante para MongoDB, donde el alto rendimiento es muy sensible al ajuste de datos en la memoria.

Chris Fulstow
fuente
El tamaño de fragmento predeterminado para su información es de 64 MB a partir de 1.8.
Gates VP