暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【基础知识】分布式数据库——分片


【干货】浅谈分布式数据库中间件之分库分表——中间件小哥

https://segmentfault.com/a/1190000015627336


DDM——Distributed DataBase Middleware(分布式数据库中间件)



分库分表,顾名思义分库就是把原本存储于一个库的数据分块存储到多个库上,分表把原本存储于一个表的数据分块存储到多个表上。


关于分库分表,我们将从什么是数据分片及如何进行分片两方面对DDM分库分表做一个阐释。


什么是数据分片?

分片是解决数据库存储容量限制的直接途径。

分片包括垂直分片水平分片两种方式。


垂直分片:

垂直分片又叫纵向分割,即以逻辑表为单位,把原有数据库切分成多个数据库。切分后不同的表存储在不同的数据库上。

垂直分片与业务架构设计有密切的联系。比如从业务领域对系统进行架构优化,分成多个子业务系统,各个子业务系统耦合度较低。子业务系统间以接口方式进行数据通信和数据交换。

垂直拆分后业务清晰,拆分规则明确,系统之间容易整合与扩展。一般用于数据库上层架构设计。

可以看到垂直分片后各个模块之间直接独立,简洁清晰明了,各个模块之间几乎没有不必要的关联,对于开发工作的开展与推进具有积极的作用。

水平分片:

水平分片又叫横向分割,即以逻辑表中的数据行记录为单位,把原有逻辑数据库切分成多个物理数据库分片,表数据记录分布存储在各个分片上。

水平分片主要用业务架构无法继续细分,而数据库中单张表数据量太大,查询性能下降的场景。通过水平分片,即解决单库容量问题,同时提高并发查询性能。




如何进行分片:

首先最重要的就是分片的原则,这是分片的规则与最终的验证正确性的基准。

主要分为三个点:

  • 完备性

    如果全局关系 R 划分为片段 R1,R2....Rn ,则对于R中任意数据项d(d属于R),一定存在于d属于Ri (1<=i<=n) 

  • 可重构性

    所有片段必须可以重新构成全局数据

  • 不相交性

    划分的各片段所包含的数据的交集为空



水平分片的例题:


1.设有雇员关系 EMP{ENO,ENAME,SALARY,DNO},其中,ENO为雇员编号,ENAME为雇员姓名,SALARY为雇员工资,DNO为雇员所在的部门的部门编号,其中元组如下。

ENO
ENAME
SALARY
DNO
001
张三1500
201
002李四1400
202
003王五800
203


按下面分片条件进行分段:

  • E1:满足(DNO=201)的所有元组

  • E2:满足(DNO=202)的所有元组

  • E3:满足(DNO<>201 AND DNO<>202) (其中<>在书写时应该接上了,其表示的意思就是非的意思)


从上面的分片可知,将关系EMP分成了三个子关系,按照部门号进行了分割。


故分片属性为:部门编号DNO


分片条件为:

  • E1: DNO=201

  • E2: DNO=202

  • E3: DNO<>201 AND DNO<>202


各关系的内容为:

  • E1:

001张三
1500
201
  • E2:

002李四
1400
202
  • E3:

003王五
800
203


根据水平分片定义,满足:

1)E1 E2 E3与EMP具有相同的关系模式

2)E1∪E2∪E3=EMP

3)E1∩E2=空 E1∩E3=空 E2∩E3=空

因此,E1 E2 E3是EMP的水平分片。


注意:!  若一个关系的分片不是基于关系本身的属性 ,而是根据另一个与其具有关联关系的属性来划分,这种划分称作:导出水平划分。




2.设有雇员关系 EMP{ENO,ENAME,SALARY,DNO}和关系WORKS{ENO,PRJNO,HOURS},ENO为雇员编号,PRJNO为雇员参与的项目编号,HOURS为雇员参与项目的小时数,两个元组如下:

EMP元组

ENO
ENAME
SALARY
DNO
001
张三1500
201
002李四1400
202
003王五800
203

WORKS元组

ENO
PRJNOHOURS
001
1240
002
1
480
003
2
300

要求:将WORKS按DNO进行水平分片,得到的导出水平分片为 W1 W2 W3


  • W1:满足(DNO=201)的所有元组

  • W2:满足(DNO=202)的所有元组

  • W3:满足(DNO<>201 AND DNO<>202)

则分片条件同EMP的水平分片条件


分片属性:部门的编号DNO

分片条件:

  • W1: DNO=201

  • W2: DNO=202

  • W3: DNO<>201 AND DNO<>202

各子关系的内容是:


W1:

001
1
240

W2:

002
1
480

W3:

003
2
300

根据水平分片定义,满足:

1)W1 W2 W3与EMP具有相同的关系模式

2)W1∪W2∪W3=EMP

3)W1∩W2=空 W1∩W3=空 W2∩W3=空

因此,W1 W2 W3是WORKS的水平分片。




垂直分片的例题:


垂直分片的条件:

1)Attr(R1)∪Attr(R2)∪........Attr(Rn)=Attr(R)

2){R1,R2,R3......Rn}是关系R的无损分解

3)Attr(R1)∩Attr(R2)∩Attr(R3)∩........∩Attr(Rn)=主键



1.设有雇员关系 EMP{ENO,ENAME,BIRTH,SALARY,DNO},其中,ENO为雇员编号,ENAME为雇员姓名,BIRTH为雇员出生日期,SALARY为雇员工资,DNO为雇员所在的部门的部门编号,其中元组如下。

ENO
ENAME
BIRTH
SALARY
DNO
001
张三1960.5.2
1500
201
002李四1957.3.5
1400
202
003王五1985.2.4
800
203


假设存在 E1{ENO,ENAME,BIRTH} 和 E2{ENO,SALARY,DNO} ,则E1和E2中元组分别是:

E1

ENO
ENAMEBIRTH
001
张三
1960.5.2
002
李四
1957.3.5
003
王五
1985.2.4


E2:

ENO
SALARY
DNO
001
1500
201
002
1400
202
003
1200
203

根据垂直分片条件可知:

1)E1和E2是EMP的无损分解

2)E1∪E2=EMP

3)E1∩ E2={ENO}

因此,满足垂直分片条件,故E1和E2是EMP的垂直分片。


混合分片:就是既包含水平分片又包含垂直分片

简单谓词与小项谓词:

查询谓词 分出 简单谓词和小项谓词

简单谓词:只含有一个操作符号的查询谓词成为简单谓词

比如 "DNO=201"和"SALARY>1000"为简单谓词

小项谓词:有多个简单谓词组成的查询谓词称为小项谓词

比如:"DNO=201 ^ SALARY>1000"为小项谓词



文章转载自码农智涵的程序人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论