我们有一个从几个(3)UDP服务器提供的集合,它们获取一个条目并将其放入mongodb。
我已经开始检查mongodb上的个人资料并且见证了一段时间(大部分时间都很好)我得到高(~5000)插入。
在nodejs上的另一个组件的Cronjob中有一些MapReduce操作。
我可以注意到同时有很多(50~)插入操作。
该集合上有2个索引,每隔几秒就删除大部分文档,因此不能超过50个。集合没有上限。
MongoDB版本是2.4.6
这会导致什么? 可以在不同集合上同时运行的MapReduce是什么原因?
{
"allUsers": [],
"client": "127.0.0.1",
"keyUpdates": 0,
"lockStats": {
"timeAcquiringMicros": {
"r": 0,
"w": 10
},
"timeLockedMicros": {
"r": 0,
"w": 45
}
},
"millis": 9527,
"ninserted": 1,
"ns": "dbname.hits",
"numYield": 0,
"op": "insert",
"ts": {
"$date": 1418186296785
},
"user": ""
},
{
"allUsers": [],
"client": "127.0.0.1",
"keyUpdates": 0,
"lockStats": {
"timeAcquiringMicros": {
"r": 0,
"w": 8
},
"timeLockedMicros": {
"r": 0,
"w": 35
}
},
"millis": 9396,
"ninserted": 1,
"ns": "dbname.hits",
"numYield": 0,
"op": "insert",
"ts": {
"$date": 1418186296785
},
"user": ""
},
{
"allUsers": [],
"client": "127.0.0.1",
"keyUpdates": 0,
"lockStats": {
"timeAcquiringMicros": {
"r": 0,
"w": 6
},
"timeLockedMicros": {
"r": 0,
"w": 29
}
},
"millis": 9257,
"ninserted": 1,
"ns": "dbname.hits",
"numYield": 0,
"op": "insert",
"ts": {
"$date": 1418186296785
},
"user": ""
},
{
"allUsers": [],
"client": "127.0.0.1",
"keyUpdates": 0,
"lockStats": {
"timeAcquiringMicros": {
"r": 0,
"w": 7
},
"timeLockedMicros": {
"r": 0,
"w": 65
}
},
"millis": 8768,
"ninserted": 1,
"ns": "dbname.hits",
"numYield": 0,
"op": "insert",
"ts": {
"$date": 1418186296785
},
"user": ""
},
{
"allUsers": [],
"client": "127.0.0.1",
"keyUpdates": 0,
"lockStats": {
"timeAcquiringMicros": {
"r": 0,
"w": 22
},
"timeLockedMicros": {
"r": 0,
"w": 62
}
},
"millis": 8566,
"ninserted": 1,
"ns": "dbname.hits",
"numYield": 0,
"op": "insert",
"ts": {
"$date": 1418186296786
},
"user": ""
},
...
更新1:
我想解决的问题是:
我们从一些服务器获得点击以存在几个数据流的匹配,我需要将它们聚合到[begin,end]元组,如果它们之间有MAX_DIFF的差异。 例如:
{name:A, time:0, stream:A_1}
{name:A, time:7, stream:A_1}
{name:A, time:15, stream:A_1}
{name:A, time:26, stream:A_1}
MAX_DIFF= 10
我将汇总到另一个集合:
{name:A, stream:A_1, time_begin:0, time_end:15}
{name:A, stream:A_1, time_begin:26, time_end:26}
更新2: 在对配置文件进行一些检查后,似乎Map Reduce是罪魁祸首,在最后阶段使用它的全局写锁定。 map reduce concurrency MR给整个网站做了一些操作,这需要花费很多时间。
答案 0 :(得分:2)
这里有很多可能的问题 - 这些是我看到的主要问题:
MongoDB在写入期间锁定整个数据库。如此多的写入数据库将在大多数情况下被锁定。您对写作使用哪种写作问题?
常量删除。不断删除数据通常是个坏主意。您是否可以重新建模数据以避免不断删除?索引只有50个文档,浪费时间。
存储。你没有提到你正在使用什么样的存储,但MongoDB真的很喜欢SSd&#39>
2.6比2.4大改进所以你应该真正考虑升级。
您没有提到您尝试解决的问题类型,但是如果数据被删除且插入速率相同,那么数据库可能不是最适合您的问题。