在工作中,曾经做过一个项目,采用了哈希取模的方法进行水平分库,这种方法简单高效,但是在数据库规模有所变动的时候,需要做数据迁移。本文介绍一个自己拍脑袋想出来的一种简易的水平分库方案,以解决数据迁移的问题。
首先,我将数据库表中的字段分为三种类型:主键(通常是整型 id)、关键字段、非关键字段。关键字段指的是该字段在当前表结构中具有决定性意义,如图书借阅记录表中的 userId。
其次,主键必须包含分片信息,即分库的下标值,可通过对主键进行解析获得分库下标,直接定位到对应数据库。
然后,我们来讨论增删改查。
以上说的情况是采用了哈希取模的方法进行水平分库,接下来要加入分片规模记录的概念(在个人项目中定义的接口为
IShardScaleRecord)。
分片规模记录保存了数据库规模的变动记录,具体如下:
{
{1531375099000, 1},// 2018/7/12 13:58:19 数据库规模为 1
{1531459618000, 2}// 2018/7/13 13:26:58 数据库规模为 2
}
加入了该记录以后,在数据库扩容并不做数据迁移的情况下,也无需全库操作。此时,我们再来讨论增删改查。
至此,本人拍脑袋瞎想的方案介绍完毕,欢迎各位大佬指导批评。
附上项目地址。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。