Jestem nowy w Mongo i Pymongo i mam dużą ilość danych około 5 milionów dokumentów do wstawienia, używam IJSON, aby przeczytać w danych z pliku JSON i przechowywać go, który zajmuje tylko kilka sekund, aby wykonać wygląd kodu lubię to:

from pymongo import MongoClient
client = MongoClient('localhost', 27017,w=0)
db = client['emp']
emp_colelction = db['EmpDetails']
.
.(skip over reading in data from the JSON file)
.
emp_data = [
      {
        "EmpId": "1",
        "FirstName": "Bob",
        "LastName": "Builder",
        "EmpType": "FullTime",
        "HireDate": "2010-08-17"
        "Hobbys":["baseball", "Basketball", "Netflix", "writing", "Programing"]
       },
       {
        "EmpId": "2",
        "FirstName": "Peter",
        "LastName": "Griffin",
        "EmpType": "PartTime",
        "HireDate": "2019-05-23"
        "Hobbys":["vollyball", "Basketball", "Hulu", "Reading", "Learning"]
       }
]

track_insert_time = time.time()

emp_colelction.insert_many(emp_data, ordered=False) 

print("Insertion time: %s"%(time.time()-track_insert_time))

track_index_time = time.time()

emp_collection.create_index(["EmpId", 1])  
  
print("Create index time: %s"%(time.time()-track_index_time)

Pole "Hobbys" może być listą dowolnej liczby elementów, które niektóre są powyżej 300 elementów.

Już używam edycji wspólnotowej Mongodb na moim MacBook Pro 13 cali 2,3 GHz Dual-Core Intel Core I5, 8 GB 2133 MHz LPDDR3 Timasy na moim komputerze są następujące: Czas wstawiania: ~ 90 sekund Utwórz czas indeksu: ~ 110 sekundy

Wygląda na to, że wstawianie jest bardzo powolny, ponieważ Python wkłada jeden dokument i czeka na odpowiedź MongoDB przed włożeniem następnego. Nadal jestem noobem w Pythonie, aby napisać multithreading program.

Jakieś pomysły? Myślałem, że może wstawię kawałki danych na raz, zamiast próbować wstawić wszystko na raz

0
water_bottle 23 listopad 2020, 00:26

1 odpowiedź

Najlepsza odpowiedź

Wstawienia przez Bulk pisze (który wydaje się już używać) być dość wydajnym.

Przegląd CPU i Disk Użyj na serwerze - jeśli serwer ma dostępny procesor, ale klient jest ograniczony procesorem, przy użyciu wielu klientów zwiększyłoby przepustowość. Jest to mało prawdopodobne, aby był to przypadek prostych wkładek.

Jeden zastrzeżenie z masowymi pisze jest sterownik automatycznie dzieli je, aby pasowały do limitów serwerów (16 MB dokumentów, 48 MB komunikatów poleceń). Jeśli próbujesz obniżyć napisać naprawdę duże tablice, możesz uzyskać lepszą wydajność, jeśli wstawisz 1000 lub 5000 dokumentów na raz.

0
D. SM 26 listopad 2020, 22:45