为了清晰起见而更新:在插入/附加到capped collection
时,我需要有关性能的建议。我有两个运行的python脚本:
(1)拖尾光标。
while WSHandler.cursor.alive:
try:
doc = WSHandler.cursor.next()
self.render(doc)
(2)插入如下:
def on_data(self, data): #Tweepy
if (len(data) > 5):
data = json.loads(data)
coll.insert(data) #insert into mongodb
#print(coll.count())
#print(data)
它运行良好一段时间(每秒50次插入)。然后,在20-60秒后,它绊倒,击中cpu屋顶(虽然它之前以20%运行),并且永远不会恢复。我的mongostats潜水(潜水如下所示)。
Mongostat输出:
现在由执行插入的进程阻塞了CPU(至少根据htop
)。
当我使用print(data)
运行上面的Tweepy行而不是将其添加到db(coll.insert(data)
)时,所有内容都在15%cpu使用情况下正常运行。
我在mongostats中看到的内容:
res
继续攀登。 (虽然堵塞可能发生在40米处,也可能在100米处运行。)flushes
似乎没有干涉。locked %
稳定在0.1%。这会导致最终堵塞吗?(我正在运行AWS微实体; pymongo。)
答案 0 :(得分:1)
我建议在运行测试时使用mongostat。有很多事情可能是错的,但是mongostat会给你一个很好的指示。
http://docs.mongodb.org/manual/reference/mongostat/
我要看的前两件事是锁定百分比和数据吞吐量。凭借在专用机器上的合理吞吐量,我通常会在遭受任何降级之前达到每秒1000-2000次更新/插入。我曾与多家大型生产部门合作过。