小编给大家分享一下在MYSQL中怎么分库分表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
正文:
——————————————————————————————
在MYSQL的使用中,经常会有人问怎么分库分表,经常会听到两种答案。
1 分库分表,我们使用业务逻辑 + 业务程序的方式来进行,并期根据实际的环境将系统中的一些表分割到不同的MYSQL 服务器上存储,达到以下两个关键问题的解决。
1 受制于MYSQL本身的单表的存储能力,这样处理将扩展MYSQL的单表的存储能力。
2 受制于MYSQL 单机(包括基于 MGR集群 , MHA高可用)本身数据吞吐能力,将数据打散后,提高了数据库的存储速度,和数据的提取速度。
这恐怕是分库分表中最重要的需求。
2 分库分表,使用中间件的方式,进行分表的操作,这是另一种分表的方式,与上边的方式相比,这样的方式更加的通用,通过中间件的方式将数据流自动分割到不同的MYSQL 数据库服务器上,以达到和上边使用特定逻辑达到同样的效果,满足数据的存储扩展和更大吞吐量的需求。
那1 和 2 两种分表的方案,之间的区别,个人理解 1 方案更贴近业务,并且如果是自己的公司来研发方案,则出错,排错,都比较方便。但如果自己定义的方案出现问题,并且已经上了一段生产,如果反悔修改上成本就比较高了。
方案2 采用中间件的方式来说,是大部分,或者说需要快速上线,业务方面方向比较灵活,而且需要分表的表,有点多的情况下,采用的一种方式。
从成本上看1 方案要投入的人力,物力会比较多,方案2 投入的人力,物力比较少,由于中间件是根据很多业务的需求而来所产生的,所以通用性比较强,适应力也比较高。方案1 那就看各家自己的开发水平和经验了。
但为什么方案2在成本较低的情况下 ,有些公司没有用也总结了以下几点
1 中间件的使用,牵扯整体关键业务(分表的表一般都是业务中的主力)自己研发分库分表的方案更有底。
2 中间件的某些设计上的问题,对复杂的查询语句执行,数据的返回,事务下发后,失败的处理等等,都要复杂与单库系统,所以怕后期出现问题,无法解决,所以不使用。
这里从逻辑的角度来看中间件
1 中间件的自带的主键生成的逻辑,是否能满足企业业务中设想的逻辑,满足开发的对于主键设计的需求。
2 中间件对于支持的MYSQL的语法的标准,以及是否可以承受一些复杂语句的查询,降低开发人员在设计系统时的难度。
3 中间件在不使用后,数据的迁移,维护,改变分库分表的更改的成本的问题。
基于上面的几点考虑,标准化,稳定性,有相关支持等等是应该被考虑在使用中间件的基础上的一个考量。
在细节方面,使用中间件考虑的范围会更多一些
比如对于学习成本的需求,中间件的加入不应该提高使用数据库的成本,无论是从人员还是技术方面,与原有的数据库的使用方式越贴近越好。
支持原生的数据库协议,这也是降低学习成本,提高使用的方便感的一个应该由的标准。
当然对中间件的要求中看似没有特点,但很难做到的部分,就是事务的回滚,在一个MYSQL 数据库中进行事务的回滚,是在正常不过的事情, 而将一个事务下发到多台MYSQL 并且在进行事务回滚,这就不是一件简单的事情。
1 对于多个MYSQL 节点中,某个节点的失败如何处理
2 对于执行计划如何打散到多个节点执行,并且保持执行效率
3 整体事务在操作失败后,如何进行事务的回滚
4 对复杂SQL 的拆分,将复杂的查询拆分为基本的关系代数查询树,在下发到各个节点,然后返回数据在进行合并等等。
5 对于复杂的SQL的执行后的数据返回的正确性。
基于中间件的复杂,以及要求,其实我们可以使用的中间件并没有太多的选择大部分都是在使用mycat,更加清晰的了解和理解MYSQL中间件的定义,则是如何搞好分库分表的第一步,实际上也是有其他的中间件可以选择。
看完了这篇文章,相信你对“在MYSQL中怎么分库分表”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。