首页 > 数据库 >MySQL分库分表

MySQL分库分表

时间:2023-06-16 14:36:15浏览次数:43  
标签:分库 数据源 数据库 应用程序 垂直 切分 MySQL 分表 数据

垂直切分

将不同业务模块所使用的表切分到不同的数据库(主机)之上,这样的切能够称之为数据的垂直(纵向)切分

在架构设计中,各个功能模块相互之间的交互点越统一越少,系统的耦合度就越低,系统各个模块的维护性以及扩展性也就越好,实现数据的垂直切分也就越简单

垂直切分的长处

◆ 数据库的拆分简单明了,拆分规则明白;

◆ 应用程序模块清晰明白,整合easy;

◆ 数据维护方便易行,easy定位;

垂直切分的缺点

◆ 部分表的关联无法在数据库级别完毕,须要在程序中完毕;

◆ 对于訪问极其频繁且数据量超大的表仍然存在性能平静,不一定能满足要求;

◆ 事务处理相对更为复杂;

◆ 切分达到一定程度之后,扩展性会遇到限制;

◆ 过读切分可能会带来系统过渡复杂而难以维护;

水平切分

依据表中的数据的逻辑关系,将同一个表中的数据依照某种条件拆分到多台数据库(主机)上面

就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其它的数据库中。为了能够判定各行数据被切分到哪个数据库中了,切分总是要依照某种特定的规则来进行的,如依据某个数字类型字段基于特定数目取模、某个时间类型字段的范围、或者是某个字符类型字段的hash值

水平切分的长处

◆ 表的关联基本能够在数据库端全部完毕;

◆ 不会存在某些超大型数据量和高负载的表遇到瓶颈的问题;

◆ 应用程序端总体架构修改相对较少;

◆ 事务处理相对简单;

◆ 仅仅要切分规则能够定义好,基本上较难遇到扩展性限制;

水平切分的缺点

◆ 切分规则相对更为复杂,非常难抽象出一个能够满足整个数据库的切分规则;

◆ 后期数据的维护难度有所添加,人为手工定位数据更困难;

◆ 应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难;

联合使用

在非常多大型的应用系统中,垂直切分和水平切这两种数据的切分方法基本上都是并存的。并且经常在不断的交替进行,以不断的添加系统的扩展能力。我们在应对不同的应用场景的时候,也须要充分考虑到这两种切分方法各自的局限,以及各自的优势。在不同的时期(负载压力)使用不同的结合方式。

联合切分的长处

◆ 能够充分利用垂直切分和水平切分各自的优势而避免各自的缺陷;

◆ 让系统扩展性得到最大化提升。

联合切分的缺点

◆ 数据库系统架构比較复杂,维护难度更大。

◆ 应用程序架构也相对更复杂;

数据切分及整合方案

数据库中的数据在经过垂直和(或)水平切分被存放在不同的数据库主机之后,应用系统面临的最大问题就是怎样来让这些数据源得到较好的整合

方案

总的来说,存在两种解决思路:

1、在每一个应用程序模块中配置管理自己须要的一个(或者多个)数据源,直接訪问各个数据库,在模块内完毕数据的整合;

2、通过中间代理层来统一管理全部的数据源,后端数据库集群对前端应用程序透明;

数据切分与整合可能存在的问题

引入分布式事务的问题

数据切分之后,可能造成之前的某些事务所涉及到的数据已经不在同一个MySQLServer中了

MySQL5.0之后Innodb提供分布式事务支持,不过对于系统资源的消耗是非常大的

最好能够结合数据库以及应用程序两者来共同解决。各个数据库解决自己身上的事务。然后通过应用程序来控制多个数据库上面的事务

跨节点Join的问题

数据切分之后,可能会造成有些老的Join语句无法继续使用。由于Join使用的数据源可能被切分到多个MySQLServer中了

非得在数据库端来直接解决的话,恐怕仅仅能通过MySQL一种特殊的存储引擎Federated来解决

Federated会保存一份远端表结构的定义信息在本地,不过本地的表定义信息是不会跟着远端的表结构发生对应变化的,所以如果在更新远端表结构的时候并没有更新本地的表定义信息,就可能造成Query执行出错

