我正在开发一个简单的价格跟踪器应用程序。我对Web应用程序设计有点新意,可以在这里使用经验丰富的意见。我的应用程序通过独特的产品SKU每天为数十万种产品提供价格点。
对于我希望能够展示的每个SKU:
当我的API将新的SKU价格写入数据库时,我能够找出这三个值并将它们写入最新/当前价格行。这是一个更好的设计决策,而不是在我的视图中使用Django Queryset来查询和/或计算和显示它们吗?
编辑:
当然,我现在用def get_context_data
将它们送到基于Django Class的视图。
context['high_price'] = prices.order_by('price').last()
context['low_price'] = prices.order_by('-price').last()
context['avg_price'] = prices.aggregate(average=Avg('price'))
请注意,我没有使用MIN / MAX汇总,因为我需要每个价格的日期,所以我需要整个价格行(价格模型的结构为'价格日期'和& #39;价格&#39)
。原始问题仍然存在。每次我带新价格时,我应该设置这个或写下高/低/平均值吗?以下是我如何做到这一点(例如最高的所有时间价格):
if product.high_price is None or (price.value is not None and price.value >= product.high_price.value):
product.high_price = price
答案 0 :(得分:0)
如果您有索引,则使用查询集应该很快。对您所拥有的内容进行基准测试会很有趣,然后在您的模型中添加索引并重复。例如
price = models.DecimalField(db_index=True)
请参阅https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.Field.db_index
计算平均值将是缓慢的,并且可能值得拥有一个计算平均值的工作并将其存储在某处。您可以使用celery / redis在后台执行此操作,或者在您提取数据时执行此操作,具体取决于您的设置。