【问题标题】:Django - when best to calculate statistics on large amounts of dataDjango - 何时最好计算大量数据的统计信息
【发布时间】:2018-01-19 16:18:49
【问题描述】:

我正在开发一个 Django 应用程序,该应用程序由一个每天抓取数千个商店商品(价格、描述、卖家信息)的刮板和一个允许用户访问数据和查看各种统计信息的 django 模板前端组成.

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

用户还可以点击各个“抓取”的报告,并获取有关抓取的商品数量、平均价格的详细信息。等等。

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

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

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

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

【问题讨论】:

标签: python django database


【解决方案1】:

与任何与性能相关的事情一样,做一些测试并分析您的应用程序。不要陷入过早的优化陷阱。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 2014-04-09
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    相关资源
    最近更新 更多