推荐通过应用程序来进行处理,先在驱动表所在的MySQLServer中取出对应的驱动结果集。然后依据驱动结果集再到被驱动表所在的MySQLServer中取出对应的数据

跨节点合并排序分页问题

标签:分库,数据源,数据库,应用程序,垂直,切分,MySQL,分表,数据
From: https://www.cnblogs.com/yogayao/p/17485428.html

相关文章

  • 二进制文件安装mysql5.7
    yum安装mysql5.7虽然方便,但是安装的路径和配置难以定制化,这边使用二进制安装,即使用官方提供的编译软件包来安装,不需要额外准备依赖的环境软件,安装也会变的更加轻量,且可以定制化。一、自定制规范Mysql本身没有明确的安装规范,但是日常工作中为了便于管理和定位问题,我们需要对Mysql......
  • mysql 启动提示:错误2系统找不到指定文件;
    mysql启动后系统提示错误:mysql启动提示:错误2系统找不到指定文件;问题解决过程:注册表位置: \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql图中所示的位置与拷贝到服务器的mysql部署位置不一致,修改后,系统启动正常。  修改后,mysql正常启动。 ......
  • MySQL索引优化与查询优化
    一:优化方式及数据准备1:优化方式在日常开发中都有哪些维度可以进行数据库调优?如下:①:索引失效、没有充分利用到索引--需要合理建立索引和利用索引②:关联查询太多JOIN(设计缺陷或不得已的需求) --需要对SQL优化③:服务器......
  • linux服务器mysql的简单安装和使用(基于二进制文件方式)
    mysql下载地址https://downloads.mysql.com/archives/community/版本选择 直接放置/root目录下     常规操作查找以前是否装有mysqlrpm-qa|grep-imysql如果找到或者以前安装过有遗留文件,操作如下命令删除命令:rpm-e--nodeps包名删除老版本m......
  • MySQL优化策略
    当数据库出现性能瓶颈时,我们需要进行优化,目前有两类的优化策略硬件层优化:增加机器资源,提升性能软件层优化:SQL调优,表结构优化,读写分离,分库分表,数据库集群数据库性能瓶颈的对外表现:大量请求被阻塞:高并发场景下,连接数不够,大量请求处于阻塞状态SQL操作变慢:比如查询上亿数据的表,没有......
  • python: read mysql
    sql:createdatabasegeovindu;usegeovindu;droptableBookKindList;#书目录createtableBookKindList(BookKindIDINTNOTNULLAUTO_INCREMENT,#自动增加BookKindNamenvarchar(500)notnull,BookKindParentintnull,PRIMARYKEY(BookKindID)......
  • MySQL的执行顺序
    学习java后端离不开MySQL,但是对于一条SQL语句,是如何执行,以及最终返回结果的生成一直有点黑盒,本次梳理了MySQL的执行过程,顺便弄清了一直没懂的Innodb中索引下推优化的过程。一条SQL语句的执行大概分为六个部分初始语句-->语法和词法解析-->语义解析-->进行查询优化,生成执行......
  • SQL 之 DML(MySQL)
    插入数据若插入的列包含外键,需要确保外键的值在被应用的表里是存在的。插入指定列的数据insertinto表名[(列名1,..)]values(列值1,…)前提为省略的列名的属性为空。INSERTINTOEMP(EMPNO,ENAME)VALUES('7369','SMITH');插入所有列的数据insertinto表名values......
  • k8s实战案例之基于StatefulSet控制器运行MySQL一主多从
    1、前言Pod调度运⾏时,如果应⽤不需要任何稳定的标示、有序的部署、删除和扩展,则应该使⽤⼀组⽆状态副本的控制器来部署应⽤,例如Deployment或ReplicaSet更适合⽆状态服务需求,⽽StatefulSet适合管理所有有状态的服务,⽐如MySQL、MongoDB集群等。2、StatefulSet控制器运行MySQL一......
  • python2安装mysqldb
     yuminstallmariadb-devel 或yuminstallmysql-devel 编辑_mysql.c注释2005行 ......