gpt4 book ai didi

mysql - 非常大的 mysql 表和报告

转载 作者:可可西里 更新时间:2023-11-01 08:07:30 26 4
gpt4 key购买 nike

我正在寻找处理 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com