Python Django类常量与数据库查找性能

Python Django类常量与数据库查找性能,python,sql,django,database,Python,Sql,Django,Database,鉴于我有这样一个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 查询

鉴于我有这样一个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

忽略它是形状等的概念设置,并假设这些是不可更改的物理属性。我在问:是否(以及何时)在模型类级别创建非rel常量结构以加快查找速度是合适的。

您有时间证明,如果可能,使用常量会更快。常数的计时不会随着时间的推移而恶化,但如果在数据库中进行查找,则随着表的增长,情况会越来越糟。在这里,索引对您没有帮助,因为这是一个布尔字段,无法有效地索引


如果您决定改用缓存,性能仍然会比使用常量慢。虽然缓存性能不会随着网络调用开销的增加而恶化,但请确保其速度比不断查找的速度慢。

您自己已经回答了这个问题。如果常数不受更改,则将其放入代码中。如果是,则将其放入数据库中。性能问题可以通过适当的缓存等来缓解。您正在展示的代码并不是做同样的事情,而是根据字典的键从字典中查找值。另一个是查询数据库实例以找到模型值。你不能比较它们,因为它们是完全不同的东西。