大数据存储之分表分库

随着访问量和数据量的增长,即使一台单机能服务高达几个TB的数据、提供几万QPS的服务能力,也不足以满足大型系统的需求,便要开始实现分表分库。

常用分表分库方法:

一、水平分库

对主键进行hash或者取模(其实是一种特殊的hash),把数据分布到不同的DB服务器上,客户端通过路由或规则访问特定的数据库,将整个系统的数据和访问负载分散到多台服务器上,降低了单台机器的负载压力。

缺点:

第一,   数据和负载增加后添加机器的操作比较复杂;

第二,   许多跨行/跨表的修改通常涉及到多台机器,难以支持事务;

第三,   有些范围查询需要访问几乎所有机器;

第四,   RDBMS单机数据量小(例如许多情况下MySQL单机支撑200GB左右的数据时会有较好的性能),可能消耗较大的机器资源;

 

二、分布式B+树(类似于BigTable和HBase)

按主键的范围动态拆库,即把整个表看成主键的B+树,每个叶子节点(大约两百多MB)对应一个连续的主键范围,叶子节点可能因为修改删除等变得太大或太小从而进行分裂或者合并,容错、故障恢复以及负载平衡等都以叶子节点为单位

 

优点:简单地增加机器就可以,并且少量突发的机器故障对使用者甚至是透明的,负载平衡也比前一种方案更好,范围查询很容易实现且高效

缺点:事务的实现,因为BigTable只有单行事务,难以实现跨行跨表

你可能感兴趣的:(大数据存储之分表分库)