Django - 最好计算大量数据的统计数据

时间:2018-01-03 15:42:15

标签: python django database

我正在开发一个Django应用程序,它包含一个刮刀,每天刮擦成千上万的商品(价格,描述,卖家信息),以及一个允许用户访问数据和视图的django模板前端各种统计。

例如:用户可以点击项目A',并获得详细视图,其中列出了有关项目A'的各种统计信息。 (如关于价格随时间变化的线图,价格分布等)

用户还可以点击个人'刮擦的报告。并获取有关刮下的物品数量,平均价格的详细信息。等等。

所有这些统计信息目前都在视图中计算。

在本地工作时,这一切都适用于带有+ / 100项目的小型开发数据库。但是,在生产中,该数据库最终将包含1.000.000+行。这让我想知道在视图中计算统计数据是否会导致未来的大量滞后。 (特别是因为我计划用更复杂的回归分析扩展统计数据,也许还有一些最近邻ML分类)

基于视图的方法的优点是图表始终是最新的。我可以安排一个CRONJOB每隔几个小时进行计算(甚至可能在不同的服务器上)。这样可以非常快速地访问信息,但也意味着信息可能只有几个小时。

我之前从未真正使用过这种规模的数据,并且想知道最佳做法是什么。

1 个答案:

答案 0 :(得分:1)

与性能相关的任何内容一样,进行一些测试并分析您的应用程序。不要被诱惑进入过早的优化陷阱。

那就是说,鉴于这些统计数据没有改变,你可以在每次刮擦时异步执行它们。就像scrape进程本身一样,这个计算过程应该异步完成,与Django应用程序完全分开。当刮擦发生时,它将直接写入数据库并将某种status字段设置为processing。然后启动计算流程,完成后,将填写统计信息字段并将status设置为complete。通过这种方式,您可以向用户显示他们在处理链中的距离。

人们喜欢对即时结果的反馈,如果他们知道他们最终会得到结果,他们会容忍相当大的延迟。绞死用户,他们会比任何计算机完成处理更快地受挫;引导他们旅行,他们会等待多年,听听故事的结局。