Mongodb Import非常慢,如何提高性能?

时间:2019-04-12 07:30:45

标签: python mongodb

我想知道如何改善Mongodb中数据的导入性能。我有17700个txt文件,要导入它们,我必须先将它们转换成字典,然后再将它们导入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 个答案:

答案 0 :(得分:0)

两种提高性能的方法。

  1. 使用insert_many批量插入记录(我建议分1000批)
  2. 通过并行运行程序的多个实例或使用multiprocessing来并行处理文件。

任何数据库都受单个插入上磁盘写入速度的限制,但是在将多个插入操作分批处理时非常有效。通过并行加载,可以使磁盘饱和。

简而言之,它将运行得更快。之后,您将使用多个磁盘驱动器和SSD将写入并行化。

使用MongoDB Atlas,您可以在数据加载期间调高IOPS速率(输入输出操作),然后将其调低。如果您在云中,则始终是一个选择。