ShardingSphere-分库分表(垂直切分) | 学习笔记

简介: 快速学习ShardingSphere-分库分表(垂直切分)。

开发者学堂课程【数据库中间件ShardingSphere详解ShardingSphere-分库分表(垂直切分)学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/666/detail/11241


 ShardingSphere-分库分表(垂直切分)


内容介绍:

一.垂直分表

二.垂直分库


什么是分库分表,分库分表指主要为了解决由于数据量过大,而造成数据库性能问题。

分库分表方式

1、分库分表有两种方式:一种是垂直切分或者叫垂直拆分,另一种水平切分

2、垂直切分有两种方式分别为:垂直分表和垂直分库,垂直切分可以对表和库切分。

3、水平切分有两种方式分别为:水平分库和水平分库

下面详细介绍:什么是垂直拆分,什么是水平拆分?讲师会结合案例,对基础概念详细介绍。本节课程主要学习 ShardingSphere 中基本概念,然后根据相关产品完成代码实现。

 

一,垂直分表

根据案例,引出垂直分表:打开某一网站,例如 www.gulixueyuan.com(谷粒学院)谷粒学院为在线教育平台,可以进行相关课程学习,在网站中可以搜索或者找到某一课程,然后点击课程可以进行学习。以谷粒学院为例,说明垂直拆分与水平拆分的概念。第一个说明垂直拆分,在谷粒学院中进行课程学习首先进入课程列表页面,在课程列表页面中列出当前所能进行学习的课程,对某一课程可以进行条件查询或分页查询。在数据库中每个课程消息需要存储在同一表中。在课程列表页面中,某一课程只显示两个数据:一个是课程封面,第二个是课程名称,价格;在课程列表页面中只显示基本信息。

5.1.png

 

当点击某一课程进入详情页面,包含课程介绍,章节,笔记等信息。这些数据都会存储在数据库中课程表中。

在网站中有相关课程,而课程按存储方式需要在线网站数据库例如 DB,在数据库中有一张表存储课程信息例如表名为课程表,课程表中包含信息例如:课程名称,课程封面,如果课程收费还应包含课程价格,课程目录,课程评价,课程笔记,等等其他信息。在网站课程列表页面中课程信息按此存储方式存储。应用到实际场景中,随着时间推移课程列表中课程会逐渐增加,按照目前方式所以课程信息都需要存储在数据库中课程表中,当数据表中数据逐渐增大从几十条到几百条到几千条到几万条到几百万条到几千万条,这时会出现问题:当数据表中数据过大,在对数据表中数据进行增删改查时效率会非常低,这时对数据进行分库分表处理。

5.2.png

 

首先说明垂直分表,先说明概念,然后进行具体操作。概念:(1)操作数据库中某张表,把这张表中一部分字段数据存到一张新表里面,再把这张表另一部分字段数据存到另外一张表里面,这个过程就叫垂直分表。例如一张表中有十条数据,把其中五条存到一张新表,把另外五条数据存到另一张表中。结合具体案例说明:在网站中课程列表页面中只查看课程封面,课程名称或者价格;不需要查看课程描述。现在可以把课程基本信息,例如课程封面,课程名称,课程价格存储在一张表中;另一张表存储课程描述,课程笔记等等。这就是简单的垂直分表。

例如数据库中有一张课程表:

5.3.png

 

对这张表进行垂直拆分或垂直分表。按照垂直拆分概念,把课程表拆分成两个表:第一张表叫课程基本信息表,第二张表叫课程描述表。把课程表中课程名称,课程封面,课程价格这些基本信息存到课程基本信息表中,把课程表中课程描述,课程其他信息存放到课程描述表中。把课程表数据拆分为两张表数据,两张表数据加在一起构成完整课程信息。这种方式就叫垂直拆分。

5.4.png

 

把数据库中某张表一部分数据放到一张表中,另一部分数据再放到另一张表中,最终构成一张表。具体到例子中:假如课程表中有一万条数据,把课程名称,课程封面,课程价格三个字段数据放到课程基本信息表中数据量为一万条,放入到课程描述表中的字段数据同样为一万条,这是垂直拆分一个特点。垂直拆分好处:例如在网站中课程列表页面中,只需要查询课程基本信息表足以满足需求,因为课程描述中有大量数据如果在进行搜索时会占用大量IO,如果只显示课程基本信息那么在查询时可以只查询基本信息。另一好处:当对课程描述进行修改,如果按照未进行垂直拆分时方式其他人不能对该课程进行操作即对该表进行锁定,这时只修改课程描述课程封面,课程名称,课程价格同样需要锁定,影响查询效率;在进行垂直拆分后,只修改课程描述时课程基本信息不受影响。垂直分表,按照相关查询频率,相关需求把一张表拆分成多张表,把这张表中一部分字段数据存到一张表中,再把这张表另一部分字段数据存到另外一张中。对课程查询是垂直拆分的一个典例。希望大家记住垂直拆分好处,后面课程中会用到 ShardingSphere 中相关产品会完成具体效果。基本概念不需要刻意的去记忆:到底什么是垂直分表,什么是水平分表,只需要根据具体案例理解概念,因为刻意的进行记忆容易混淆概念。

 

