【发布时间】:2015-06-26 14:57:41
【问题描述】:
我的网络应用在 Heroku 上使用 Django。
该应用有两个组件:横幅服务 API 和报告 API。
应用提供的横幅包含对应用报告 API 的 ajax 调用。每次展示都会进行一次此调用。这样做的目的是记录每个横幅每天获得的展示次数。
报告 API 节略来源:
def report_v1(request):
'''
/report/v1/?cid=
- cid= the ID of the banner
'''
creative = get_creative(creative_id = request.GET.get('cid'))
if not creative:
return HttpResponseNotFound("404 creative with that ID not found")
day = timezone.now()
fact, created = CreativeFact.objects.get_or_create(
day = day,
app = app,
creative = creative,
defaults = {
'impression_count': 0,
}
)
fact.impression_count += 1
response = HttpResponse("200 OK")
response["Access-Control-Allow-Origin"] = "*"
return response
我的问题:有什么方法可以避免每次展示都写入数据库?我目前正在以这种方式跟踪数十万次展示,并且预计很快就会跟踪数百万次,我认为这种方式效率低下。
【问题讨论】:
-
我不太了解 Django,但在大多数平台上,我建议您将类似 CSV 的数据写入临时文件。然后定期用一个空的临时文件和
COPY ... FROM stdin将旧临时文件旋转到数据库中以加载其内容,可能加载到一个临时表中,然后加入以更新/插入真正的目标表。由于您使用的是“get_or_create”,我猜您想加载到临时文件中,然后进行批量更新;见stackoverflow.com/q/17267417/398670
标签: python django postgresql heroku