1

わかりやすくするために更新:に挿入/追加するときのパフォーマンスについてアドバイスが必要capped collectionです。2 つの 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% で実行されていましたが)、回復することはありません。私のモンゴスタットはダイブします (ダイブは以下に示されています)。

モンゴスタットの出力: モンゴスタット出力

CPU は、挿入を行うプロセスによって (少なくとも に従ってhtop) チョークされます。

上記の Tweepy 行print(data)を db ( coll.insert(data)) に追加する代わりに実行すると、15% の CPU 使用率ですべてが正常に実行されます。

mongostats に表示される内容:

  • res登り続けます。(ただし、100m で問題なく走るだけでなく、40m で詰まりが発生する場合もあります。)
  • flushes干渉しないようです。
  • locked %0.1%で安定しています。これは最終的に目詰まりにつながりますか?

(AWS マイクロインスタンス (pymongo) を実行しています。)

4

1 に答える 1

1

テストの実行中にmongostatを使用することをお勧めします。間違っている可能性があることはたくさんありますが、mongostat は適切な兆候を示します。

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

最初に確認する 2 つのことは、ロックの割合とデータ スループットです。専用マシンで適度なスループットを使用すると、通常、パフォーマンスが低下する前に、1 秒あたり 1000 ~ 2000 回の更新/挿入を実行できます。これは、私が取り組んできたいくつかの大規模な本番環境の展開に当てはまります。

于 2012-10-03T01:22:22.583 に答える