二.垂直分库

在课程信息分表案例时,虽然按垂直拆分方式,把一张表拆分为两张表(可以根据实际情况分为多张表),拆分后的表还是在同一数据库中,如果进行查询会造成IO量增大,例如之前数据库中只对一张表查询,然后多了一张表,多了两张表,多了三张表再进行查询数据库压力会增大,在这种情况下可以进行垂直分库。分表之后依旧在同一数据库中,同样会增加查询数据库压力,这时可以进行分库处理。

垂直分库:把单一数据库按照业务进行划分,做到专库专表进行使用。例如按具体业务,在在线教育中在课程列表页面中所以课程有课程列表,课程详情页面;如果课程需要收费,在课程详情页面中学习课程时需要购买课程,在这个过程中会产生课程信息表,课程订单表。如果其中有一个DB数据库,数据库中有商品表,按照垂直拆分对商品表进行拆分,拆分为商品基本信息和商品描述信息。因为课程需要收费,顾客进行购买后需要生产订单,数据库中除了商品表外还需要有订单表,订单表中存储生成订单。商品表和订单表都在同一数据库中,在同一数据库中进行查询会造成数据操作中产生大量IO,阻碍查询效率提高;这时可以进行垂直分表,对商品表进行拆分但是订单表并不容易拆分。这时可以在原有基础上,对数据库进行拆分,垂直分库是按照业务,把每一个业务专门建一个数据库其中存放专门做业务的表。

对于DB数据库垂直分库,首先需要创建两个数据库,第一个数据库为课程数据库,第二个为订单数据库;在课程数据库中存放课程基本信息表和课程描述表,在订单数据库中存放订单表,在部署时把课程数据库部署在一台服务器上,把订单数据库部署到一台服务器上,它们部署在不同服务器上,再进行数据库操作就做到专库专用,减少数据库IO压力,因为现在是不同服务器上不同数据库真正做到专库专用,做课程就访问课程数据库做订单就访问订单数据库,这种方式就叫垂直分库。

5.5.png

 

垂直分库做法是把单一数据库按照业务进行划分,做到专库专用。例如当课程表与订单表存放在同一数据库,把课程与订单可以分为两个数据库,一个课程数据库一个订单数据库,在课程数据库中存放课程基本信息表和课程描述表,在订单数据库中存放订单表,把它们部署到不同服务器上做到专库专用。

相关文章
|
4天前
|
存储 大数据 数据库
分库分表知识总结(三)之水平分表
分库分表知识总结(三)之水平分表
50 0
|
4天前
|
存储 监控 数据库
分库分表知识总结(二)之垂直分表
分库分表知识总结(二)之垂直分表
52 1
|
9月前
|
存储 算法 Java
从零玩转ShardingSphere分库分表 (概括)
从零玩转ShardingSphere分库分表 (概括)
65 0
|
存储 SQL 运维
2、【ShardingSphere】做优化上来就分库分表?请慎重分库分表
读写分离,基本是目前商业开发最可靠的手段了。让我们有了更好的数据查询效率。最大的缺陷在于读写分离会增加MySQL服务器的预算。同时MySQL在高并发的情况下,slave也会有延迟,错误等。
227 0
|
存储 中间件 数据库
ShardingSphere-分库分表(水平切分) | 学习笔记
快速学习ShardingSphere-分库分表(水平切分)。
222 0
ShardingSphere-分库分表(水平切分) | 学习笔记
|
中间件 Java 数据库连接
ShardingSphere-Sharding-JDBC (垂直切分)| 学习笔记
快速学习ShardingSphere-Sharding-JDBC (垂直切分)。
109 0
ShardingSphere-Sharding-JDBC (垂直切分)| 学习笔记
|
中间件 数据库 开发者
ShardingSphere-Sharding-JDBC水平分库(2)| 学习笔记
快速学习ShardingSphere-Sharding-JDBC水平分库(2)。
81 0
ShardingSphere-Sharding-JDBC水平分库(2)| 学习笔记
|
SQL druid 算法
ShardingSphere-Sharding-JDBC水平分表(分片策略) | 学习笔记
快速学习ShardingSphere-Sharding-JDBC水平分表(分片策略)。
522 0
ShardingSphere-Sharding-JDBC水平分表(分片策略) | 学习笔记
|
SQL 算法 Java
ShardingSphere-Sharding-JDBC水平分库(1) | 学习笔记
快速学习ShardingSphere-Sharding-JDBC水平分库(1)。
148 0
ShardingSphere-Sharding-JDBC水平分库(1) | 学习笔记
|
SQL 算法 Java
ShardingSphere-Sharding-JDBC水平分表(最终测试) | 学习笔记
快速学习ShardingSphere-Sharding-JDBC水平分表(最终测试)。
160 0
ShardingSphere-Sharding-JDBC水平分表(最终测试) | 学习笔记