减少Django模型中的内存消耗,使用额外字段而不是额外操作

2024-04-19 21:02:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出这两种策略中哪一种是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方法过滤queryset的方法,因此我们可能必须对列表进行操作:

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

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

所以,如果有人能帮助你选择这样的路线,建议会很棒!非常感谢。你知道吗


Tags: thedjango方法内存模型which列表get
1条回答
网友
1楼 · 发布于 2024-04-19 21:02:35

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

如果热度定义保持在某个时间段,我将选择一个热度字段,因为它简化了选择部分。你知道吗

如果热度的定义很容易更改,我更喜欢使用get\u hotness()方法,因为它不需要更新数据库中预先计算的热度数据。你知道吗

而数据大小是另一个需要考虑的问题,如果需要按热度对整个元素进行排序,则在将所有数据加载到内存时,很容易超出内存限制模型.object.all(). 你知道吗

相关问题 更多 >