一文弄懂分库分表模式下数据迁移

数据库 其他数据库
互联网项目中有很多“数据量大,业务复杂度高,需要分库分表”的业务场景。

架构方案:分库分表模式下,数据库扩容方案

一、数据库扩容

1、业务场景

互联网项目中有很多“数据量大,业务复杂度高,需要分库分表”的业务场景。

这样分层的架构

(1)上层是业务层biz,实现业务逻辑封装;

(2)中间是服务层service,封装数据访问;

(3)下层是数据层db,存储业务数据;

2、扩容场景和问题

当数据量持续新增,面临着这样一些需求,两台数据库无法容纳,需要数据库扩容,这里选择2台—扩容到3台的模式,如下图:

这样扩容的问题

(1)分库分表的策略导致数据迁移量大;

(2)影响数据的持续服务性;

(3)指定时间完成,技术压力大,容易导致预想不到的错误;

如何平稳不停机迁移数据,保证系统持续服务。

二、扩容解决方案

1、扩容方案图解

(1)分库分表基于MySQL数据库,使用shard-jdbc中间件

(2)该方案的思路整体基于SpringCloud微服务架构

2、解决扩容问题

(1)扩容情况下不需要暂停服务;

(2)数据迁移的压力小,不需要指定时间;

3、数据访问层逻辑

方案描述

基于两台数据库分库分表,简称:服务二

基于三台数据库分库分表,简称:服务三

(1)提供两套服务,服务二和服务三

(2)数据库扩容后,如果访问服务三直接获取到数据,流程结束。

(3)如果访问服务三获取不到数据,则访问服务二获取数据。

(4)在迁移开始的一段时间内,访问压力还会在服务二上面。

(5)这样就做到数据访问服务不会停机。

(6)这种访问模式基于SpringCloud很容易做到。

4、数据迁移层逻辑

方案描述

(1)关闭基于两台库的数据入库流程

(2)开启基于三台库的数据入库流程,这样新入库数据就可以被服务三直接访问到。

(3)开发数据迁移中间件,扫描原先两台库的数据。

(4)扫描的数据根据分三台库策略判断是否需要迁移。

(5)如果数据需要迁移,则调用服务三的数据入库接口。

(6)数据迁移完成后,删除原来的位置的数据。

(7)这种迁移模式基于SpringCloud很容易做到。

5、该方案迁移的优点

(1)整个过程是持续对线上提供服务;

(2)数据迁移中间件的开发复杂度较低;

(3)可以限速慢慢迁移,没有时间压力。

责任编辑:姜华 来源: 今日头条
相关推荐

2020-09-27 08:00:49

分库分表

2024-08-13 17:09:00

架构分库分表开发

2024-12-04 13:02:34

数据库分库分表

2023-02-24 15:24:14

MySQL数据库管理分库分表

2022-08-09 09:10:43

Kubernetes容器

2023-11-28 09:31:55

MySQL算法

2023-10-26 16:27:50

前端 WebCSS开发

2023-09-18 08:02:45

CSS布局属性

2023-12-12 07:31:51

Executors工具开发者

2024-05-09 10:11:30

2022-09-01 08:01:56

Pythongunicorn

2023-03-27 17:58:34

MySQL加锁间隙锁

2023-03-30 08:52:40

DartFlutter

2022-09-05 09:25:53

KubernetesService

2021-06-02 05:43:36

比特币虚拟货币区块链

2023-04-04 08:01:47

2020-11-06 15:30:23

分库分表Sharding-JD数据库

2022-08-03 08:01:16

CDN网站服务器

2022-01-04 08:54:32

Redis数据库数据类型

2018-03-14 09:49:35

数据库迁移
点赞
收藏

51CTO技术栈公众号