#python #mongodb
#python #mongodb
Вопрос:
Мне было интересно, как я могу улучшить производительность импорта данных в Mongodb. У меня есть 17700 текстовых файлов, и для их импорта я должен сначала превратить их в словарь, а затем импортировать в Mongo, но использование цикла для процесса действительно слишком медленно, есть предложения? Спасибо, это мой код:
from bson.objectid import ObjectId
def txt_dict(x):
d = {}
with open(x,'r') as inf:
conta=0
for line in inf:
if (conta == 0):
movie_id = line.replace(":","")
conta = conta 1
else:
d['user_id'] = line.split(sep = ',')[0]
d['rating'] = int(line.split(sep = ',')[1])
d['date'] = line.split(sep = ',')[2]
d['_id'] = ObjectId()
d['movie_id'] = movie_id
collection.insert(d)
import os
directory =
r"/Users/lorenzofamiglini/Desktop/Data_Science/training_set"
for filename in os.listdir(directory):
if filename.endswith('.txt'):
txt_dict((directory "/" filename))
#print (str(directory "/" filename))
Комментарии:
1. Вы должны использовать массовую вставку для лучшего выполнения
Ответ №1:
Два способа повысить производительность.
- Используйте insert_many для массовой вставки записей (я рекомендую пакеты по 1000)
- Обрабатывайте файлы параллельно, либо параллельно запуская несколько экземпляров вашей программы, либо используя многопроцессорную обработку.
Любая база данных ограничена скоростью записи на диск при одной вставке, но очень эффективна при объединении нескольких операций вставки. Распараллеливая загрузку, вы можете насытить диск.
Короче говоря, он будет работать быстрее. После этого вы можете распараллеливать свои записи с несколькими дисководами и использовать SSD.
С MongoDB Atlas вы можете увеличить скорость ввода-вывода (операции ввода-вывода) во время загрузки данных и впоследствии уменьшить ее. Всегда есть вариант, если вы находитесь в облаке.