从大型MySQL数据库中快速获取最佳热门指标?

时间:2012-01-04 11:13:06

标签: mysql performance lamp query-cache

我很痛苦地意识到这可能没有灵丹妙药,但这已经成为一个问题。每个用户在3个表中都有数十万行度量标准数据,这是逐秒更新的。

当用户登录时,我希望快速为他们的一些资产提供最高分数(即在navi中他们拥有最高级别统计数据的每个资产)。

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

  • 每小时左右生成一行顶级统计信息的静态版本 - 这对所有用户和所有资产都很密集。那么如何定期完成,我不确定。
  • 通过AJAX调用统计数据,因此一旦页面加载,就可以对它们进行处理和填写(现在获得最高级别的统计数据,对于更大的用户可能需要10秒)。这还可以缓存会话中的统计信息,以便在每次加载页面时保存重做查询。
  • 查询以30分钟的间隔运行,即您登录,它将进行查询,然后每次加载(仅1/2秒)时,它都希望使用查询缓存,直到下一个30分钟的间隔。

第一个似乎有大部分腿,但我不知道如何做到这一点,因为只有少数用户需要这些数据 - 看起来非常昂贵,一直为大家所做。 / p>

2 个答案:

答案 0 :(得分:2)

  1. 每小时左右生成一行顶级统计信息的静态版本 - 这是 密集所有用户和所有资产。那么如何做到这一点 经常,我不确定。
  2. 通过AJAX调用统计信息,以便处理并填写(获取 现在最高级别的统计数据可能需要10秒才能获得更大的数据 用户)一旦页面加载。这也可以缓存会话中的统计信息 保存每个页面加载的重做查询。
  3. 查询以30分钟的间隔运行,即您登录,它将查询然后 希望每次加载时都使用查询缓存(只有1/2 秒)直到下一个30分钟的间隔。
  4. mySQL中的选项1和3被称为materialized view MySQL目前不支持它们但是概念可以完成链接提供示例

    成千上万的记录并不是那么多。好的索引和analytic queries的使用会让你走得很远。可悲的是,这个概念并没有完全实现,但是在提供的链接中也有解决方法。

    这实际上取决于顶线统计数据。你想要实时数据到第二个或10-20甚至30分钟的间隔是否可以接受?使用event scheduler可以安排创建/更新报告表,其中包含更快查询的汇总数据。由于所有繁重的工作已经完成,因此这些数据可以在几分之一秒的交货时间内获得。然后,您可以关注索引这些表以提高性能,而不必担心对生产表的影响。

答案 1 :(得分:0)

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