减少django模型中的内存消耗,额外的字段与额外的操作

时间:2012-12-29 05:44:47

标签: python django

我想找出这两种策略中哪一种是大多数django开发者中首选的策略。

我有一个模型,有一个字段我想通过称为“热度”来订购这些模型。热度是根据此模型中现有的字段计算的。

所以这两条路是:

 1) Have a field called "hotness" which the models 
    can be easily ordered by.
 2) Have a method called "get_hotness()", which 
    returns the hotness of the instance.

但两者都有赞成和反对意见。

如果使用选项1,额外的字段将导致额外的内存消耗,因为模型本身会更重。

对于选项二,实际上没有办法通过django中的models方法过滤查询集,所以我们可能不得不对列表进行操作:

models = sorted(list(Model.objects.all()), key = lamba x: x.get_hotness())

但是再次使用列表操作会增加内存消耗而不仅仅是查询。

因此,如果有人可以帮助这样的事情的首选路线,建议将是真棒!谢谢。

1 个答案:

答案 0 :(得分:1)

您需要同时考虑数据大小和不断变化的要求。

如果热度定义保持在一定时间内,我将选择具有热点字段,因为它可以简化选择部分。

如果热度的定义很容易改变,我更喜欢使用get_hotness()方法,因为它不需要更新数据库中预先计算的热度数据。

数据大小是另一个问题,如果你需要通过hotness对整个元素进行排序,使用Models.object.all()将所有数据加载到内存时可能会超出内存限制。