插入mongodb(pymongo)时的效率

时间:2012-10-02 21:55:11

标签: python mongodb performance pymongo database

为了清晰起见而更新:在插入/附加到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输出: Mongostat output

现在由执行插入的进程阻塞了CPU(至少根据htop)。

当我使用print(data)运行上面的Tweepy行而不是将其添加到db(coll.insert(data))时,所有内容都在15%cpu使用情况下正常运行。

我在mongostats中看到的内容:

  • res继续攀登。 (虽然堵塞可能发生在40米处,也可能在100米处运行。)
  • flushes似乎没有干涉。
  • locked %稳定在0.1%。这会导致最终堵塞吗?

(我正在运行AWS微实体; pymongo。)

1 个答案:

答案 0 :(得分:1)

我建议在运行测试时使用mongostat。有很多事情可能是错的,但是mongostat会给你一个很好的指示。

http://docs.mongodb.org/manual/reference/mongostat/

我要看的前两件事是锁定百分比和数据吞吐量。凭借在专用机器上的合理吞吐量,我通常会在遭受任何降级之前达到每秒1000-2000次更新/插入。我曾与多家大型生产部门合作过。