2011-05-19 23 views
7

estoy moviendo nuestro sistema de mensajería a MongoDB y siento curiosidad qué postura tomar con respecto a diversas estadísticas, como el número de mensajes por usuario, etc. En la base de datos MS SQL tengo una mesa en la que tengo diferentes cuentas por el usuario y que se actualizan por el gatillo de tablas correspondientes, por lo que puede, por ejemplo, saber cuántos mensajes no leídos usuario a tiene sin llamar a una costosa operación SELECT Count(*).MongoDB: Llamada Count() vs recuentos de seguimiento en una colección

Es count función en MongoDB también es caro? empecé a leer sobre el mapa/reducir, pero mi sitio es alta carga, por lo que las estadísticas tienen que actualizarse en tiempo real, y mi opinión es que map/reduce el tiempo de operación está consumiendo.

¿Cuál sería el mejor enfoque (en cuanto al rendimiento) en la recopilación de diversos recuentos totales en MongoDB?

Respuesta

4

Si usted tiene una gran cantidad de datos, entonces me quedo con el mismo enfoque y el incremento de un contador de agregados cada vez que se añade un nuevo mensaje para un usuario, utilizando una colección algo como esto:

que cuenta

{ 
    userid: 123, 
    messages: 10 
} 

Por desgracia (? o afortunadamente) no hay disparadores en MongoDB, así que será incrementar el contador de su lógica de aplicación:

db.counts.update({ userid: 123 }, { $inc: { messages: 1 } }) 

Esto le va a dar el mejor rendimiento, y lo que probablemente también poner un índice en el campo userid para búsquedas rápidas:

db.counts.ensureIndex({ userid: 1 }) 
4

mongodb buen ajuste para la denormaliztion datos. Y si su sitio tiene mucha carga, entonces necesita precalcular casi todo, así que use $inc para incrementar el conteo de mensajes, sin duda.

Cuestiones relacionadas