2011-12-22 11 views
8

Busco una herramienta para obtener una estimación decente de lo grande que un índice MongoDB se basa en unos pocos señales como:¿Hay alguna herramienta para estimar el tamaño del índice en MongoDB?

  • Cuántos documentos en mi colección
  • El tamaño del campo indexado (s)
  • el tamaño de _ID que estoy usando, si no oBJECTID
  • Geo/no geo

alguien ha tropezado con algo como esto? Me imagino que sería extremadamente útil dada la degradación del rendimiento de Mongo una vez que llega al muro de la memoria y los documentos comienzan a ser enviados al disco. Si tengo una base de datos en funcionamiento y deseo agregar otro índice, la única forma en que sabré si será demasiado grande es realmente agregarlo.

No necesitaría ser preciso hasta el último momento, pero con algunas suposiciones sobre B-Trees y la implementación del índice estoy seguro de que podría ser lo suficientemente razonable como para ser útil.

Si esto no existe, me gustaría construir y abrir el código fuente, por lo que si he omitido los parámetros necesarios para este cálculo, inclúyalo en su respuesta.

+0

Puede valer la pena hacer coincidir su herramienta (para llenar el vacío en el ínterin) con una solicitud de una herramienta incorporada del equipo de MongoDB. –

+0

¿De hecho terminaste escribiendo una herramienta para esto? – Stennie

+0

Lo hice, sin embargo, los resultados fueron menos que satisfactorios. Cuando se probó con datos reales con índices existentes para la comparación, mi herramienta predecía que los tamaños del índice serían un poco menos del doble de los tamaños reales. Estoy investigando si esto es un error en mi código o si la fórmula es * muy * áspera. Se actualizará aquí cuando sepa más. – jpredham

Respuesta

21

acabo de hablar con algunos de los ingenieros 10gen y no hay una herramienta pero se puede hacer una copia del cálculo sobre que se basa en la siguiente fórmula:

2 * [n * (18 bytes de cabecera + tamaño medio del campo indexado + 5 o más bytes del factor de conversión de contenido de chocolate)]

Donde n es la cantidad de documentos que tiene.

El relleno superior y de conversión son mongo específicos, pero el 2x proviene de la estructura de datos b-tree que está aproximadamente medio llena (pero ha asignado el 100% del espacio que un árbol completo requeriría) en el peor de los casos.

Explicaría más pero estoy aprendiendo sobre esto por el momento. Esta presentación tendrá más detalles: http://www.10gen.com/presentations/mongosp-2011/mongodb-internals

+3

Él puede crear una calculadora en línea, entonces :-) –

+1

esto es realmente genial gracias – jpredham

+0

Lo sentimos, necesitamos volver a abrir esta pregunta. Al calcular el tamaño promedio del campo a partir de una cantidad representativa de documentos y al insertarlo en la ecuación enumerada, obtengo tamaños de índice aproximadamente el doble del valor real. La teoría tiene sentido para mí aquí, pero en la práctica, en función de lo que el caparazón de mongo informe de todos modos, esto no es correcto. – jpredham

1

Otra forma de calcular es ingerir ~ 1000 o más documentos en cada colección, en otras palabras, construya un modelo a pequeña escala de lo que va a terminar en producción, cree índices o lo que tenga y calcule los números finales según el promedio de db.collection.stats().

¿Tiene esto sentido? :)

Cuestiones relacionadas