利用 django 的 management 写了一个可执行命令,更新表内字段值,但是因为数据量比较大( 200W),导致程序报错,内存爆了。如何优化呢?

2014-11-25 19:06:49 +08:00
 no13bus
下面是代码
https://gist.github.com/no13bus/b1843b069ca3145ef17c

看网上有使用F方法的,但是F不支持多个models之间的值进行操作。我使用了iterator将orm的缓存释放,但是依旧不行。还有的说是分段执行,这个分段执行是什么意思呢?请大家指点下有什么优化办法。
2549 次点击
所在节点    Python
2 条回复
mengzhuo
2014-11-25 23:14:49 +08:00
打开一个临时文件,然后按buffer量写入,直到写完
然后把文件hash之后移动到media目录
返回URL即可

又让我想到当年那4G的csv表格了……
raquelken
2014-11-26 09:22:56 +08:00
UPDATE models_b, models_a
SET models_b.value_b = models_b.value_b + models_a.value_a + models_a.value_a_1
WHERE models_b.foreign_id = models_a.id and models_b.value_b <> 0.0
这不是一条sql搞定的事情么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/149223

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX