数据库sharding(scale up to scale out)

sharding是将一个大数据库按照必定规则拆分红多个小数据库的一门技术. 算法

 

    当咱们的应用数据量愈来愈多,访问量愈来愈大的时候,咱们会做何选择?继续提高数据库服务器的性能仍是采用一项技术让数据库平滑扩展?虽然伴随着服务器的更新换代,性能愈来愈好,更换更加豪华的服务器能暂时解决这个问题,可是不管是从花费和可控都没法让人满意。这时数据库sharding是一个更加可行的方案。 数据库

 

    经常使用的sharding方案有如下几种, 服务器

 

    1。按功能划分(垂直切分) 网络

 

        将不一样功能相关的表放到不一样的数据库中,譬如将用户管理相关表放到shard 1上,将blog相关表放到shard 2上。。。这样作的好处是很是直观,当须要用户列表时,我就到shard 1上获取。。。。这样也有一个问题,当某一部分的功能其数据量或性能要求超出了可控的范围,咱们就须要继续对其进行深刻的sharding。 架构

 

    2。按表中某一字段值的范围划分(水平切分) oracle

 

        当伴随着某一个表的数据量愈来愈大,以致于不能承受的时候,就须要对她进行进一步的切分。一种选择是根据key的范围来作切分,譬如userID为1-10000的放到shard 10上,userID为10000到20000的放到shanrd 11上。。。这样的扩展就是可预见的。另外一种是根据某一字段值得来划分,譬如根据用户名的首字母,若是是a-d,就属于shard 20,e-h就属于shard 21。。。这样作也存在不均衡性,当某个范围超出了shard所能承受的范围就须要继续切分。还有按日期切分等等, memcached

 

    3。基于hash的切分 性能

 

        相似于memcached的key hash算法,一开始肯定切分数据库的个数,经过hash取模来决定使用哪台shard。这种方法可以平均的来分配数据,可是伴随着数据量的增大,须要进行扩展的时候,这种方式没法作到在线扩容。每增长节点的时候,就须要对hash算法从新运算,数据须要从新割接。 大数据

 

    4。基于路由表的切分 架构设计

 

         前面的几种方式都是跟据应用的数据来决定操做的shard,基于路由表的切分是一种更加松散的方法。它单独维护一张路由表,根据用户的某一属性来查找路由表决定使用哪一个shard,这种方式是一种更加通用的方案。譬如咱们在系统中维护一张表-(用户所属省-〉shard),这样每一个用户咱们知道是哪一个省的,去路由表查找,就知道它所在的shard。由于每次数据操做的时候都须要进行路由的查找,因此将这些内容存储到一台独立cache上是一个很是好的方式,譬如memcached。这种切分的方式同时也带来了另外一个好处,当须要增长shard的时候,能够在不影响在线应用的状况下来执行,固然这也跟应用程序的架构设计相关,你的设计必须适用这种增长。

 

 

    虽然应用sharding会带来显而易见的好处,可是它也有一些固有的问题须要咱们了解,这些问题大体分红如下几类,

 

    1。shard的扩容

 

        当当前的shard已经不能适用当前的应用需求时,就须要对shard数据库进行扩容,增长shard意味着须要对原有的shard数据进行迁移,这个过程是很是复杂,并且可能会致使数据的不一致(一边写、一边迁移)或者其余应用问题,所以扩容通常选择在凌晨等时间进行。

 

    2。联合多个shard的表数据查询

 

        这个是shard固有的问题,当遇到这样的问题时,你须要获取各个shard的数据,而后对这些数据进行汇总,不少时候由于如今的网络速度比较发达这个问题能够几乎被忽略掉。可是若是要进行数据的分析或挖掘,shard就会存在问题,一般面对这种对于数据要求不是那么实时的状况下,能够采用将shard数据同步到汇总数据库的方案,olap能够在这台汇总数据库上进行,这就须要在每台shard上进行数据的定时同步,这增长了程序的复杂性;若是要求实时的状况下,采用sharding方案会是一个毁灭性打击。

 

    3。其余

 

        咱们如今作的系统就是采用的按照路由表切分的sharding方案,并且咱们须要要求不是那么实时的汇总数据以提供数据的分析和挖掘,同时咱们的基础数据都是在汇总数据库中进行管理,经过oracle的高级复制到shard节点上。在shard数据库向汇总数据库同步数据的时候,咱们是经过oracle数据库的存储过程实现的,这种架构方式致使了数据库很是的复杂,同时还存在了一些其余问题,譬如同步会平白无故的断掉。。。这就须要采用一些其余手段来维持数据的延迟一致性。

 

    咱们的sharding还在改进,咱们的shard还在增长,咱们还须要不断努力使咱们的应用更加高效。

 

    有时候以为咱们的社会就像一个巨大的多层sharding方案,中央、省(自治区)、市。。。

 

-------------------------------------------------------------

还有一种数据库方案是master-slave,一台master主要负责数据的更新,而后经过高级复制等手段将数据复制到各个slave节点,slave节点负责查询。这种结构是无论master和slave都拥有所有的数据,master到slave的数据存在必定的延迟。能够跟sharding方案结合使用。

相关文章
相关标签/搜索