MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Multiprosesor Pymongo

Kode Anda membuat MongoClient baru untuk masing-masing dari jutaan dokumen dalam contoh Anda (seperti pertanyaan yang Anda tautkan). Ini mengharuskan Anda untuk membuka soket baru untuk setiap kueri baru. Ini mengalahkan penyatuan koneksi PyMongo, dan selain menjadi sangat lambat, ini juga berarti Anda membuka dan menutup soket lebih cepat daripada yang dapat dipertahankan oleh tumpukan TCP:Anda meninggalkan terlalu banyak soket dalam status TIME_WAIT sehingga Anda akhirnya kehabisan port.

Anda dapat membuat lebih sedikit klien, dan karenanya membuka lebih sedikit soket, jika Anda memasukkan sejumlah besar dokumen dengan setiap klien:

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. MGO :Tidak dapat mengkanonikalisasi kueri:BadValue operator tidak dikenal:$meta

  2. Beralih antara produksi Mongo dan basis data pengujian - Java Spring Boot

  3. Perbarui array bersarang di Meteor

  4. Bagaimana Mencegah Rollback di MongoDB

  5. Mengapa sisipan lambat di shell 2.6 MongoDB dibandingkan dengan versi sebelumnya?