我试图将大型HDF5文件写入MongoDB。我按照本教程中的示例进行操作:http://api.mongodb.org/python/current/examples/bulk.html。我有一个生成器循环遍历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['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在内存中缓冲这些数据,并等待将其写入数据库。有没有办法可以限制这个缓冲区的大小而不是让它无法控制地增长?奇怪的是,默认设置会导致我的RAM耗尽,这很奇怪。
答案 0 :(得分:0)
PyMongo 旨在以您想要的方式工作:它迭代您的生成器,直到它有一批数据(16或32MB,具体取决于MongoDB版本)。 Someone contributed this ability to PyMongo last year。您使用的MongoDB和PyMongo版本是什么?