1

すべての挿入で接続を再初期化する必要がありますか?

class TwitterStream:
  def __init__(self, timeout=False):
  while True:
    dump_data()

  def dump_data:
    ##dump my data into mongodb    
    ##should I be doing this every time??:
    client=MongoClient()
    mongo=MongoClient('localhost',27017)
    db=mongo.test
    db.insert('some stuff':'other stuff')
    ##dump data and close connection
    #########################

レコードを書き込むたびに接続を開く必要がありますか? または、毎回約 10kb のデータを毎秒 5 回データベースに書き込むと仮定して、接続を開いたままにできますか?

接続が 1 つだけで十分な場合、接続を保持する変数 ( clientmongodb) をどこで定義すればよいでしょうか?

4

2 に答える 2

0

接続を開くことは一般に高価な操作であるため、可能な限り再利用することをお勧めします。

MongoClient の場合、接続を開いたままにして再利用し続けることができるはずです。ただし、接続が長時間続くと、最終的に接続の問題が発生し始めます。これに対する推奨される解決策は、自動再接続を使用するように MongoClient を構成し、再試行メカニズムの一部として AutoReconnect 例外をキャッチすることです。

これは、 http://python.dzone.com/articles/save-monkey-reliably-writingから取られた上記のアプローチの例です:

while True:
    time.sleep(1)
    data = {
        'time': datetime.datetime.utcnow(),
        'oxygen': random.random()
    }

    # Try for five minutes to recover from a failed primary
    for i in range(60):
        try:
            mabel_db.breaths.insert(data, safe=True)
            print 'wrote'
            break # Exit the retry loop
        except pymongo.errors.AutoReconnect, e:
            print 'Warning', e
            time.sleep(5)
于 2013-07-13T01:39:00.767 に答える