Python Django:将计算结果存储在数据库读数上
我正在写一个应用程序来控制不同水表的用水量。简化一下,我可以得到每15分钟每米消耗量的读数列表。我有一个返回如下内容的查询:Python Django:将计算结果存储在数据库读数上,python,django,Python,Django,我正在写一个应用程序来控制不同水表的用水量。简化一下,我可以得到每15分钟每米消耗量的读数列表。我有一个返回如下内容的查询: Date | ReadingPoint | Consumption -----------------+--------------+------------ 03/05/2014 02:00 | 1 | 12 03/05/2014 02:00 | 2 | 12 03/05/2014 02:15 | 1
Date | ReadingPoint | Consumption
-----------------+--------------+------------
03/05/2014 02:00 | 1 | 12
03/05/2014 02:00 | 2 | 12
03/05/2014 02:15 | 1 | 7
03/05/2014 02:15 | 2 | 7
03/05/2014 02:30 | 1 | 11
03/05/2014 02:30 | 2 | 11
03/05/2014 02:45 | 1 | 23
03/05/2014 02:45 | 2 | 23
....
我需要定期存储这些读数的一些预计算。一些例子:
- 储存每天的总消耗量
- 存储每天的最大读数
- 储存月平均消耗量
- 我确信有工具可以做这类事情,但我以前从未需要做过,我希望避免几天或几周的研究和测试。是否有任何“标准”方法来实现这种行为
- 为了启动进行预计算的过程,我考虑使用芹菜。这是一个正确的选择吗
computation_id | key | value
-----------------------+---------------------------+---------
monthly_average | "reading_point_id+month" | 1.2
weekly_maximum | "reading_point_id+week" | 9
monthly_global_maximum | "month" | 12
密钥格式将与用户定义的计算一起定义。
计算id和标识符将是您的复合主键。
计算id可以是一个数字字段(这样可以更快地查找索引)
尽管有一张大桌子,但我怀疑表演会相当不错
我希望我没有误解您的要求。您是否考虑过使用简单的键值缓存系统,如Redis或Memcached?您可以在缓存中动态存储所有值。如果需要重新计算,可以重建缓存。但除此之外,如果您只需要值和快速查找,那么缓存就可以正常工作。如果不知道您的查询将是什么样子,建议对数据库表进行任何优化可能为时过早 如果缓存对您来说太早,您还可以编写自己的ModelManager方法来动态计算和存储值
class WaterMeterManager(models.Manager):
def pre_calculate(self):
return self.get_query_set().aggregate(Avg('value'), Max('value'), Min('value'), Sum('value'))
class WaterMeter(models.Model):
objects = WaterMeterManager()
您可以将其用作:
WaterMeter.objects.pre_calculate().get('value__min')
非常感谢。我喜欢这种方法,尽管生成/解码计算出的id可能会很麻烦。在接受你的答案之前,让我先测试一下。有什么简单的方法重建缓存吗?