【发布时间】:2015-12-23 07:25:35
【问题描述】:
Django 1.8,Postgres 8.4.20
我正在尝试在 DB 中准备一些性能测试数据 - 生成 100 000 个 Django 用户以及其他模型实例。这是我的代码:
for n in range(100000):
# Generate User with one related Profile
user = User.objects.create(username=str(random.random()))
UserProfile.objects.create(custom_id=str(random.random()), user=user)
# For each User generate a Journey with 10 related Visits
journey = Journey.objects.create(user_id=user.id)
for i in range(10):
journey.visit_set.add(Visit(custom_id=str(random.random())))
# Also for each User generate a Progress with 100 related Challenges
progress = Progress.objects.create(user_id=user.id)
for j in range(100):
progress.challenge_set.add(Challenge(custom_id=str(random.random())))
它按预期工作,唯一的问题是它非常慢。在具有 1 个内核和 1 Gb RAM 的 VPS 上,只需要 1 小时就可以生成 4000 个用户以及相应的相关条目。
消耗的 CPU 约为 10%,内存 200mb,平均负载浮动在 1.00 左右。
如何加快速度?
【问题讨论】:
-
试试
bulk_create。 -
DB 与 Django 在同一台服务器上?您可以尝试为 n in range(10000) 执行并并行运行脚本 10 次
-
好的,谢谢。但是为什么现在这么慢?填充数据库的单个 django 脚本是否有任何限制?
-
@AshwiniChaudhary 比我的更好,尽管手册确实说它不适用于多对多关系
-
您也可以使用fixtures,其想法是生成xml或json文件以加载数据。
标签: python django postgresql test-data