数据库分区

举报
橘座 发表于 2019/09/05 21:46:59 2019/09/05
【摘要】

定义:数据库分区是一种对表的分割,分区对访问用户是透明的。分区能够提高数据库的读写性能,提高数据库的效率,但又不是总能提供效率。

优缺点:

1、分区技术就是把一个大块数据分成n小块,这样查询的时候可以快速定位到某一小块上,在小块中寻址可以快很多。另一方面CPU比磁盘IO快很多倍,而硬件上又有多个磁盘,或者是RAID(廉价磁盘冗余阵列),可以让数据库驱动CPU同时去读写不同的磁盘,这样才有可能可以提高效率。

2、分区有时候不能提高读写效率,例如按照日期字段去分区MSDN例子,这个实例中是按照记录的生成时间来分区的,把一年的数据分割成12个分区,每月一个。这样的分区导致分区并不能实现CPU同步写并提高写入性能,因为在同一个时段CPU总是要写入到最新的那一个分区对应的磁盘中。而且这样也不一定能够提高读取性能,具体要看根据什么字段来查询,如果是根据时间来查询,根据时间生成报表那么这种分区肯定会提高查询的效率,但是如果是按照某个客户查询客户最近1年内的账单数据,这样数据分布到不同的分区上,这样的话效率就不一定能提高了,这要看数据在同一个分区上连续分布的读性能高,还是CPU从几个磁盘上同步读取,然后在合并数据的性能更高一些,这和读取数据的记录数也有关系。

如何使用:

具体要是分区和涉及的业务而定。例如:做一个论坛,对论坛的帖子和回复表进行分区。论坛中最常见的

写操作:

1)发帖 

2)回复帖子,

最常见的读操作是

1) 根据帖子id显示帖子详情和分页的帖子回复 

2) 根据帖子版面帖子列表页根据版面id分页读取帖子列表数据

怎么分区更合适呢?(现在还没有准确答案)

方案1. 根据帖子ID区域段分区(1-300w一个分区、300w-600w一个分区⋯),这样理论上可以提高帖子详细页的读取速度,而对于写操作性能没有益处,对于根据版面id读取帖子列表页有可能有益

方案2. 根据版面id进行分区,这样对于写性能应该有提高,不同的分区对应不同的版面,当有两个版面同时有发帖回帖操作时,有可能可以并发写。对于根据版面id获得帖子列表页数据也可以提高性能,而对于帖子详细信息页没有性能影响。

多大数据库需要分区:

目前无准确定义,经验值一个表的记录超过1000w,并且每个月百万数据量增长,那么就有可能需要分区。



文章转自异步社区

原文链接  https://www.epubit.com/articleDetails?id=N9f4540bf-66f7-4959-88ae-0606fcae0b58


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。