Python 插入mongodb(pymongo)时的效率
为清晰起见进行了更新:在插入/附加到Python 插入mongodb(pymongo)时的效率,python,mongodb,performance,pymongo,database,Python,Mongodb,Performance,Pymongo,Database,为清晰起见进行了更新:在插入/附加到封顶集合时,我需要性能建议。我运行了两个python脚本: (1) 跟踪光标 while WSHandler.cursor.alive: try: doc = WSHandler.cursor.next() self.render(doc) (2) 这样插入: def on_data(self, data): #Tweepy if (len(da
封顶集合时,我需要性能建议。我运行了两个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%),再也无法恢复。我的猫鼬会跳水(跳水动作如下图所示)
Mongostat输出:
CPU现在被执行插入的进程阻塞(至少根据htop
)
当我使用print(data)
运行上面的两行代码时,而不是将其添加到db(coll.insert(data)
),在15%的cpu使用率下,一切都正常运行
我在mongostats看到的是:
res
不断攀升。(虽然障碍可能发生在40米处,也可能发生在100米处。)
刷新
似乎不会产生干扰
locked%
稳定在0.1%。这最终会导致堵塞吗
(我正在运行AWS microinstance;pymongo。)我建议在运行测试时使用mongostat。有很多事情可能是错误的,但mongostat会给你一个很好的指示
我要看的前两件事是锁百分比和数据吞吐量。在专用机器上具有合理的吞吐量时,我通常会在出现任何降级之前每秒更新/插入1000-2000次。我曾经使用过的几个大型生产部署就是这样。我建议在运行测试时使用mongostat。有很多事情可能是错误的,但mongostat会给你一个很好的指示
我要看的前两件事是锁百分比和数据吞吐量。在专用机器上具有合理的吞吐量时,我通常会在出现任何降级之前每秒更新/插入1000-2000次。我曾经使用过的几个大型生产部署就是这样。您在其他地方获得了什么样的性能?我从来没有听说过任何关于AWS micros性能的正面消息。没有在其他地方检查过,目前也没有这样做的能力。事实上,它大部分时间都运转良好,但时不时会堵塞——而当它堵塞时,就是给水管打水的时候了,没有别的事可做了/可能您的集合缺少索引。db.coll.stats()的输出是什么?它没有索引,因为它是一个有上限的集合(用于可定制的游标)。尽管我们已经有了答案,但我想在mongostat输出上进行扩展。1) res是驻留内存,在插入和查询时,它应该上升。我有一些实例以每秒%的速率与千兆字节同步运行,因此50%意味着db/集合被写锁定了500毫秒。db或集合锁定取决于mongo的版本。您在其他地方可以获得什么样的性能?我从来没有听说过任何关于AWS micros性能的正面消息。没有在其他地方检查过,目前也没有这样做的能力。事实上,它大部分时间都运转良好,但时不时会堵塞——而当它堵塞时,就是给水管打水的时候了,没有别的事可做了/可能您的集合缺少索引。db.coll.stats()的输出是什么?它没有索引,因为它是一个有上限的集合(用于可定制的游标)。尽管我们已经有了答案,但我想在mongostat输出上进行扩展。1) res是驻留内存,在插入和查询时,它应该上升。我有一些实例以每秒%的速率与千兆字节同步运行,因此50%意味着db/集合被写锁定了500毫秒。db或集合锁定取决于mongo的版本。谢谢,我添加了mongostats。令我惊讶的是,它似乎运行得相当平稳,但可能我没有读对它?有趣的是,插入峰值为180次插入/秒,然后回落到每秒15-20次插入-尽管在峰值期间几乎没有锁定。峰值吞吐量约为500k。我想知道是否真的是Tweepy以这样的吞吐量阻塞了CPU?而且,mongostats中的res
不断增加。可能是因为我碰到了“屋顶”,从而堵塞了启动?我把Tweepy换成了另一个客户-似乎已经解决了这个问题。谢谢,很高兴听到!我对python或那个特定的客户机不太了解,更不用说我当时正在睡觉=),所以我很高兴你能理解这一点。谢谢,我添加了mongostats。令我惊讶的是,它似乎运行得相当平稳,但可能我没有读对它?有趣的是,插入峰值为180次插入/秒,然后回落到每秒15-20次插入-尽管在峰值期间几乎没有锁定。峰值吞吐量约为500k。我想知道是否真的是Tweepy以这样的吞吐量阻塞了CPU?而且,mongostats中的res
不断增加。可能是因为我碰到了“屋顶”,从而堵塞了启动?我把Tweepy换成了另一个客户-似乎已经解决了这个问题。谢谢,很高兴听到!我对python或那个特定的客户机不太了解,更不用说我当时正在睡觉=),所以我很高兴您能够理解这一点。