一种分表平滑扩容方案
数据库分表设计是很常见的水平扩容手段,随着数据量级的增加,我们往往需要对数据分表数量做扩容(比如从原有的 32 张扩容到 64 张),那么为了使得扩容过程能够平滑,减少对业务的影响,在支持分表能力的"数据访问层"设计初期,如果用于分表的字段为主键,可以考虑采用如下方案以灵活应对分表扩容:
设定新旧分表两个标记,两个标记可指向相同或不同的数据源,代表了新旧分表所在的存储位置,细化来讲:
针对插入操作,只需写入新分表即可,
针对更新操作,若新分表查到此记录,则直接更新新分表,否则将在旧分表查到的记录在内存中"更新"后尝试插入新分表(旧分表记录不更新),相当于动态做本记录的迁移,如插入新分表发现主键冲突,则做更新操作,总结来说是更新操作设计为是插入或更新新分表。
针对删除操作,则在新旧分表都做删除操作即可,
针对查询操作,需要做双读操作,即新分表读不到数据改从旧分表读取。
当然,如果新旧分表标记指向的是同一数据源,上述操作只需操作新分表即可,通过上述方案并辅以旧分表数据到新分表的迁移程序完成分表的动态扩容。
版权声明: 本文为 InfoQ 作者【非著名架构师】的原创文章。
原文链接:【http://xie.infoq.cn/article/5b7caf913c2b2e099d709ed36】。文章转载请联系作者。
评论