我正在工作中开发一个项目,我需要为其创建和维护汇总表出于性能原因。我相信正确的术语是物化视图.
我这样做有两个主要原因:
-
非规范化
我尽可能地规范化表格。因此,在某些情况下,我必须连接许多表才能提取数据。我们使用 MySQL Cluster,它在 JOIN 方面的性能相当差。
所以我需要创建可以运行更快的 SELECT 的非规范化表。
-
汇总数据
例如,我有一个包含几百万条记录的事务表。交易来自不同的网站。该应用程序需要生成一份报告,显示每日或每月的交易计数以及每个网站的总收入金额。我不希望报告脚本每次都进行计算,因此我需要生成一个汇总表,其中按 [站点,日期] 进行细分。
这只是一个简单的例子。我需要生成和维护许多不同类型的汇总表。
过去,我通过编写几个 cron 脚本来保持每个汇总表的更新来完成这些事情。但在这个新项目中,我希望实现一个更优雅、更合适的解决方案。
我更喜欢基于 PHP 的解决方案,因为我不是服务器管理员,当我可以通过应用程序代码控制一切时,我感觉最舒服。
我考虑过的解决方案:
如上所述,Oracle 中的物化视图与 SQL Server 中的索引视图不同。它们非常酷而且有用。看http://download.oracle.com/docs/cd/B10500_01/server.920/a96567/repmview.htm http://download.oracle.com/docs/cd/B10500_01/server.920/a96567/repmview.htm欲了解详情
然而 MySql 不支持这些。
您多次提到的一件事是性能不佳。您是否检查过数据库设计的索引是否正确,并对查询运行解释计划以了解它们为何缓慢。看这里http://dev.mysql.com/doc/refman/5.1/en/using-explain.html http://dev.mysql.com/doc/refman/5.1/en/using-explain.html。当然,这是假设您的服务器已正确调整,您已设置并调整了 mysql,例如缓冲区高速缓存等
对于你的直接问题。您听起来想要做的事情正是我们在数据仓库情况下经常做的事情。我们有一个生产数据库和一个数据仓库,可以提取各种信息,对其进行聚合和预计算以加快查询速度。这对你来说可能有点过分了,但你可以决定。根据您为报告定义的延迟(即您需要它们的频率),我们通常会定期(每天、每周等)执行 ETL(提取转换加载)过程,以从生产系统填充 DW。这可以降低对生产系统的影响,并将所有报告移至另一组服务器,这也减轻了负载。在 DW 方面,我通常会设计不同的模式,即使用星型模式。 (http://www.orafaq.com/node/2286) 星型模式具有事实表(您想要测量的事物)和维度(您想要按(时间、地理位置、产品类别等聚合度量的事物)) SQL Server 它们还包括一个名为 SQL Server Analysis Services (SSAS) 的附加引擎,用于查看事实表和维度、预先计算和构建 OLAP 数据立方体。在这些数据立方体中,您可以深入了解并查看所有类型的模式、执行数据操作分析和数据挖掘。Oracle 的做法略有不同,但结果是相同的。
您是否想走大约路线实际上取决于业务需求以及您从数据分析中获得多少价值。正如我所说,如果您只有几个汇总表,那么可能会有点过分,但当您仔细思考问题时,您可能会发现一些概念很有帮助。如果您的企业正在寻求商业智能解决方案,那么这是需要考虑的事情。
PS 如果业务需要的话,您实际上可以使用称为 ROLAP 的东西将 DW 设置为“实时”工作。 Microstrategy 有一个很好的产品可以很好地解决这个问题。
PPS 您可能还想看看 MS 的 PowerPivot (http://www.powerpivot.com/learn.aspx),我只使用过它,所以我无法告诉您它如何在非常大的数据集上工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)