MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Pymongo đa xử lý

Mã của bạn tạo một MongoClient mới cho mỗi triệu tài liệu trong ví dụ của bạn (giống như câu hỏi bạn đã liên kết đến). Điều này yêu cầu bạn mở một ổ cắm mới cho mỗi truy vấn mới. Điều này đánh bại tính năng tổng hợp kết nối của PyMongo và ngoài việc cực kỳ chậm, nó cũng có nghĩa là bạn mở và đóng các ổ cắm nhanh hơn mức ngăn xếp TCP của bạn có thể theo kịp:bạn để quá nhiều ổ cắm ở trạng thái TIME_WAIT nên cuối cùng bạn sẽ hết cổng.

Bạn có thể tạo ít máy khách hơn và do đó mở ít ổ cắm hơn, nếu bạn chèn số lượng lớn tài liệu với mỗi máy khách:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. union trên cùng một bộ sưu tập trong mongodb

  2. MongoDB $ bsonSize

  3. Sử dụng lệnh shell MongoDB trên trình điều khiển của MongoDB 10Gen

  4. tập hợp con truy vấn mongodb của một mảng

  5. Cách phù hợp để xử lý các kết nối Mongodb là gì?