分布式环境下的分库分表问题

一、水平分表策略问题

随机分表策略和连续分表策略

随机分表策略可以分散冷热数据均衡存储,避免热数据瓶颈。一般需要数据迁移。

连续分表策略按照日期等分割。

二、垂直分表策略

将访问频度高的字段和访问频度低的字段分开存储到两个表。

三、分库问题

可以使用mycat。

四、数据迁移问题

可以利用程序从原数据库中读取数据再按照新的存储策略存储到相应的数据库表。

五、表关联问题

跨库关联,可以使用程序中分阶段查询,再整合查询结果。

六、分页排序问题

在分表中排序返回,在程序中再整合排序,将结果返回。

七、数据库集群数据一致性问题

集群数据很难做到强一致性,要保证弱一致性和最终一致性。cap定理:分布式系统不能同时满足cap,c是一致性,a是可用性,p是分区容忍。分布式数据库一般满足cp,牺牲掉一部分可用性。

集群数据一致性算法包括:

paxos算法:一阶段:proposer会选择一个提案编号N,向accepter发送编号为N的prepare请求。如果一个accepter收到一个N的prepare请求,而且N大于任何它收到的请求,将把自己最大的编号回应给proposer。

二阶段:当proposer收到过半数量accepter回应,就将 提交给accepter。

zab 算法:Leader服务器会将一个follower的事务请求转化为一个proposal,并分发给所有follower服务器,一旦超过半数的follower服务器反馈,Leader会再次向所有follower服务器发送commit消息,将新提议提交。

八、分布式全局唯一ID

uuid,snowflake算法,mongoDB的ObjectId

你可能感兴趣的:(分布式环境下的分库分表问题)