0

我痛苦地意识到这可能没有灵丹妙药,但它正在成为一个问题。每个用户都有数十万行跨 3 个表的指标数据,这些数据每秒更新一次。

当用户登录时,我想快速为他们提供一些资产的顶级统计数据(即在导航中的每个资产旁边,他们都有顶级统计数据)。

我尝试了很多想法;但是请-如果有人在这方面有一些建议或经验,那就太好了。到目前为止尝试或研究的东西:-

  • 每小时左右生成顶级统计数据的静态版本 - 这对所有用户和所有资产都是密集的。因此,如何定期执行此操作,我不确定。
  • 通过 AJAX 调用统计信息,以便在页面加载后对其进行处理和填写(对于较大的用户来说,现在获取顶级统计信息最多需要 10 秒)。这也可以在会话中缓存统计信息,以节省每次页面加载的重做查询。
  • 查询以 30 分钟的间隔运行,即您登录,它会查询,然后它希望每次加载(仅 1/2 秒)时都使用查询缓存,直到下一个 30 分钟的间隔。

第一个似乎拥有最多的腿,但我不知道如何做到这一点,因为只有少数用户需要这些统计数据 - 一直为每个人做这件事似乎非常昂贵。

4

2 回答 2

2
  1. 每小时左右生成顶级统计数据的静态版本 - 这对所有用户和所有资产都是密集的。因此,如何
    定期执行此操作,我不确定。
  2. 通过 AJAX 调用统计信息,以便在页面加载后对其进行处理和填写(对于较大的用户来说,现在获取顶级统计信息最多需要 10 秒)。这也可以在会话中缓存统计信息,以节省每次页面加载的重做查询。
  3. 查询以 30 分钟的间隔运行,即您登录,它会查询,然后它希望每次加载(仅 1/2 秒)时都使用查询缓存,直到下一个 30 分钟的间隔。

您在 mySQL 中的选项 1 和 3 被称为物化视图MySQL 目前不支持它们,但可以完成概念链接提供示例

数十万条记录并不多。好的索引和分析查询的使用会让你走得很远。遗憾的是,这个概念并没有完全实现,但是有一些变通方法以及提供的链接中指出的。

这实际上取决于顶级统计数据。您是想要精确到秒的实时数据,还是可以接受 10-20 甚至 30 分钟的间隔?使用事件调度器可以调度包含汇总数据的报告表的创建/更新,以便更快地查询。由于所有繁重的工作已经完成,因此这些数据可以在几分之一的交付时间内获得。然后,您可以专注于索引这些表以提高性能,而不必担心对生产表的影响。

于 2012-01-04T11:25:22.480 回答
0

您的设置位于数据仓库域中。这意味着,并非所有 NF1 规则都适用。所以我的方法是使用触发器来填充一个单独的统计表。

于 2012-01-04T11:17:00.547 回答