Python PyMongo批量插入内存不足
我正在尝试将一个大的HDF5文件写入MongoDB。我将遵循本教程中的示例:。我有一个生成器,它循环遍历HDF文件的每一行并生成一个字典:Python PyMongo批量插入内存不足,python,mongodb,pymongo,Python,Mongodb,Pymongo,我正在尝试将一个大的HDF5文件写入MongoDB。我将遵循本教程中的示例:。我有一个生成器,它循环遍历HDF文件的每一行并生成一个字典: def gen(): for file in files: data = load_file(file) for row in data: ob = dict() ob['a'] = int(row['a']) ob['b'] = int(row
def gen():
for file in files:
data = load_file(file)
for row in data:
ob = dict()
ob['a'] = int(row['a'])
ob['b'] = int(row['b'])
ob['c'] = int(row['c'])
ob['d'] = row['d'].tolist()
ob['e'] = row['e'].tolist()
ob['f'] = row['f'].tolist()
ob['g'] = row['g'].tolist()
yield ob
def main():
data = gen()
db = pymongo.MongoClient().data_db
db.data.insert(data)
这很好,但随着时间的推移,Python进程会占用越来越多的RAM,直到达到10GB,并可能耗尽所有内存。我认为PyMongo正在内存中缓冲这些数据,并等待将其写入数据库。有没有办法限制缓冲区的大小,而不是让它无法控制地增长?奇怪的是,默认设置会导致我的内存不足。PyMongo被设计为按照您想要的方式工作:它迭代您的生成器,直到它拥有一批数据(16或32MB,取决于MongoDB版本)。您使用的是什么MongoDB和PyMongo版本?您看到什么Poces正在使用所有内存吗?MongoDB将要求操作系统允许的内存量;考虑到一个操作系统在填充RAM并需要分页新数据之前不会“重用”RAM,这可能只是操作系统的正常工作方式。至于控制MongoDB(这并不推荐),你可以使用ulimit:@Sammaye,它是使用内存的python(6.9GB)和mongod(3.1GB)。我有一个16GB的系统。奇怪的是,python应该有很好的内存。我对python内部的了解还不足以告诉你答案,我自己还在学习,对不起。