复杂的数据需求的MySQL方案是怎样的

技术复杂的数据需求的MySQL方案是怎样的今天就跟大家聊聊有关复杂的数据需求的MySQL方案是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 前些天处理

今天,我将和大家谈谈关于复杂数据需求的MySQL解决方案,很多人可能不太理解。为了让大家更好的了解,边肖为大家总结了以下内容,希望大家能从这篇文章中有所收获。

几天前,我处理了一个需求。当时的数据库环境是甲骨文。我已经尝试了所有与甲骨文相关的方案,在处理问题的过程中,我还在想如果失败了还有哪些方案。

因此,尽管Oracle是一个成熟的商业数据库,但它仍然很难做到,还需要一些额外的技能,比如避免bug和间接实现需求。

但是从另一个角度来看,MySQL对于数据超过2亿的表来说并不是什么新鲜事。如果MySQL遇到这种情况,应该怎么办?

梳理业务需求

假设业务需求保持不变,如下所示:

根据商科学生的反馈,数据库中有一个表,数据量很大,因为要做第一个活动,需要最近的数据,可以考虑清理之前的旧数据。要清理多少旧数据,差不多99%,数据有多大,差不多2亿。所以这个要求听起来挺简单的,但是商科学生显然是想保持业务的可持续性,所以对于实施方案有一些选择。

这个看似简单的需求有以下补充信息:数据库是MySQL 5.6,数据量2亿,数据查询效率很差,99%以上是脏数据,需要清理,开发学员按照时间范围查询;表中的数据只是插入,而不是更新和删除。

总而言之,有四件事要做:

当前基于时间范围的优化查询需要在评估后向该表添加索引。

清理数据,表中有2亿个数据,但大部分数据都要清理。

为保证业务的可持续性,每10分钟做一次统计分析,数据实时录入系统。

将表修改为分区表,将旧数据放入一个分区,将新数据放入另一个分区,更改后删除该分区。

整理需求优先级

因此,给这个表增加一个索引是亟待解决的关键问题。

MySQL中的在线DDL功能还是很不错的。5.6版完全支持索引操作。

复杂的数据需求的MySQL方案是怎样的

因此,MySQL在线DDL原生解决方案非常好。如果是5.5也没关系,还有pt-osc工具之类的可以实现。

大道至简,同样的想法。

这个问题的一个解决方案如下:数据流与之前的Oracle解决方案完全相同,但是实现原理和细节不同。

复杂的数据需求的MySQL方案是怎样的

需要做的第一件事是生成一个影子表serverlog_read,其中源库中表数据的所有更改都可以同步。

MySQL不支持物化视图,所以增量刷新等方案会受到限制,但方法总是比这更难。MySQL中还有其他一些实现物化视图的方法,比如Flexviews或者自我实现,需求通过触发器来实现。这里,插入、删除、更新更新都需要触发条件,所以pt工具默认会创建三个触发器,原理类似。

有了这个物化视图,缓存增量数据就有了基本的保障,所以我们还需要两个辅助表,一个是serverlog_par_old,这是分区表,只保留一个分区,物化视图中找到的刷新数据会存储在其中,另一个是serverlog_host,其中存储了增量数据和实时进入系统的数据。

此时,实际上有三种类型的数据处理需要考虑。第一类是旧数据,也可以理解为冷数据,第二类是增量数据。比如指定近一个月的数据需要保存,那么这个时间范围内的数据就是增量数据,第三类就是实时数据,会实时输入到系统中,这个数据几乎是实时的。所以上面的方案是冷数据可以归档,增量数据可以合理截取,实时数据尽量少受影响。

2亿数据怎么能和1000万数据交换?MySQL 5.6也支持交换分区。因此,支持此操作没有问题。毕竟分区的操作就是这么几种玩法。由于MySQL自身的存储特性,实现这个需求其实更纯粹。

最后,增量、实时数据补充,只需使用serverlog_hot来补充数据即可。

计划之外的两个补充

另外两点,MySQL在这里。

个实现过程的两个亮点。

    第一个亮点就是MySQL复制表结构有着得天独厚的优势,大家知道在MySQL 5.6中是不支持create table xxxx as select xx这种方式的,但是有很多更绝的方法。

    我们可以改写为下面的方式来做:

   1.create table test1 like test; --这种方式能够完整的复制DDL信息。

    或者使用show create table来做,当然这个略有些不方面,或者是使用mysqldump --no-date的方式来导出语句也可以。

   2.插入数据,比如insert into test1 select *from test;

  第二个亮点部分就是对于数据的备份归档,说简单简单,说复杂复杂,比如我们严格限定数据的有效性,不需要的旧数据就不在当前的数据库中保留,但是为了实现基本的备份需求,我们可以使用rename
user的方式来做。Oracle实现rename
user还是有些复杂的,而MySQL实现起来就很轻巧。说得通俗一些,就是把里面的数据挪到另外一个目录下了。

  要处理这样一个需求,毫无疑问尽管我信息满满,但是在实践的时候还是是困难重重,碰到了问题多思考和总结,就会形成自己的认知体系,会少走很多弯路。

看完上述内容,你们对复杂的数据需求的MySQL方案是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/95849.html

(0)

相关推荐

  • AspNetCore应用注意哪些点

    技术AspNetCore应用注意哪些点今天就跟大家聊聊有关AspNetCore应用注意哪些点,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。背景已经有很多文章记录了

    攻略 2021年11月18日
  • 洋葱炒蛋家常做法,洋葱炒鸡蛋.怎么做才好吃

    技术洋葱炒蛋家常做法,洋葱炒鸡蛋.怎么做才好吃主料洋葱200克鸡蛋100克辅料油适量盐适量酱油适量鸡精适量料酒适量步骤洋葱炒鸡蛋的做法步骤11.准备好所有食材洋葱炒蛋家常做法。洋葱炒鸡蛋的做法步骤22.把洋葱洗净,切成细

    生活 2021年10月20日
  • 支付宝怎么交违章罚款,2021支付宝怎么交违章停车

    技术支付宝怎么交违章罚款,2021支付宝怎么交违章停车1、下载交管12123APP,用车主身份证注册,进去后可以看到车主身份证下所有车辆的情况支付宝怎么交违章罚款。按照说明一步步走下去就可以了。
    2、上支付宝,找到更多,

    生活 2021年10月22日
  • Linux如何使用Supervisor管理后台进程

    技术Linux如何使用Supervisor管理后台进程小编给大家分享一下Linux如何使用Supervisor管理后台进程,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.安装easy_install

    攻略 2021年11月3日
  • 四氯化碳的密度,甲苯与四氯化碳的密度关系

    技术四氯化碳的密度,甲苯与四氯化碳的密度关系Br溶于水呈橙黄色四氯化碳的密度,溶于四氯化碳呈橙红色, 由于水的密度比四氯化碳的要小,所以四氯化碳在下面, 渐渐水中的BR就溶到四氯化碳了,
    所以上层无色,下层橙色。

    生活 2021年10月23日
  • Spring中spring-context-indexer依赖有什么用

    技术Spring中spring-context-indexer依赖有什么用这篇文章给大家分享的是有关Spring中spring-context-indexer依赖有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,

    攻略 2021年11月9日