jjzjj

mysql - 非常大的 mysql 表和报告

coder 2023-10-19 原文

我正在寻找处理 MySQL 中大表的选项。在我的数据库中,很少有超过 1.3 亿行(超过 70GB)的表增长得非常快。出于报告和分析目的,我必须运行一些聚合函数,尽管有索引,但查询运行速度非常慢。我试图用合并数据制作一些表格,但这不是最佳选择。因此,我正在寻找可用于解决此问题的工具选项。

最佳答案

如果您还没有对表进行分区,请先查看:

http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

http://www.slideshare.net/datacharmer/mysql-partitions-tutorial

http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html

您如何“整合”您的数据?也许您使用的方法不是最佳的。一个好的方法(如果这实际上是您正在做的,请告诉我)是创建一个包含聚合数据的表。然后这样设置:

首先抛开数据是如何转储到您的主表中的...

  • 创建一个以指定时间间隔运行的作业(cron 或任何您手头有的或已经配置好的),这与数据加载到主表的方式有关(我们称它为 MAIN,向前移动)。如果您的 MAIN 表每小时加载一次,则同步它。半小时?没关系。无论如何,您都可以检查速度,或者如果它接近您的报告运行的非高峰时间,则安排在那个时间附近

  • 正确索引您的表以获取合并数据。我们称它为 AGG 前进。

  • 创建一个将数据从 MAIN 加载到 AGG 的存储过程,这基本上是一个 AGG LOAD FOR INTERVAL-?。当然,您是这里唯一知道如何或何时将数据插入 MAIN 的人,因此您也是知道聚合意图是什么的人。如果聚合意图没有完成,也可以继续运行聚合存储过程(假设它是一整天..所以它是一个累积运行直到设置)

  • 使用STAGING 表。 对我来说,它们是最好的

  • 创建一个重新检查数据的存储过程,以便任何更新或额外插入的记录都可以通过运行此过程反射(reflect)在 AGG 表中。包括要更新的范围的参数。如果是每天,则您有一个 DAILY AGG LOADDAILY AGG RELOAD 过程。包括一个 AGG CHECK INTERVALAGG CHECK DAILY 程序,这将帮助您在晚上睡个好觉。哦,更不用说 AGG DATA HOLE CHECKMISSING AGG DATA CHECK 并应用业务规则来检查所需的最小数据量,您可以从聚合表或来自主表或暂存表(最好)

  • 当然,永远不要修改AGG 表。始终只重新加载它。

  • 这有什么帮助?难道您不需要让您的报告查询更小、更快的 AGG 表(因为聚合已经完成)?也许性能问题与间隔加载有关,但如果您正确构建表、它的索引和维护,它应该是值得的。

  • 分区从何而来?存档。一旦过了一定时间(与您的团队/老板/高层讨论什么是可以接受的),您可以从 MAIN 归档旧数据。我经历过必须在生产数据库中保留 1 年的数据。这感觉有点拖沓,但因为这是客户的要求,公司别无选择,只能给我所需的磁盘空间(搓手),天哪,我一直在玩弄它,直到我能正常运行。我必须提到,我的经验是使用 Microsoft SQL Server 2005,存储过程和 SSIS 使它变得有趣。

如果您还不知道,这就是全部,对于其他可能想要考虑选择的人来说。我并不是说您已经不知道以上任何内容;我只是在说明我之前能够做的事情——考虑到我没有更多的信息可以从你的帖子中使用,除了你有一个你尝试过的整合过程。

关于mysql - 非常大的 mysql 表和报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609786/

有关mysql - 非常大的 mysql 表和报告的更多相关文章

  1. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  4. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  5. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  6. ruby - 如何在 Ruby 中生成一个非常大的随机整数? - 2

    我想在ruby​​中生成一个64位整数。我知道在Java中你有很多渴望,但我不确定你会如何在Ruby中做到这一点。另外,64位数字中有多少个字符?这是我正在谈论的示例......123456789999。@num=Random.rand(9000)+Random.rand(9000)+Random.rand(9000)但我认为这是非常低效的,必须有一种更简单、更简洁的方法来做到这一点。谢谢! 最佳答案 rand可以将范围作为参数:pa=rand(2**32..2**64-1)#=>11093913376345012184putsa.

  7. Ruby 服务器在本地主机(teambox)之外非常慢 - 2

    我刚刚在我的Ubuntu9.10服务器上安装了TeamBox。我使用提供的服务器脚本在端口3000上启动并运行它。它的运行速度非常慢,从另一台计算机连接时每个HTTP请求最多需要30秒。我使用链接从shell加载TeamBox,一点也不花时间。然后我设置了一个SSH隧道,它再次运行得非常快。我通过此服务器上的apache以及SAMBA等运行了大约30个虚拟主机,没有任何问题。我该如何解决这个问题? 最佳答案 我的redmine(ruby,webrick)太慢了。现在我解决了这个问题:apt-getinstallmongrelruby

  8. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  9. ruby-on-rails - 即使没有挂起的迁移,Rails 迁移也非常缓慢 - 2

    我的生产Rails应用程序需要167秒来运行rakedb:migrate。可悲的是,没有要运行的迁移。我试图在检查是否有待处理的迁移时调整运行的迁移,但随后检查花费了同样长的时间。我心目中唯一的“借口”是数据库并不小,那里有1M条记录,但我看不出这有什么关系。我查看了日志,但没有任何迹象表明出了什么问题。我在运行ruby2.2.0rails4.2.0有没有人知道为什么会这样,是否有什么办法可以解决? 最佳答案 运行rakedb:migrate任务还会调用db:schema:dump任务,这将更新您的db/schema.rb。因此,即

  10. ruby - 由于 GEM_HOME 的要求,启动 Ruby 应用程序非常慢 - 2

    我目前正在开发一个ruby​​应用程序,但它运行得非常(非常!)慢..到目前为止,我已经尝试了几件事,我可以将其缩小到主要问题:Ruby正在尝试在$LOAD_PATH的每个目录中查找它的需求。基本上我所观察到的是,ruby正在查看大量文件,试图查看那里是否存在需求。如果找不到它们,它将转到下一个目录。好消息是我可以通过strace看到这种情况。有很多这样的输出:open("/boa_proj_build/nsteen/.gem/gems/i18n-0.7.0/lib/commander/help_formatters/base.rb",O_RDONLY|O_CLOEXEC)=-1ENO

随机推荐