2011-05-26 15 views
5

Estoy usando Mongo para almacenar, día a día, todos los "tics" de un conjunto de aproximadamente 40 acciones. Estos ticks contienen la información comercial (un documento que contiene el precio y el volumen) y la información del libro (un documento más complejo que contiene la propuesta sell-buy). El orden de magnitud es de aproximadamente 5K comercios + 20K libros * 40 capital por día. Los documentos se indexan tanto por el símbolo (el nombre de equidad) como la fecha de inserción, la hora del día. Después de una semana de recopilación, una de mis consultas ya no cambia de escala: la búsqueda de fechas distintas lleva demasiado tiempo. Así que decidí tener un documento especial solo para decir que hay una "colección" para un día determinado, ¿es este un enfoque correcto? Además, ¿es correcto recopilar cosas como un pequeño documento separado, o sería mejor recopilar ticks como una matriz en el documento de capital?pregunta de escala Mongo DB (¿los índices afectan el rendimiento 'distinto')?

¡Gracias a todos!

Por cierto esta pregunta es una consecuencia de ésta: Using mongodb for store intraday equity data

Adición: incluso si yo digo explícitamente (en la consola)

db.books.ensureIndex({dateTag:1}) 
db.books.distinct("dateTag") 

en él responda lentamente. Entonces, quizás una pregunta mejor es: ¿afecta el índice al rendimiento de distinct?

Adición Después de actualizar a 1.8.2 el comportamiento es el mismo.

+1

¿Qué versión de MongoDB? –

+0

@Sentinel 1.6.5 –

Respuesta

2

Cómo afecta el rendimiento índice de distinta?

De hecho, sin embargo, no hay un "plan de explicación", por lo que esto solo se puede confirmar mediante el documento/código.

documento están indexados tanto por símbolo (el nombre de la equidad) Fecha de inserción, día timeof

No estoy 100% claro de la cantidad de índices que tiene o qué tipo de huella de memoria que tiene aquí. El simple hecho de tener un índice no necesariamente significa que va a ser realmente rápido. Si ese índice no está en la memoria, terminas yendo al disco y ralentizando tu consulta.

Si usted está viendo rendimiento lento en esta consulta a pesar de que el índice Me gustaría comprobar dos cosas:

  • actividad de disco (durante la consulta) tamaño
  • Los datos relativos a la memoria

Sin embargo, puede ser más fácil mantener una lista de "días almacenados". Esa consulta distinta probablemente empeorará, incluso con un índice. Por lo tanto, nunca va a ser tan rápido como un documento simplemente enumerando los días.

+0

eventualmente utilicé el documento de días almacenados. La actividad DB es de todos modos alta ya que estoy haciendo la consulta mientras ingresan datos nuevos. De todos modos, como supongo que tienes el día almacenado, resuelve el problema. –

1

No creo que su enfoque de "recopilación para un día determinado" funcionaría porque se encontraría con el límite de MongoDb de 24,000 espacios de nombres por base de datos. Almacenar los ticks en una propiedad de matriz de un documento podría dificultar la ejecución de ciertos tipos de consulta (realmente depende de qué tipo de informes necesite ejecutar en los ticks).

¿Está seguro de que tiene índices establecidos para las propiedades que utiliza en su consulta problemática? Como último recurso, podrías intentar combinar pero dudo que eso sea necesario en este momento.

+0

la colección es en realidad solo dos: comercios y libros. ambos contienen mucho documento. ¿Debería preocuparme por los espacios de nombres una vez? La consulta que ya no se escala es una que selecciona la colección distinta en el libro para la fecha del campo, incluso si está indexada. –

+0

Solo tendría que preocuparse por el límite del espacio de nombres si tuviera que usar una colección separada para cada día de datos comerciales. ¿Verificaste si ese índice se está usando realmente para esa consulta? Si no sabe cómo sugiero leer http://www.mongodb.org/display/DOCS/Optimization#Optimization-Explain. –

+0

+ 1, Tnx, actualicé bien la pregunta –

Cuestiones relacionadas