架构组件:基于Shard-Jdbc分库分表,数据库扩容方案

一、数据库扩容

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)可以限速慢慢迁移,没有时间压力;

三、写在最后

下一篇文章会更新该方案基于SpringCloud的代码实现。

java分库框架shard_架构组件:基于Shard-Jdbc分库分表,数据库扩容方案-Go语言中文社区...相关推荐

  1. java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区

    在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...

  2. java mysql查询界面_Java GUI小程序 实现数据库查询界面-Go语言中文社区

    源代码如下:package 数据库图形化界面3; import java.awt.*; import javax.swing.*; import java.awt.event.*; public cl ...

  3. java中3 0.1_为什么java里面3*0.1=0.30000000000000004,而4*0.1=0.4?-Go语言中文社区

    作者:蓝色 链接:https://www.zhihu.com/question/56545018/answer/149620518 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  4. java 取出集合前两个数据库_【Java】获取两个List中不同的数据(效率非常不错)-Go语言中文社区...

    项目背景 刚好项目要快速对比两张表的不同数据,但是提供的是id的列表(list),另外在数据库中,所以这里想出了一个办法,先从数据库中找出有的数据in(sql)出来先,然后用代码匹对,因为这里要查出提 ...

  5. java生成word文档 图片_java生成带有图片的word的文档-Go语言中文社区

    生成带有图片的word的文档 @RequestMapping(params ="getWordByDate",produces = "text/html;charset= ...

  6. java采用匈牙利命名法_【Java】工具类,如何将匈牙利命名法转换成驼峰命名法-Go语言中文社区...

    一.概念介绍 1.1.匈牙利命名法:user_id,字母均小写,不同单词间用下划线分割: 1.2.驼峰命名法:userId,除了第一个单词的首字母小写,其余单词的首字母均大写,单词之间没有符号,仅仅通 ...

  7. 架构组件:基于Shard-Jdbc分库分表,数据库扩容方案

    架构组件:基于Shard-Jdbc分库分表,数据库扩容方案 一.数据库扩容 1.业务场景 互联网项目中有很多"数据量大,业务复杂度高,需要分库分表"的业务场景. 这样分层的架构 ( ...

  8. java计算机毕业设计vue架构云餐厅美食订餐系统源码+数据库+系统+lw文档

    java计算机毕业设计vue架构云餐厅美食订餐系统源码+数据库+系统+lw文档 java计算机毕业设计vue架构云餐厅美食订餐系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开 ...

  9. java计算机毕业设计bs架构实习管理系统(附源码、数据库)

    java计算机毕业设计bs架构实习管理系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...

  10. 网易分库分表数据库DDB

    作者:马进,DDB项目负责人,2013年加入网易,热衷于分布式中间件相关方面工作,从事过分库分表数据库DDB.缓存NKV.分布式事务中间件TCC.分布式视频处理系统NTS等项目. 本文为<程序员 ...

最新文章

  1. C++拾趣——有趣的操作符重载
  2. php 数组值的交集,PHP 数组交集与差集
  3. python——生成器详解
  4. uap--studio设置文本字体
  5. 前端学习(3096):vue+element今日头条管理-回顾
  6. Linux 开发环境工具 下载网址大全
  7. Python正则表达式模式备忘表
  8. C# 程序异常关闭时的捕获
  9. 基于react antd的新的tag和Badge的组合使用
  10. [10秒学会] - iOS录制屏幕 ReplayKit
  11. UIApplication对象及其代理UIApplicationDelegate[转]
  12. 生活随记 - 2020国庆第四天
  13. 我的世界1.12.2java下载_我的世界1.12.2forge下载
  14. wps2016向程序发送命令_老司机帮您向程序发送命令时出现错误 【操作步骤】 的设置办法...
  15. php生成其他网页截图,php实现网页截图
  16. Visual Studio 修改
  17. Java基础语言(可查阅)
  18. LitJson 将json 解析为C#类
  19. java刷卡扣钱,商场购物“刷一次卡被扣了两次钱”,你遇到过吗?!
  20. centos7里没有ifcfg-eth0只有 ifcfg-ens33(没有Eth0网卡)

热门文章

  1. android nfc P2P模式
  2. 论文解析 | 不确定性校准的化学反应预测模型
  3. 使用gitee部署静态网页
  4. 从零开始再造打爆李世石的AlphaGo:快速构建棋盘和围棋规则
  5. 软件版本 —— Alpha、Beta、RC版本的区别
  6. 2160亿元电费如何降下来?地方5G“硬核”政策助力
  7. ECSHOP和SHOPEX快递单号查询中通插件V8.6专版
  8. flv格式转换为mp4(ffmpeg)
  9. Enterprise Architect学习(1)
  10. Incorrect string value: '\xF0\x9F\x91\x80' for column数据库中添加表情报错