Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5761297
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: Mysql/postgreSQL

2013-03-12 16:28:19

        Sharding的基本思想就是要把一个数据库切分为多个部分放到不同的数据库服务器上,从而解决单一数据库的性能问题。简单来说,如果因为表多而数据多,则适合于垂直切分;如果表不多而单张表的数据非常多,则适合于水平切分。现实中,一般都是二者交织在一起而综合使用垂直和水平切分,从而将数据库切分为类似矩阵一样可以无限扩充的数据库服务器阵列。
一、垂直切分
        通俗来讲,垂直切分也就是按照业务分库分表。垂直切分的基本思路是分析表间的聚合关系,将关系紧密的表放在一起。

二、水平切分
        水平切分就是在表的KEY上做文章,按照一定规则将大表划分为小表分而治之,例如:好友关系表,一般有三种切分规则:
1、按号段切分
        以ID数字大小区分,比如:1~10000对应DB1,10001~20000对应DB2,以此类推。
        优点:可部分迁移;
        缺点:数据分布不均匀。
2、hash取模切分
        对ID进行hash(如果ID是数值型的直接用ID值,如果ID是非数值型的可以对其ACSII码求和得出一个值),然后根据切分规模选取一个数字(例如:切分为4个库,则数字为4),用ID的hash值对数字4取模,即ID%4,结果为0的对应DB0,结果为1的对应DB1,结果为2的对应DB2,结果为3的对应DB3,这样数据就非常均匀地分配到4个DB中了。
        优点:数据分布均匀;
        缺点:数据迁移麻烦,不能按机器性能分摊数据。
3、在认证库中保存数据库配置
        建立一个单独的DB用于存储ID与分片DB之间的映射关系,每次访问数据库时先查询这个数据库以得到分片的DB信息,然后进行实际数据操作。
        优点:灵活性强,一对一关系;
        缺点:每次实际数据操作前都要多一次认证查询操作,性能大打折扣。

        当然这几种方式也不是截然分开的,可以根据实际情况混合使用。

        数据切分一般都遵循先垂直切分再水平切分的原则进行,垂直切分是否合理直接影响到水平切分后的跨表查询问题,这也是数据切分时最关键的问题。

        更多信息也可以参看。

    
阅读(3684) | 评论(5) | 转发(1) |
给主人留下些什么吧!~~

scq2099yt2013-04-08 21:08:40

CU博客助理:嘉宾点评:看完整篇文章,诚如作者的签名中介绍自己的一样,真是相当资深和有经验的系统
架构师,文章写的很棒,图文并茂好博文的典型。
     通过读文章也能“见”人、“识”人,能如此研究、认真书写、细致画图的人非常
少见。也是老方最近最为称赞的。
      我要替大家感谢作者,受教了,向您学习!还请您保持行文的风格,让更多的人
受益!
(感谢您参与“原创博文评选”获奖结果即将公布)

多谢多谢,一定再接再厉

回复 | 举报

CU博客助理2013-04-08 15:11:39

嘉宾点评:看完整篇文章,诚如作者的签名中介绍自己的一样,真是相当资深和有经验的系统
架构师,文章写的很棒,图文并茂好博文的典型。
     通过读文章也能“见”人、“识”人,能如此研究、认真书写、细致画图的人非常
少见。也是老方最近最为称赞的。
      我要替大家感谢作者,受教了,向您学习!还请您保持行文的风格,让更多的人
受益!
(感谢您参与“原创博文评选”获奖结果即将公布)

scq2099yt2013-04-07 22:10:52

ning_lianjie:"数据库切分"谈起来容易,实施起来非常困难,通常都需要改变逻辑,或者架构的调整.如果楼主能理论联系实际,分享一个切分的案例,那最好不过了.

有时间的话,会写一篇的,呵呵

回复 | 举报

ning_lianjie2013-04-07 21:47:03

"数据库切分"谈起来容易,实施起来非常困难,通常都需要改变逻辑,或者架构的调整.如果楼主能理论联系实际,分享一个切分的案例,那最好不过了.

scq2099yt2013-03-12 16:28:55

文明上网,理性发言...