我有以下型號:通過最近的浮點值查詢最有效的方法?
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中,可以正確比較。 –