MongoDB:调用Count()与集合中的跟踪计数

And*_*rey 8 performance mongodb mongodb-.net-driver

我正在将我们的消息传递系统移动到MongoDB,并且很好奇对于各种统计数据采取什么方法,例如每个用户的消息数量等.在MS SQL数据库中,我有一个表,其中每个用户有不同的计数,并且它们通过触发器更新在相应的表上,所以我可以知道UserA有多少未读消息而没有调用昂贵的SELECT Count(*)操作.

countMongoDB中功能还贵?我开始阅读有关map/reduce的内容,但我的网站负载很高,所以统计数据必须实时更新,我的理解是map/reduce是耗时的操作.

收集MongoDB中各种聚合计数的最佳(性能方面)方法是什么?

Chr*_*tow 5

如果您有很多数据,那么我会坚持使用相同的方法,并在每次为用户添加新消息时使用一个类似的集合来增加一个聚合计数器:

计数

{
    userid: 123,
    messages: 10
}
Run Code Online (Sandbox Code Playgroud)

不幸的是(或幸运的是?)MongoDB中没有触发器,因此您需要从应用程序逻辑中增加计数器:

db.counts.update( { userid: 123 }, { $inc: { messages: 1 } } )
Run Code Online (Sandbox Code Playgroud)

这将为您提供最佳性能,并且您可能还会在该userid字段上添加索引以进行快速查找:

db.counts.ensureIndex( { userid: 1 } )
Run Code Online (Sandbox Code Playgroud)