sql >> データベース >  >> NoSQL >> MongoDB

Pymongoマルチプロセッシング

    コードは、例の100万のドキュメントごとに新しいMongoClientを作成します(リンクした質問と同じように)。これには、新しいクエリごとに新しいソケットを開く必要があります。これにより、PyMongoの接続プールが無効になります。また、非常に遅いだけでなく、TCPスタックが維持できるよりも速くソケットを開閉できることも意味します。つまり、TIME_WAIT状態のソケットが多すぎるため、最終的にポートが不足します。

    各クライアントで多数のドキュメントを挿入する場合、作成できるクライアントの数が少なくなるため、開くソケットの数も少なくなります。

    import multiprocessing as mp
    import time
    from pymongo import MongoClient
    
    documents = [{"a number": i} for i in range(1000000)]
    
    def insert_doc(chunk):
        client = MongoClient()
        db = client.mydb
        col = db.mycol
        col.insert_many(chunk)
    
    chunk_size = 10000
    
    def chunks(sequence):
        # Chunks of 1000 documents at a time.
        for j in range(0, len(sequence), chunk_size):
            yield sequence[j:j + chunk_size]
    
    time2s = time.time()
    pool = mp.Pool(processes=16)
    pool.map(insert_doc, chunks(documents))
    pool.close()
    pool.join()
    time2f = time.time()
    print(time2f - time2s)
    



    1. 条件に基づいてMongoDBAggregationに値が増加するフィールドを追加します

    2. Composerを使用してsymfony2にmongodbドクトリンをインストールできません

    3. タイプのプロパティが見つかりません...MongoDBおよびSpring-DataでQueryDslPredicateExecutorを使用する場合

    4. フラスコでの凝集-mongoengine