我想我读过Django的ORM懒洋洋地加载对象的地方。比方说,我想在批量更新操作中更新一大组对象(比如500,000)。我可以简单地遍历一个非常大的QuerySet,加载,更新和保存对象吗?Django的QuerySets是否足够缓慢以应对大数据集?
同样,如果我想允许所有这些成千上万的对象的分页视图,我可以使用内置的pagination facility或手动必须每次运行一个数据集上的窗口,因为所有对象的QuerySet的大小?
我想我读过Django的ORM懒洋洋地加载对象的地方。比方说,我想在批量更新操作中更新一大组对象(比如500,000)。我可以简单地遍历一个非常大的QuerySet,加载,更新和保存对象吗?Django的QuerySets是否足够缓慢以应对大数据集?
同样,如果我想允许所有这些成千上万的对象的分页视图,我可以使用内置的pagination facility或手动必须每次运行一个数据集上的窗口,因为所有对象的QuerySet的大小?
如果批量更新,可以使用SQL查询,然后我想使用SQL查询或者Django的ORM不会作出重大的区别。但是如果更新实际上需要加载每个对象,处理数据然后更新它们,则可以使用orm或编写自己的sql查询并针对每个处理后的数据运行更新查询,开销完全取决于代码逻辑。
内置分页设备运行的限制,偏移查询(如果你正在做它正确的),所以我不认为有在分页主要开销要么..
正如我这个基准为我在一个表中的记录2.5M数据集当前项目。
我读信息和统计记录,例如,我需要找到的记录,这些领域的“名”是在一定的时间内更新一次以上的ID。 Django基准测试使用ORM来检索所有记录,然后遍历它们。数据保存在列表中供将来处理。没有任何调试输出,除了结果打印结束。
在另一端,我是使用其执行相同的查询(从Django中得到)和构建相同的结构,使用类用于存储数据和在列表中保存的实例以供将来处理MySQLdb的。没有任何调试输出,除了结果打印结束。
我发现:
without Django with Django
execution time x 10x
memory consumption y 25y
我只是阅读和计数,不执行更新/插入查询。
尝试探讨这个问题自己,基准是并不难写和执行。
如果评估500000 -result queryset,它很大,它会被缓存在内存中。相反,您可以在您的查询集上使用iterator()
方法,该方法将根据请求返回结果,而不会消耗大量内存。
此外,使用update()
和F()
对象为了在单个查询中执行简单的批量更新。
谢谢。不,更新在查询中不可行。 – Joe 2010-01-26 19:36:53