searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

分库分表-Sharding-JDBC1

2024-06-20 03:17:30
2
0

一、什么是分库分表

分库分表就是按照一定的规则,对原有的数据库和表进行拆分,把原本存储于一个库的数据分玦存储到多 个库上,把原本存储于一个表的数据分块存储到多个表上。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。

分表

就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它。

分库

一旦分表,一个库中的表会越来越多

二、为什么要分库分表

问题描述:

1、 单个表数据量越大,读写锁,插入操作重新建立索引效率越低;
2、 单个库数据量太大(一个数据库数据量到1T-2T就是极限);
3、 单个数据库服务器压力过大;
4、 读写速度遇到瓶颈(并发量几百);

mysql单表经验

  • 300W Mysql 可以轻松抗住
  • 600 W 数据开始卡,优化可以解决(表结构,索引设计)
  • 800W ~ 1000W 牛逼的DBA 优化都会遇到瓶颈

一般来说 MySQL 数据库单表记录最好控制在 500 万条(这是个经验数字)

分库分表目的:分担单台设备负载

随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。

三、分库分表有哪些形式

分库分表的基本思想:对数据切分,分而治之

3.1、垂直(纵向)拆分

将不同的表(或者 Schema)拆分到不同的数据库(主机)之上,垂直划分数据库是横据业务进行划分,例如将shop中涉及商品、订单、用户的表分别划分出成商品库、订单库、用户库,通过降低单库(表)的大小来提高性能,但这种方式并没有解决高数据量带来的性能提耗(并没有减少表的数据量)

分表的情况就是将一个大表根据业务功能拆分成一个个子表。常见是把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的,只是字段不一样,使用主键关联。

表垂直拆分是对列的拆分,拆分完成后每张单表相对于原表row 不变,column减少(可以理解A4纸左右对折切割)

 

优点:

1、 拆分后业务清晰,拆分规则明确;
2、 降低单节点数据库的负载,按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上,;
3、 可以达到最大化利用Cache的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起;
4、 数据维护相对简单;

缺点:

1、 表拆分主键出现冗余,需要管理冗余例;
2、 会引起表连接JOIN操作(增加CPU开销)可以通过在业务服务器上进行join来减少数据库压力;
3、 依然存在单表数据量过大的问题(需要水平拆分);
4、 事务处理复杂;

3.2、水平(横向)拆分

根据表中的数据的逻辑关系,将同一张表中的数据按照某种条件拆分到多台数据库(主机)上。水平划分是根据一定规则,例如时间或者id序列值等进行数据的拆分。相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表包含一部分数据。
水平切分是对数据行的切分,拆分完成后每张单表相对于原表column不变,row减少(可以理解A4纸上下对折切割)

优点:

1、 不存在单库大数据和高并发的性能瓶颈;
2、 应用端改造较少;
3、 提高了系统的稳定性和负载能力;

缺点:

1、 分片事务一致性难以解决;
2、 跨节点Join性能差,逻辑复杂;
3、 数据多次扩展难度跟维护量极大;

 

四、分库分表组件有哪些

1. Atlas

2. Cobar

3. Sharding JDBC

4. TDDL

5. Mycat

0条评论
作者已关闭评论
孟****寅
44文章数
0粉丝数
孟****寅
44 文章 | 0 粉丝
原创

分库分表-Sharding-JDBC1

2024-06-20 03:17:30
2
0

一、什么是分库分表

分库分表就是按照一定的规则,对原有的数据库和表进行拆分,把原本存储于一个库的数据分玦存储到多 个库上,把原本存储于一个表的数据分块存储到多个表上。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。

分表

就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它。

分库

一旦分表,一个库中的表会越来越多

二、为什么要分库分表

问题描述:

1、 单个表数据量越大,读写锁,插入操作重新建立索引效率越低;
2、 单个库数据量太大(一个数据库数据量到1T-2T就是极限);
3、 单个数据库服务器压力过大;
4、 读写速度遇到瓶颈(并发量几百);

mysql单表经验

  • 300W Mysql 可以轻松抗住
  • 600 W 数据开始卡,优化可以解决(表结构,索引设计)
  • 800W ~ 1000W 牛逼的DBA 优化都会遇到瓶颈

一般来说 MySQL 数据库单表记录最好控制在 500 万条(这是个经验数字)

分库分表目的:分担单台设备负载

随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。

三、分库分表有哪些形式

分库分表的基本思想:对数据切分,分而治之

3.1、垂直(纵向)拆分

将不同的表(或者 Schema)拆分到不同的数据库(主机)之上,垂直划分数据库是横据业务进行划分,例如将shop中涉及商品、订单、用户的表分别划分出成商品库、订单库、用户库,通过降低单库(表)的大小来提高性能,但这种方式并没有解决高数据量带来的性能提耗(并没有减少表的数据量)

分表的情况就是将一个大表根据业务功能拆分成一个个子表。常见是把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的,只是字段不一样,使用主键关联。

表垂直拆分是对列的拆分,拆分完成后每张单表相对于原表row 不变,column减少(可以理解A4纸左右对折切割)

 

优点:

1、 拆分后业务清晰,拆分规则明确;
2、 降低单节点数据库的负载,按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上,;
3、 可以达到最大化利用Cache的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起;
4、 数据维护相对简单;

缺点:

1、 表拆分主键出现冗余,需要管理冗余例;
2、 会引起表连接JOIN操作(增加CPU开销)可以通过在业务服务器上进行join来减少数据库压力;
3、 依然存在单表数据量过大的问题(需要水平拆分);
4、 事务处理复杂;

3.2、水平(横向)拆分

根据表中的数据的逻辑关系,将同一张表中的数据按照某种条件拆分到多台数据库(主机)上。水平划分是根据一定规则,例如时间或者id序列值等进行数据的拆分。相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表包含一部分数据。
水平切分是对数据行的切分,拆分完成后每张单表相对于原表column不变,row减少(可以理解A4纸上下对折切割)

优点:

1、 不存在单库大数据和高并发的性能瓶颈;
2、 应用端改造较少;
3、 提高了系统的稳定性和负载能力;

缺点:

1、 分片事务一致性难以解决;
2、 跨节点Join性能差,逻辑复杂;
3、 数据多次扩展难度跟维护量极大;

 

四、分库分表组件有哪些

1. Atlas

2. Cobar

3. Sharding JDBC

4. TDDL

5. Mycat

文章来自个人专栏
行业动态-mdy
44 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0