【问题标题】:Should I use a MySQL view or a report cronjob我应该使用 MySQL 视图还是报告 cronjob
【发布时间】:2014-11-11 14:52:19
【问题描述】:

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

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

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

亲切的问候,

约斯特

【问题讨论】:

  • 视图只是数据库中表的一个窗口。当视图被访问时,数据库仍然需要根据视图检索结果。听起来他们可能需要数据库做很多工作,如果表很大,可能会影响性能。

标签: mysql view cron


【解决方案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/

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 2012-07-12
    • 2021-09-22
    • 1970-01-01
    • 2011-01-25
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多