2010-04-28 69 views
1

您建议使用哪种方法?为什么?Mysql - 摘要表

创建汇总表和。 。 。

1)当动作实时发生时更新表格。

2)每15分钟运行一次查询组更新汇总表。

3)其他?

的数据必须是近实时,它不能等待一个小时,一天等

回答

2

我认为是第三选择,这可能让您管理您的CPU资源更好一点。如何编写一个定期更新汇总数据表的独立进程?而不是使用group by来重新创建摘要,这可以保证随着时间推移运行得更慢,因为每次执行时都会有更多的行,也许您可​​以更新这些值。根据数据的性质,这可能是不可能的,但如果它非常重要,它不能等待并且必须接近实时,那么我认为你可以花时间调整模式并允许进程来更新它,而不必读取源表中的每一行。

例如,假设您的数据只是login_data(cols username,login_timestamp,logout_timestamp)。您的摘要可以是login_summary(cols username,count)。每15分钟一次,可以截断login_summary表,然后使用选择的用户名,计数(*)类型的代码插入。但是,你必须每次重新扫描整个表格。为了加快速度,您可以将汇总表更改为last_update列。然后,每15分钟为每个记录更新一次,而不是该用户的last_update记录。当然更复杂,但它有一些好处:1)您只更新已更改的行,并且2)您只读取新行。

如果15分钟对于您的用户来说太旧了,您可以将其调整为每10分钟运行一次。这对CPU当然会有一些影响,但不会像每15分钟重做整个摘要那么多。

+0

不知道为什么这没有upvote,很好的回答 – NateDSaint 2012-05-17 17:44:57

+0

谢谢,@Nate。现在要更新已经有点旧了,所以我认为OP已经解决了他的问题并继续前进。无论如何希望如此。 – MJB 2012-05-19 01:37:03

+0

我想找出相同问题的答案,所以它帮助了我。 :) – NateDSaint 2012-05-19 02:22:20