您建议使用哪种方法?为什么?
创建摘要表和。 。
1)在动作实时发生时更新表格。
2)每隔15分钟通过查询运行组以更新摘要表。
3)还有别的吗?
数据必须接近实时,不能等待一小时,一天等等。
答案 0 :(得分:3)
我认为有第三种选择,可能会让您更好地管理CPU资源。编写一个定期更新汇总数据表的单独进程怎么样?而不是使用group by重新创建摘要,因为每次执行时会有更多行,因此保证运行速度较慢,也许您只需更新值即可。根据数据的性质,它可能是不可能的,但如果它非常重要,它不能等待并且必须接近实时,那么我认为你可以花时间调整模式并允许进程更新它而不必读取源表中的每一行。
例如,假设您的数据只是login_data
(cols username,login_timestamp,logout_timestamp)。您的摘要可能是login_summary(cols username,count)。每隔15分钟就可以截断login_summary
表,然后使用select username,count(*)类代码插入。但是,每次你必须重新扫描整个表格。为了加快速度,您可以将摘要表更改为last_update
列。然后,每隔15分钟,您只需对比该用户的last_update记录更新的每条记录进行更新。当然更复杂,但它有一些好处:1)您只更新已更改的行,以及2)您只读取新行。
如果15分钟对您的用户来说太老了,您可以将其调整为每10分钟运行一次。那当然会对CPU产生一些影响,但不会像每15分钟重做一次整个摘要那么多。