我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL分库分表

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL分库分表

SQL分库分表

历史背景

MySql性能瓶颈

  1. 1.    表数据量过大
  2. 2.    Sql查询过于复杂
  3. 3.    Sql没走索引
  4. 4.    数据库服务器性能低

解决方案

阿里开发手册:单表行数超过500W或者单表容量超过2G

数据库分库分表

  1. 分库分表
  2. 冷热数据分离
  3. 历史数据分离

数据库分库分表

  1. 1.    垂直拆分
    1. 垂直分表(大表拆成多个小表)

 

 

 

优点

  1. 防止单表字段过多产生页分裂从而导致IO次数过多,效率差的问题
  2. 可以达到最大化利用Cache的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起

缺点

 1. 主键出现冗余,需要管理冗余例

 2. 会引起表连接JOIN操作(增加CPU开销

 3. sql以及事务处理复杂

  1. 垂直分库(单个库拆成多个库  微服务系统)

 

 

 

优点

       分散单库访问压力

缺点

            分布式事务问题

  1. 2.    水平拆分
    1. 1.    水平分表

 

 

 

优点

单库单表的数据能保持在一定的量级,有助于性能的提高。
2.切分的表结构相同,应用层改造较少,只需要增加路由规则即可。
3.提高了系统的稳定性和负载能力。

缺点

  1. 切分后,数据是分散的,跨库join操作难和性能差
  2. 拆分规则难以抽象
  3. 分片事务的一致性难以解决
  4. 数据扩容的难度和维护量极大
  5. 2.    水平分库

 

 

 

分库分表算法

  1. 1.    哈希取模算法

 

 

 

优点

   算法简单,数据分布相对均匀

缺点

   扩容问题,需要哈希取模全部数据迁移(比如增加user_05,算法变成id%5,01-04里面数据全部需要重新分布)

  1. 2.    一致性哈希算法

 

 

 

 

 

 

当B需要移除时

 

 

 

hash环的偏斜

在实际的映射中,服务器可能会被映射成如下模样。

 

 

 

如果服务器被映射成上图中的模样,那么被缓存的对象很有可能大部分集中缓存在某一台服务器上,如下图所示。

 

 

 

虚拟节点(定义虚拟节点,让哈希环分布均匀)

 

 

 

 

 

  1. 3.    按照范围分片算法(按照不同的数据业务特性定义分片键)
    1. 按照商家
    2. 按照时间月份
    3. 按照地域

案例

用户表

  1. 1.    功能

注册,登录,查询,修改

  1. 2.    使用范围
    1. 1.    用户端(用户登录,修改用户,信息查询)

根据用户ID查询用户信息->90%

根据phone,email查询用户信息->10%

  1. 2.    管理员端
    1. 统计用户信息
    2. 查询条件多变查询

可以根据用户ID进行分片

 

 

 

 

分库分表中间件

  1. 1.    分库分表组件(Sharding-JDBC 代码实现)

 

 

 

  1. 2.    服务端代理(MyCat)

 

 

 

分库分表问题

  1. 1.    历史数据迁移
  2. 2.    复杂SQL联合查询
  3. 3.    分页问题
  4. 4.    事务问题

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL分库分表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL分库分表

历史背景MySql性能瓶颈1.    表数据量过大2.    Sql查询过于复杂3.    Sql没走索引4.    数据库服务器性能低解决方案阿里开发手册:单表行数超过500W或者单表容量超过2G数据库分库分表分库分表冷热数据分离历史数据分离数据库分库分表1
SQL分库分表
2017-03-08

库表分析-sql语句

/*Navicat MySQL Data TransferSource Server : 本地连接Source Server Version : 80015Source Host : localhost:3306Source
库表分析-sql语句
2016-06-09

SQL Server数据库分区分表的示例分析

这篇文章主要介绍SQL Server数据库分区分表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、 需求说明将数据库Demo中的表按照日期字段进行水平分区分表。要求数据文件按一年一个文件存储,且分区的分割
2023-06-14

分库分表

分库分表前的问题任何问题都是太大或者太小的问题,我们这里面对的数据量太大的问题。用户请求量太大因为单服务器TPS,内存,IO都是有限的。 解决方法:分散请求到多个服务器上; 其实用户请求和执行一个sql查询是本质是一样的,都是请求一个资源,只是用户请求还会经过
分库分表
2022-02-11

彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表)

一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库,垂直分表方案,在数据量及访问压力不是特别大的情况,首先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑水平分库水平分表方案。

mysql分库分表

一、垂直拆分1、垂直分库:在分布式系统开发中,基本都是按照模块划分,每个业务模块建立一个数据库 特点:业务区分度高,方便维护管理;各个模块独立维护,可以分摊系统的维护成本,提高可用性。 2、垂直分表:单张宽表,根据实际业务场景,可以拆分为多个子表。垂直拆分的缺
mysql分库分表
2015-03-08

SpringBoot3分库分表

按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。

分库分表怎样分?

1)分库     业务拆分 - 如顾客,商品,订单各自分独立的库     主备 - 主机做读写,备机只做数据备份     主从(读写分离) - 主机写,从机读     主主 - 任意一台机做写,互相复制     集群 - 一主多备、一主多从、多主多从,主机写,
分库分表怎样分?
2014-07-22

分库分表(了解)

站在架构师的角度来看分库分表  1、单体应用架构 一个归档包(可以是JAR、WAR、EAR或其它归档格式)包含所有功能的应用程序,通常称为单体应用。 优点 便于共享:单个归档文件包含所有功能,便于在团队之间以及不同的部署阶段之间共享。 易于测试:单体应用一
分库分表(了解)
2021-02-06

MySQL垂直分库,水平分库,垂直分表,水平分表

之前经常被问道这些分库分表的概念,只是大概知道,但是具体如何定义的,问什么这么定义还是不太理解,今天对着数据表中的数据沉思的时候,突然间醒悟,原来这些概念非常好理解,而且可以说水平和垂直这两个词用得恰到好处,非常形象地帮助我们理解它们。

数据库分库分表思路

数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的性能问题,从而达到提升数据库操作性能的目的。 数据切分根据其切分类
数据库分库分表思路
2017-10-27

数据库读写分离和分库分表

读写分离对于提升数据库的并发非常有效,但是,同时也会引来一个问题:主库和从库的数据存在延迟,比如你写完主库之后,主库的数据同步到从库是需要时间的,这个时间差就导致了主库和从库的数据不一致性问题。这也就是我们经常说的 主从同步延迟 。

编程热搜

目录