彻底解决数据库去中心化问题

1)首先垂直切分,按业务模块把一些紧密联系的表分在一起(按表切分),形成一个抽象的vertical partition

2)水平切分。垂直切分之后的单个vertical partition(甚至其中单个表)仍然可能太大,一个server放不下,进一步按行切分,这时候需要选择一个聚合根作为记录的horizontal partiotion的标志,一般是userId,对于Forum模块,forumId是聚合根,模块所有表都有这个聚合根字段,userId % number of horizontal partitions (这是map的一种方式)就映射到一个horizontal partition

3) Group(集群),一个水平partition不是对应一个Server而是一个Group,一个Group由一个master和多个slave组成,进行读写分离和负载均衡,因为数据已经经过了水平和垂直切分,量已经大大减小,所以group一般一个master就可以了

4)一个Group 对应一个Load balancer,  对于写请求和实时性要求高的读请求,分配给master,否则分配一个slave 


总结一下主要的role:

RR: route rule, 其实还可以进一步分为vertical RR 和 horizontal RR

vertical partition

horizontal partition

Group,LoadBalancer,Fault Detector


伪代码:

DAL dal = getDAL();
String tableName = getTableName(sql);
VerticalPartition vp = dal.getVerticalPartition(tableName);

String horizontalPartionKey = getHorizontalPartionKey(sql)//聚合根
//something like horizontalPartionKey.hashCode() % num of Horizontal Partions
HorizontalPartition hp = vp.getHorizontalPartition(horizontalPartionKey)

Group group = hp.getGroup();//cluster
if (isWriteOrCriticalRead (sql))
	return group.getMaster().execute(sql);
else
	return group.loadBalancer().getASlave().execute(sql);





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值