鉴于我有一个像这样的Django模型:
Class Shape(models.Model):
SHAPE_MAPPING = {
'square': {'is_symmetrical': True},
'rectangle': {'is_symmetrical': False}
}
is_symmetrical = models.BooleanField(default=False)
# other fields go here
查询形状是否对称的更合适的方法是什么? 我在shell中运行了一个测试查找,结果如下:
ShapeType.objects.get(name='square').is_symmetrical = 0.0212440490723 seconds
ShapeType.SHAPE_MAPPING['square']['is_symmetrical'] = 2.86102294922e-06 seconds
忽略它作为形状等的概念设置,并假设这些物理属性不会发生变化。我问: if(以及何时)适合在模型类级别创建非rel常量结构以便更快地查找。
答案 0 :(得分:1)
嗯,你有时间表明如果可能的话,使用常数会更快。你获得常数的时间不会随着时间的推移而恶化,但是如果你在数据库中查找它会随着表的增长而变得越来越糟。索引在这里没有帮助,因为这是一个布尔字段,无法有效索引。
如果您决定使用缓存,性能仍然比使用常量慢。虽然缓存性能不会随着增长而恶化,但网络调用的开销确保它比常量查找慢。