0

我想找出这两种策略中的哪一种是大多数 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.

但是两者都有优点和缺点。

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

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

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

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

因此,如果那里的任何人都可以帮助解决此类问题的首选路线,那么建议会很棒!谢谢你。

4

1 回答 1

1

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

如果热度定义在一定时期内保持不变,我会选择有热度字段,因为它简化了选择部分。

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

并且数据大小是另一个问题,如果您需要按热度对整个元素进行排序,则在使用 Models.object.all() 将所有数据加载到内存时可能很容易超出内存限制。

于 2012-12-29T05:56:04.860 回答