沈剑:数据库切分技术实践解析

向作者提问
“架构师之路”公众号作者,58到家高级总监,技术委员会主席。前百度高工,58同城高架,技委主席。
查看本场Chat

2017年2月23日周四晚8点30分,“架构师之路”公众号作者、58到家技术委员会主席沈剑带来了主题为《互联网数据库“跨库分页”架构技术实践》的分享,以下是主持人赫阳整理的实录,记录下了作者和读者问答的精彩片段。


问:目前准备做数据库水平切分,需要注意什么关键问题?目前了解需要避免跨库事务,请老师指点。

答:

  1. 需要注意分库patitionkey的选取,要保证两个均衡:数据量的均衡,请求量的均衡。

  2. 需要注意分库后,之前用SQL满足的需求是否还能满足,需要怎么改进满足,例如max、min、avg、sum都需要在服务层再做一次聚合。

  3. 夸库事务,分布式事务,在吞吐量是主要矛盾的互联网场景,目前没有能够很好解决的方案,尽量避免。


问:采用hash取模方式的表扩容策略及采用一致性hash分表的表扩容策略如何实现?

答:数据库水平切分的方式,常用的有两种:

  1. hash取模:user_id%2=0为0库,user_id%2=1为1库。
  2. 数据分段:user_id属于[0, 1亿]为0库,属于[1亿, 2亿]为2库。

方案一

Nemo
关于“跨库分页”文章第四种二次查询法,看了很有启发。但是有一个问题,如果所有分库总体第994条至1005条的数据都在分库1,二次查询得到的数据也是不准确的。分库1从333条开始取出5条数据,结果只是整体994到999的5条,1000到1005的数据就没有取出来待选。
微信扫描登录