我应该使用MySQL视图还是报告cronjob

时间:2014-11-11 14:52:19

标签: mysql view cron

在我的工作中,我的同事总是为沉重的桌子建立报告cronjobs。使用cronjob,我们可以从每个用户1天获取所有数据,并将总计插入报告表中。报告概述页面不正确,因为它最多延迟1小时。

cronjob每天运行24次(每小时一次)。

使用MySQL视图会更好吗?当记录添加到主表时,MySQL视图将更新,对吗?这是一个非常好的行动。这会影响使用仪表板的用户吗?

亲切的问候,

Joost的

1 个答案:

答案 0 :(得分:1)

首先是一些术语。

cron作业很可能将数据附加到现有表(可能使用像INSERT ... ON DUPLICATE KEY UPDATE这样的upsert方法)。您写入现有表的这些数据可能会被编入索引,就像普通的MySQL表一样,并且它们也会持久存储在磁盘上

另一方面,视图只不过是在MySQL中保存的查询。每次打开视图时,都会再次运行查询。视图对于性能优化并不是非常有用,因为它们对于小而有效的查询非常有用,否则这些查询可能会很难记住。视图不能有索引(尽管它们是有效保存的查询,因此查询本身可以利用它所引用的表上的索引)并且它们不会持久化到磁盘。每次加载视图时,您将再次运行构成视图的查询

现在,在Cron作业填充的视图和表之间,您还可以安装一个名为Flexviews(https://github.com/greenlion/swanhart-tools)的MySQL插件。 Flexviews允许MySQL使用所谓的物化视图(例如http://en.wikipedia.org/wiki/Materialized_view)。物化视图基本上是作为表持久保存到磁盘的视图。并且,由于它们是表格,因此它们也可以使用索引。

物化视图不是MySQL的原生视图,但维护该插件的开发人员在MySQL社区中是众所周知的,他倾向于编写好的,可靠的SQL工具。显然,在生产环境中测试插件或不使用备份是错误的。但是有很多人在生产中使用Flexviews来完成你想要做的事情......以一种不会谋杀数据库的方式获得仪表板/汇总表的近实时更新性能

我绝对会检查Flexviews ...你可以了解更多关于它的信息

此处:http://www.percona.com/blog/2011/03/23/using-flexviews-part-one-introduction-to-materialized-views/

在这里:http://www.percona.com/blog/2011/03/25/using-flexviews-part-two-change-data-capture/