在数据库上有预先计算的字段以避免深度连接查询是个坏主意吗?

时间:2017-06-21 07:44:41

标签: django django-rest-framework data-modeling

我的应用程序中有这个数据模型(Django / Rest Framewrok)。它主要列出并运行项目发布类,每个受影响的系统有多个实例,每个实例有多个阶段有不同的工作。

我正在为前端开发一个RESTful API,而且在列出发布的所有项目时,或者所有有效项目。我需要转到 ProjectInstancePhase 以获得Project o Release元素的整体工作。

在更新依赖对象时更新的Project或Release对象上的预先计算值是不是一个坏主意?我知道它打破了数据库的规范化,但它可以节省大量时间。考虑列出包含所有相关数据的300个项目。

我已经考虑过缓存,但我需要经常使它失效,因为相关类中的任何更改都需要显示。

是否有一些ORM技巧可以降低数据库的负载?

所有教程和示例通常都依赖于很少反映现实生活复杂项目的简单数据模型,所以我还没有找到这个主题。

非常感谢。

second.js

1 个答案:

答案 0 :(得分:1)

我经常使用这种方法。您可以使用Django的信号来更新预先计算的字段(甚至是某些专用模型的预先计算的实例)。

此外,您甚至只能在特定情况下执行某些更新(例如,字段a将其值从正数更改为负数等) - 在重写.save()方法中,有可能访问更新前的所有实例字段值,并在更新后将它们与值进行比较。

如果您需要示例,请告诉我。