У меня 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)