我正在尝试使用DataFrame更新mongo中的一个集合,例如
df_dict = df[['id', 'name']].to_dict(orient='records')
我得到了下面的字典,例如
[{'name': 'vendor1', 'id': '1'}, {'name': 'vendor2', 'id': '2'}, {'name': 'vendor3', 'id': '3'}, {'name': 'vendor4', 'id': '4'}, {'name': 'vendor5', 'id': '5'}, {'name': 'vendor6', 'id': '6'}, ...]
df_dict包含大约390k字节,这意味着我需要更新集合中的390k文档。 我试图做的是根据多less线程/进程被分配进行更新,将390k字节分成块/批次。 对于每个批次,我使用以下函数来testing更新,
def update_database(update_dicts, table, database): for row_dict in update_dicts: database[table].update_one({'id': row_dict['id']}, {'$set': 'name': row_dict['name']}) def bulk_update_database(database, table, id_field, batch_documents, batch_size): bulk = database[table].initialize_ordered_bulk_op() for n in range(batch_size): bulk.find({id_field: batch_documents[n][id_field]}).update({'$set': {k: v for k, v in batch_documents[n].items() if k != id_field}}) bulk.execute()
当进行更新时,我将大量的字典传递给update_database函数,作为update_database的参数。
或者,我将大量的字典作为bulk_update_database的parameter passing给bulk_update_database函数。
testing结果显示,使用update_database ,用于更新mongo的总时间是非常低效的,花了我大约2.15小时,对于bulk_update_database ,花费的时间比update_database花费的时间长。
我想知道如何提高这个mongo更新的效率。