使用 MySQL 实现物化视图(汇总表)的首选方法

2024-04-10

我正在工作中开发一个项目,我需要为其创建和维护汇总表出于性能原因。我相信正确的术语是物化视图.

我这样做有两个主要原因:

  1. 非规范化

    我尽可能地规范化表格。因此,在某些情况下,我必须连接许多表才能提取数据。我们使用 MySQL Cluster,它在 JOIN 方面的性能相当差。

    所以我需要创建可以运行更快的 SELECT 的非规范化表。

  2. 汇总数据

    例如,我有一个包含几百万条记录的事务表。交易来自不同的网站。该应用程序需要生成一份报告,显示每日或每月的交易计数以及每个网站的总收入金额。我不希望报告脚本每次都进行计算,因此我需要生成一个汇总表,其中按 [站点,日期] 进行细分。

    这只是一个简单的例子。我需要生成和维护许多不同类型的汇总表。

过去,我通过编写几个 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(使用前将#替换为@)

使用 MySQL 实现物化视图(汇总表)的首选方法 的相关文章

  • 当用户再次访问同一页面时保持登录状态?

    目前我正在使用会话来登录用户 但是当我关闭浏览器并再次打开它时 我必须再次登录 你如何让用户在 2 周内保持登录状态 那么是通过cookie吗 那么您想要 在这台计算机上记住我 选项吗 这是一种与语言无关的方法 创建一个至少包含以下内容的数
  • 有没有办法在不使用 foreach 或其他函数的情况下在 PHP 中内爆关联数组的键和值?

    我有一个像这样的关联数组 myarray array a gt 1 b gt 2 c gt 3 我想显示数组键和值 如下所示 a is 1 b is 2 c is 3 我不想使用 print r 或 var dump 来执行此操作 我也不想
  • 未找到“MongoId”类(带有 MongoDB Doctrine 的 Zend 框架)

    我目前正在尝试将 MongoDB 与 ZendFramework 中的 Doctrine 集成 我做了很多教程 在 StackOverflow 或其他地方 但没有任何效果 我一步步按照教程进行操作 http www bigwisu com
  • 匹配括号内任何字符的正则表达式

    尝试创建一个与括号内的任何字符匹配的正则表达式 我的正则表达式模式是这样的 preg match listanswer answer 括号内的所有字符串都是匹配模式 但问题是 当我尝试匹配例如 this word sample data 它
  • SQL 按计数排序

    如果我有一个表和这样的数据 ID Name Group 1 Apple A 2 Boy A 3 Cat B 4 Dog C 5 Elep C 6 Fish C 我希望根据 Group 的总和从小到大进行排序 例如 A 2条记录 B 1条记录
  • PHP服务器端IAB验证openssl_verify总是返回0

    我使用以下函数 服务器端 php 来验证 IAB v3 事务 我从 Android 应用程序传递过来 Override protected void onActivityResult int requestCode int resultCo
  • Symfony 学说错误“DoctrineMigrationsBundle 需要启用 DoctrineBundle。”

    我创建了一个新的 Symfony 项目 并且不断收到此消息 DoctrineMigrationsBundle 需要启用 DoctrineBundle 错误并且无法摆脱它 显然我是这个星球上唯一一个收到此错误的人 因为谷歌并没有太大帮助 在
  • json_encode 创建格式错误的 JSON 数据?

    我有一个 codeigniter 应用程序将一些数据从数据库返回到视图 我正在尝试将其作为 json 数据发送回来 问题是返回的数据格式错误 它看起来像这样 2 5 Admin1 2 10 Admin2 当我在 jsonlint com 上
  • R:ifelse 中的字符串列表

    我正在寻找与 MySQL 中的 where var in 语句类似的东西 我的代码如下 data lt data frame id 10001 10030 cc1 rep c a b c 10 attach data data new lt
  • 如何将 .env 添加到 codeigniter?

    我尝试按照以下步骤使 php 连接到 Outlookhttps learn microsoft com en us outlook rest php tutorial https learn microsoft com en us outl
  • 拉拉维尔; “SQLSTATE[HY000] [2002] 连接被拒绝”

    我在 OSX 主机上设置了 homestead 2 0 并使用 Sequel Pro 我可以进行迁移并确认数据已在Sequel Pro中迁移 因此看起来数据库连接没有问题 但是 一旦我尝试从 Laravel 4 2 应用程序获取数据 它就无
  • Laravel 5.6 - 注册表无法正常工作并且不显示任何错误

    在我最近的一个项目中 定制登记表不管用 当我单击注册按钮时 它会重新加载注册表单 不会打印任何错误 并且不会将数据插入数据库中 这是注册表的外观 这里是移民文件代码 public function up Schema create user
  • 如何让Symfony2直接加载CSS、JS文件而不是通过PHP?

    老问题 请参阅下面的更新版本 我的开发环境不是最快的 每个 PHP 请求大约需要 500 毫秒 它开始成为 Symfony2 资源文件的问题 因为每个资源文件都是通过 Symfony 的内部控制器请求的 http localhost myp
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内
  • 如何编写可以补偿拼写错误数据的 MySQL 搜索?

    有没有什么方法可以编写一个 MySQL 搜索来弥补用户在拼写等方面的错误 作为随机示例 有人可能会输入 电子邮件受保护 cdn cgi l email protection代替 电子邮件受保护 cdn cgi l email protect
  • MySQL:所有表都正常,但仍然错误 1577(发现事件调度程序使用的系统表已损坏)

    从我的系统日志 mysql 1663 ERROR 1577 HY000 at line 1 Cannot proceed because system tables used by Event Scheduler were found da
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • 如何在php中关闭夏令时

    我有这行代码将夏令时设置为 打开 将其设置为 关闭 的正确方法是什么 is daylight saving On rcmail config dst active bool date I date I 这是一个大写字母 i 当当前默认时区
  • 使用 PHP 创建图表并导出为 PDF

    我正在寻找有关使用 PHP 创建图表的建议 我还希望能够将这些图表导出到 PDF 文档 我目前正在使用谷歌图表 但我不喜欢将我的所有信息发送到谷歌的想法 我更喜欢自己的托管解决方案 我见过很多 Flash 解决方案 但我不知道有什么方法可以
  • PHP 用星号替换所有字符

    假设我有一个字符串形式的密码 password thisisaplaintextpassword 我怎样才能把它变成下面的样子 password 我想通过电子邮件向用户发送他们的帐户详细信息 但不想发送整个内容 Use 字符串重复 http

随机推荐

  • 透明精灵表有黑色背景

    我正在使用 Python 和 Pygame 开发游戏 我为其中一个敌人创建了一个精灵表 并使其代码正常工作 问题是图像看起来有黑色背景 即使它是透明图像 它的代码是这样的 enemySheet pygame image load resou
  • 使用 selenium Java (Mac OSX) 将 Firefox 浏览器置于前端

    我正在使用三个火狐驱动程序实例进行自动化 我需要将当前活动的火狐浏览器置于前面 因为我正在使用一些机器人类进行某些操作 我曾在 mac 中尝试过针对 google chrome 的 java 脚本警报 相同的操作 并且工作正常 在 Wind
  • 在Android 4.2 API 17上读取Sqlite Cursor carsh

    我有一张桌子145行 当我尝试获取所有数据时crashed on android 4 2 BUT它工作得很好android 4 4 emulator public ArrayList
  • 为什么我不能得到与 GridSearchCV 相同的结果?

    GridSearchCV只返回每个参数化的分数 我还希望看到 Roc 曲线以更好地理解结果 为了做到这一点 我想采用性能最好的模型GridSearchCV并重现这些相同的结果 但缓存概率 这是我的代码 import numpy as np
  • 超低延迟硬实时多线程 x86 代码的意外周期性行为

    我正在具有 RT 优先级的专用 CPU 上循环运行代码以进行多次迭代 并希望长时间观察其行为 我发现代码有一个非常奇怪的周期性行为 简而言之 这就是代码的作用 Arraythread while 1 if flag Multiply mat
  • 通过透明 Windows 窗体防止鼠标点击

    我正在制作一个小工具 用于在浮动侧边栏中切换 笔 按钮后用鼠标在屏幕上绘图 我已经做到了这一点 请不要笑 方法是使用最顶层的窗口窗体及其背景 因为它的透明键覆盖整个屏幕 当我处于绘图模式时 我需要使鼠标不会点击表单到下面的内容上 我尝试按照
  • 如何搜索一长串 JavaScript 对象以查找“sent: 0”的第一个实例

    这里有一个主要的循环问题 我的数据如下所示 var mailouts signUp date sent 1 lesson1 sent 1 time 20 lesson2 sent 0 time 20 lesson3 sent 0 time
  • Haxe - 创建 C++ 独立可执行文件

    我编写了一个 haxe 程序 尝试与远程服务器进行通信 我能够成功编译到 C 目标 该可执行文件在我的系统上运行得很好 但是 当我尝试在另一个 Windows 盒子上运行相同的命令时 它失败并出现以下错误 错误 无法加载模块 std soc
  • 是否可以重新排序或忽略控制器路由中的参数?

    问题标题是我能想到的最明确的 但为了清楚起见 这里有一个用例 示例 假设我定义以下路线来显示一篇文章 Route get article slug id ArticleController show class ArticleControl
  • 如何实现向后兼容的soap webservice(基于java)?

    我们的产品之一使用合同最后方法发布网络服务 这已经成为一个真正的问题 因为一旦我们发布产品的新版本 我们所有的客户 ws 客户 都必须重建他们的客户端应用程序 这是由于所有名称空间更改都是自动生成的 wsdls 的成本 我们使用 Axis1
  • S3和EMR数据局部性[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 MapReduce 和 HDFS 的数据局部性非常重要 Spark HBase 也是如此 我一直在研究 AWS 以及在云中部署集群时的两个选项
  • JavaScript 丢失带有私有/公共属性的“this”对象引用

    我在运行以下页面时出现以下错误 this testpublic 不是一个函数 test function var testprivate function this testpublic this testpublic function c
  • 使用 Core Plot 和 Swift 绘制多个散点图

    我正在尝试找到一种方法将两个不同的散点图添加到单个图表中 但到目前为止我还无法做到 我在 Objective C 中找到了一些示例 但在 Swift 中没有找到任何示例 只有 CorePlot 2 1 版本中的 Scatterplot 示例
  • Android 上的 EditText 中只有文本吗?

    我只想在 Android 应用程序的 edittext 中输入文本 输入 例如 仅输入 文本 A gt Z 不允许输入数字或特殊字符 请给我一个想法 应该怎么做 非常感谢 试试这个方法 android digits abcdefghijkl
  • 模拟外部 API 以使用 Python 进行测试

    Context 我正在尝试为查询外部 API 的函数编写测试 这些函数向 API 发送请求 获取响应并处理它们 在我的测试中 我想使用本地运行的模拟服务器来模拟外部 API 到目前为止 模拟服务器已成功运行并响应自定义 GET 查询 问题
  • 如何垂直分割250k列的文件?

    我需要根据大小 首选 或列数将 250k 的文件拆分为几个 5 块 我知道split命令用于按行拆分 但不知道是否有类似的函数用于按列拆分 我的文件中的列数不均匀 因此块不能具有相同的列数 Input AA BB CC DD EE FF G
  • Groupby 过滤器,基于连续序列排序以及 ID 和日期列

    我有一个数据框 如下所示 ID Status Date 0 1 F 2017 06 22 1 1 M 2017 07 22 2 1 P 2017 10 22 3 1 F 2018 06 22 4 1 P 2018 08 22 5 1 F 2
  • jar 名称中的版本

    当我将 maven 项目导入 Intellij 时 它生成的 jar 文件不包含版本 但是maven生成的jar有name version jar格式 所以我最终得到了两个 jar 文件 一个有版本 另一个没有版本 我当然可以在 Intel
  • Javascript:关闭字符串中打开的 HTML 标签

    我有一个包含 HTML 代码的 JavaScript 字符串 我显示它 并根据字数附加了一个阅读更多 更少切换器 问题是 当我缩小 HTML 代码时 它可能有开放标签 假设 p A computer is a general purpose
  • 使用 MySQL 实现物化视图(汇总表)的首选方法

    我正在工作中开发一个项目 我需要为其创建和维护汇总表出于性能原因 我相信正确的术语是物化视图 我这样做有两个主要原因 非规范化 我尽可能地规范化表格 因此 在某些情况下 我必须连接许多表才能提取数据 我们使用 MySQL Cluster 它