切分数据库

切分数据库


目录
1 简介 1
1.1 切分数据库 1
2 切分数据库表 1
2.1 垂直切分数据库表 1
2.2 水平切分数据库表 1



1 简介
1.1 切分数据库
在大中型项目中,在数据库设计的时候,考虑到数据库最大承受数据量,通常会把数据库或者数据表切分为多个,以降低单个库,单个表的压力。数据库常用的切分方法无非分为垂直切分和水平切分两种。

2 切分数据库表
我们都知道数据库的存储本质其实就是文件数据的存储,试想一下我们要获取一条数据,是在大文件中扫描查取快还是在小文件中扫描查取快,无疑是后一种更快。切分的目的本质就是将大文件数据更改为小文件数据存储。

2.1 垂直切分数据库表
在设计数据库表时往往我们都会根据需求抽象出对象数据,根据范式设计数据库表,这只是一个简单粗略的数据库表设计,不能真正的满足我们的业务需求,健壮的数据库设计不只是满足简单的功能需求,还要考虑到后期的扩展,数据量,性能等问题。
如假设我们从需求提炼设计了一张粗略的用户表,
用户表信息有:ID,姓名,年龄,性别,身份证号,住址。。。
正如上面所见,这样设计数据库表会导致下面问题,
(1) 如果我们将所有用户信息放在一张表中,那么每增加一个用户就会在用户表中增加一条记录数据,随着用户量的增加用户表记录越来越大,导致查取用户数据性能下降。
(2) 在需求中往往只需要获取部分用户信息(如用户名,性别),其他信息只有在查看用户详细信息时才需要获取(如年龄,身份证号,住址等),同时用户信息只有一部分是必须的,其他信息是可选的,这会导致很多字段会存在空存储的现象,而数据库在存取的时候会对空数据和一些不必要的数据进行处理,导致一些性能下降。
解决方案是可以对用户表进行垂直切分,即将大表改小表,将一些不常用、不必要的信息提取出来放在另一张用户详细信息表中关联起来。这样的垂直切分即将一张大用户表改为两张小表。
用户信息表:ID,姓名,性别。
用户详细信息表,ID,年龄,身份证号,住址。。。

2.2 水平切分数据库表
由上面可知垂直切分数据库表可以解决数据库部分性能问题,可是伴随着用户量的增加,也会达到一张数据库表的性能接受范围。为了解决该问题我们还是需要对表进行水平切分,即将一张表水平切分成多个表段(小表)。
我们可以根据需求定量每张表的数据量(N)和预估最大用户数据量(M)来确定分表量(D)。D=M/N,如我们预估将来会有100亿用户,每张表最大定量为100万,那么需要1万张分表来存储用户信息,则我们可以保留用户表user_xxxx四位来扩展用户分表名。
如我们可以根据用户增长ID将前100万的用户信息存储在user_0000表中,将100万到200万的用户存储在user_0001表中。。。以此类推。。。可以将100亿用户存储在这1万张用户表中。当然一个库也不可能存储1万张用户表,这时候也可以根据同样的原理来根据片键来切分数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值