【发布时间】:2016-09-21 15:18:51
【问题描述】:
我的 Django 项目有两个数据库模型:Device 和 DeviceTest。
系统中的每个设备都应经过从制造到销售的一些测试阶段。因此很多 DeviceTest 对象通过外键关系连接到 Device 对象:
class Device(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=255)
class DeviceTest(models.Model):
device = models.ForeignKey(Device)
created_at = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=255)
tester = models.CharField(max_length=255)
action = models.CharField(max_length=255)
在我的项目中有两种页面:
1) 包含针对单个设备的所有测试的页面
2) 包含所有设备及其最新状态和操作的页面
现在我正在尝试优化 2) 页面。要获取最新的测试数据,我使用以下代码:
status_list = []
last_update_list = []
last_action_list = []
for dev in device_list:
try:
latest_test = DeviceTest.objects.filter(device_id=dev.pk).latest('created_at')
status_list.append(latest_test.status)
last_update_list.append(latest_test.created_at)
last_action_list.append(latest_test.action)
except ObjectDoesNotExist:
status_list.append("Not checked")
last_update_list.append("Not checked")
last_action_list.append("Not checked")
目前在我的数据库中 ~600 台设备和 ~4000 次测试。这是页面加载的主要瓶颈。
有哪些方法可以加快计算速度?
我想出了在设备模型中添加额外字段的想法:在其最后一个 DeviceTest 中添加外键。在这种情况下,根本不会有任何复杂的数据库请求。
现在我有几个问题:
向模型添加冗余字段是一种好习惯吗?
是否可以编写迁移规则以将这个冗余字段填充到所有当前设备?
最重要的是,还有哪些其他选择可以加快我的计算速度?
【问题讨论】:
标签: django database database-design django-models django-views