我正在尝试在django模型中保存大约15-20亿条目,我正在使用postgresql。我尝试使用django bulk_create,但我的计算机卡住了近45分钟,然后我现在关闭了代码。我的问题是,如何以正确的方式做到这一点?
答案 0 :(得分:1)
匿名对于转储文件是从数据库加载数据到数据库的最佳方式是正确的。
如果您无权访问数据库以创建转储文件,那么它可能会更难,因此使其工作的python方法是批量bulk_create
。
例如:
inserts = []
last = len(entries)
batch_size = 10000
for i, entry in enumerate(entries): ## or your datasource
# transform data to django object
inserts.append(EntryObject(attribute='attributes...'))
if i % batch_size == 0 or i == last:
EntryObject.bulk_create(inserts) # insert batch
inserts = [] # reset batch
然后,这取决于您的数据源。如果需要将其作为Django视图的一部分进行调用,您可能还希望将它们作为异步任务运行。
答案 1 :(得分:0)
这是因为你的系统内存不足(RAM)。理想的方法是创建SQL转储文件(假设您从另一个数据库获得了200亿条记录)。然后将此SQL文件加载到新数据库中。转储文件中存在的所有数据都将加载到PostgreSQL中。
要创建转储文件,请执行以下操作:
$ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
要从转储文件恢复,请执行:
$ psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
检查:{{3}}了解详细信息