Вставьте 271 миллион записей в MongoDB - PullRequest
1 голос
/ 24 октября 2019

У меня 271 миллион записей, построчно в текстовом файле, который мне нужно добавить в MongoDB, и я использую Python и Pymongo для этого.

Сначала я разбил один файлсодержит 271 миллион записей в нескольких файлах, содержащих каждый миллион строк, и записал текущий код для добавления его в базу данных:

import os
import threading
from pymongo import MongoClient


class UserDb:
    def __init__(self):
        self.client = MongoClient('localhost', 27017)
        self.data = self.client.large_data.data


threadlist = []

def start_add(listname):
    db = UserDb()
    with open(listname, "r") as r:
        for line in r:
            if line is None:
                return
            a = dict()
            a['no'] = line.strip()
            db.data.insert_one(a)
    print(listname, "Done!")


for x in os.listdir(os.getcwd()):
    if x.startswith('li'):
        t = threading.Thread(target=start_add, args=(x,))
        t.start()
        threadlist.append(t)

print("All threads started!")


for thread in threadlist:
    thread.join()

Это запускает столько потоков, сколько существует файлов, и добавляет каждую строкув БД, как он проходит через это. Плохо то, что через 3 часа было добавлено только 8.630.623.

Что я могу сделать, чтобы добавить записи быстрее?

Одна строка данных состоит всего из 8 цифр: (например, 12345678)

1 Ответ

0 голосов
/ 25 октября 2019

Вместо того, чтобы делать несколько insert_one с, взгляните на операторы массовой записи .

Поиграйте немного, чтобы увидеть, что работает лучше всего;Я нашел партии по 10000 работ для меня, но это зависит от оборудования.

...