Json 如何通过多处理将许多文档(1亿)插入到本地mongodb?
我成功地将许多JSON文件(仅选择键)插入到本地MongoDB。然而,当一个集合有略多于1亿行需要插入时,我的代码似乎太慢了。我希望多重处理将有助于加快这一过程,但我不能想出正确的方法来做到这一点,没有任何冲突。以下是我的代码,无需进行多重处理:Json 如何通过多处理将许多文档(1亿)插入到本地mongodb?,json,python-3.x,mongodb,multiprocessing,pymongo,Json,Python 3.x,Mongodb,Multiprocessing,Pymongo,我成功地将许多JSON文件(仅选择键)插入到本地MongoDB。然而,当一个集合有略多于1亿行需要插入时,我的代码似乎太慢了。我希望多重处理将有助于加快这一过程,但我不能想出正确的方法来做到这一点,没有任何冲突。以下是我的代码,无需进行多重处理: import json import os from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client[db_name] # get
import json
import os
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client[db_name]
# get file list
def log_list(log_folder):
log_file = list()
for entry in os.listdir(log_folder):
if os.path.isfile(os.path.join(log_folder, entry)):
log_path = os.path.join(log_folder, entry)
log_file.append(log_path)
return log_file
def func():
collection = db[collection_name]
print('loading folder_name')
root = folder_path
nfile = 0
nrow = 0
# insert data
files = log_list(root)
files.sort()
for file in files:
with open(file, 'r') as f:
nfile += 1
table = [json.loads(line) for line in f]
for row in table:
nrow += 1
entry = {'timestamp': row['@timestamp'], 'user_id': row['user']['id'], 'action': row['@type']}
collection.insert_one(entry).inserted_id
client.close()
print(nfile, 'file(s) processed.', nrow, 'row(s) loaded.')
我们在我们的项目中这样做,用户为一些任务上传很多文件,我们使用芹菜的分布式任务队列来处理它 由于这是一个类似的异步任务,“芹菜”在这里可以做得很好,所以它被设计为拾取任务,然后在单独的过程中执行
将文件拆分为多个文件。为文件的每个块运行一个程序副本。写入数据库时,使用而不是
插入一个
,以更有效地写入数据库
您可以使用Python来分叉多个并行作业