我有以下型号:通过最近的浮点值查询最有效的方法?
class PlatformVersion(models.Model):
platform = models.ForeignKey(Platform)
version = models.FloatField(db_index=True)
display_version = models.CharField(max_length=32, db_index=True)
is_enabled = models.BooleanField(default=False)
初始DB播种代码:
def add_version(self, platform, version, display_version):
try:
return PlatformVersion.objects.get(platform=platform, version=version)
except PlatformVersion.DoesNotExist:
return PlatformVersion.objects.create(platform=platform, version=version, display_version=display_version,
is_enabled=True)
self.add_version(platform, 9.0, '9.0')
self.add_version(platform, 9.1, '9.1')
self.add_version(platform, 9.2, '9.2')
self.add_version(platform, 9.3, '9.3')
正如你所看到的,我只增加次要版本,跳过版本9.0.1一样,9.0.2等。
我有以下用例:客户端发送请求与平台版本,可能是,例如,9.0,9.0.0或9.0.1或10.0(在数据库中根本没有),等等。然后我需要从DB查询以下PlatformVersion实例:
- 9.0 - > 9.0
- 为9.0.0 - > 9.0
- 为9.0.1 - > 9.0
- 为9.0.999 - > 9.0
- 为9.1.1 - > 9.1
- 为10.0(10. *缺少数据库) - >最接近的版本= 9.3为我的初始种子数据。
我确信我可以自己编写这样的代码,但每秒钟会有大量的这样的查询,所以我关心效率。
你可以建议性能最好的选择吗?
我开始的时候根本就不使用浮点数。版本“数字”实际上不是偶数,更不用说浮点值。整数数组可以更好地工作,至少在PostgreSQL中,可以正确比较。 –