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



我正在开发一个 Django 应用程序,它包含一个抓取器,每天抓取数千个商店项目(价格、描述、卖家信息)和一个允许用户访问数据和查看各种统计数据的 django 模板前端。

例如:用户能够单击"项目 A",并获得一个详细信息视图,其中列出了有关"项目 A"的各种统计信息(例如有关价格随时间变化的折线图、价格分布等)

用户还可以单击单个"刮擦"的报告,并获取有关刮擦项目数量,平均价格的详细信息

。 等等。所有这些统计信息当前都在视图本身中计算。

在本地工作时,在具有 +/100 项的小型开发数据库上,这一切都运行良好。但是,在生产中,此数据库最终将包含 1.000.000+ 行。这让我想知道计算视图中的统计数据是否会导致将来出现巨大的滞后。(特别是当我计划通过更复杂的回归分析以及一些最近的邻居 ML 分类来扩展统计数据时)

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

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

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

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

人们喜欢反馈而不是立竿见影的结果,如果他们知道自己最终会得到结果,他们会容忍相当大的延迟。绞死一个用户,他们会比任何计算机完成处理的速度更快地感到沮丧;带领他们踏上旅程,他们将等待很长时间才能听到故事的结局。

最新更新