我们正在尝试为我们的应用程序制作“实时”统计部分,并且我们想使用 MongoDB。
所以,要做到这一点,我基本上想象一个名为storage的数据库。在这个数据库中,我创建了一个统计信息集合。
我像这样存储我的数据:
{
"_id" : ObjectId("55642d270528055b171fedf5"),
"cat" : "module",
"name" : "Injector",
"ts_min" : ISODate("2015-05-22T13:16:00Z"),
"nb_action" : {
"0" : 156
},
"tps_action" : {
"0" : 45016
},
"min_tps" : 10,
"max_tps" : 879
}
所以,我有一个类别、一个名称和一个日期来确定一个唯一的对象。在这个对象中,我存储:
- 每秒使用次数(nb_action.[0..59])
- 每秒总时间(tps_action.[0..59])
- 最短时间
- 最长时间
现在,为了注入我的数据,我使用了 Upsert 方法:
db.statistics.update({
ts_min: ISODate("2015-05-22T13:16:00.000Z"),
name: "Injector",
cat: "module"
},
{
$inc: {"nb_action.0":1, "tps_action.0":250},
$min: {min_tps:250},
$max: {max_tps:250}
},
{ upsert: true })
所以,我执行 2$inc
来管理我的计数器并使用$min
和$max
管理我的统计数据。
所有这些工作...
1 个线程在一台机器(无分片)(10 个模块)上注入 50.000 个数据,我观察到每秒 3.000/3.500 个操作。
我的问题是……我不能说它好不好。
有什么建议么?
PS:我使用长名称字段作为示例,并添加一个 set 部分以在插入的情况下每秒初始化