前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于业务存储结构扩容的方案设计和思考

关于业务存储结构扩容的方案设计和思考

作者头像
jeanron100
发布于 2022-05-12 12:45:24
发布于 2022-05-12 12:45:24
6580
举报

这是学习笔记的第 2417篇文章

  今天和研发团队沟通一个数据存储方案的设计和改造,大体的背景是在数据库中有些id类数据,如果数据类型是int,则存在一定的溢出风险,在程序层面需要提前考虑修改为int64,在MySQL中可以简单理解为bigint.

  我们假设这个id字段为uid,如果是用户业务,则很多业务逻辑都是和这个uid强相关的,那么就会存在大量的业务梳理和研发代码的接入,如果底层数据存储的压力和风险过大,则这个事情的改进周期和影响范围就会更难以评估和控制。 

    所以这个问题从长期来看是未雨绸缪,对已有的数据存储是完全兼容的。但是从短期来看,这个调整会对已有的线上服务带来一些风险,如果涉及到约束的变更,则这个事情的复杂度会更高。为此我们经过沟通,想到了如下的几类解决方案:

1)新增字段uid_64,这样已有的业务逻辑可以正常运行,新的字段可以并行调整,当然从数据存储来看,这个代价是比较高了,而且后续调整为uid_64之后很可能需要再统一为uid的模式,所以从研发还是数据存储来说,改造幅度都比较大。 

2)在线变更,这里我说的在线变更拆分为了4类场景。

#场景1: 对于一些复杂度较为可控的业务,数据量也不够大,采用在线变更的模式是比较合适的,这里我们可以使用online DDL,pt-osc或者gh-ost的方式来实现在线变更;

#场景2:

对于一些较为复杂的业务,如MySQL集群,采用了分库分表,数据量可能在亿级别,这种变更的复杂度就比较大了,而且可以肯定的是在线变更对于复杂架构模式的风险大,而且不可控因素会更多,这里可以采用更好的应用架构设计,基于高可用灵活切换的方式,比如整个结构的变更都可以在从库端进行统一调整,因为这种数据类型的扩容是具备兼容性的,所以原生的复制不会产生直接影响,而且即使执行时间长一些,对于线上业务来说是几乎无感知的,等变更完成之后,就可以快速通过服务切换的方式将集群从原本的主库切换到从库,这个过程是需要主动触发,如果是秒级的异常,会对研发来说是直接反馈,这种情况下反而是好事。这个过程涉及的细节较多,核心思想就是从库,异步,高可用切换;

#场景3:

对于流水日志的处理方式,采用T+1的模式对于研发侧来说是几乎不需要修改主干业务逻辑就可以适配的。 

#场景4:

 这一类场景较为复杂,比如在业务中会有不规范的使用方式,对于不规范导致的列名不是uid的情况,比如从xid修改为uid,在数据库和研发侧的修改代价都是比较高的,这种情况下,我是不建议使用在线变更的模式

3)业务在线迁移

这一类场景对于后端数据存储是相对简单的,就是提供一个新的数据库,让业务来完成整体的迁移和切换,这种情况下,对于研发的能力要求较高,所有的关键操作都是通过研发在线迁移的方式来实现。 

综上的三种方案,我是建议根据场景来灵活适配,比如方案2和方案3来组合的形式。如果后端的数据存储在梳理中修改范围更加的庞大,则需要根据细化的业务场景来选择当前更合适的方案。

各大平台都可以找到我

  • 微信公众号:杨建荣的学习笔记
  • Github:@jeanron100
  • CSDN:@jeanron100
  • 知乎:@jeanron100
  • 头条号:@杨建荣的学习笔记
  • 网易号:@杨建荣的数据库笔记
  • 大鱼号:@杨建荣的数据库笔记
  • 腾讯云+社区:@杨建荣的学习笔记

原创热文:

维护之夜,说点故事和经验

我们为什么在MySQL中几乎不使用分区表

新年大吉 总结了如下的感想

《大江大河2》最触动我的一段经典对话

MySQL 8.0给开发方向带来的一些困扰

迁移到MySQL的业务架构演进实战

如何优化MySQL千万级大表,我写了6000字的解读

一道经典的MySQL面试题,答案出现三次反转

小白学MySQL要多久?我整理了10多个问题的答案

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

在看,让更多人看到

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
java设计之简单的JAVA计算器
       做这个东西主要是为了练习一下以前学习过的java Swing,所以那些复杂的算法就没有加载到里面去........        先展示一下效果....额,当然不是这个样子....  
Gxjun
2018/03/26
2.3K0
java设计之简单的JAVA计算器
Java第一次写的流布局图形界面,留个纪念
流布局的图形构造方法默认为居中排列; 对齐常量: LEFT(0):左对齐 CENTER(1):居中 RIGHT(2):右对齐 public FlowLayout(int align) //align参数指定对齐方式,取值为对齐常量。
谙忆
2021/01/20
3680
Java第一次写的流布局图形界面,留个纪念
java 计算器 (模仿windows自带计算器的功能和界面)
import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.
用户7999227
2021/09/19
1.7K0
java javaGui事件处理用户验证
package mmm; import java.awt.Dimension; import java.awt.Frame; import java.awt.Toolkit; import java.awt.GridLayout; import java.awt.Panel; import java.awt.Label; import java.awt.FlowLayout; import java.awt.TextField; import java.awt.Button; import java.aw
葫芦
2019/05/09
6720
设计模式之状态模式(state模式)状态模式的具体实例状态模式的分析
面向对象编程中,类用来表示对象,一般情况下,我们需要考虑用类来表示什么具体的东西。类对应的东西可能存在于真实世界中,也可能不存在于真实世界中。 状态模式所表示的类,一般就不存在真实世界的某个东西,因为状态模式中的类是用来表示状态的。状态一般都是抽象的,所以往往没有具体对应于真实世界的对象。 我们用类来表示状态,那么不同的状态就用不同的类来表示,我们只要通过切换不同的类就可以切换不同的状态。
desperate633
2018/08/22
1K0
设计模式之状态模式(state模式)状态模式的具体实例状态模式的分析
布局管理器
 针对我们之前留下的作业来说,当缩放外层Frame窗口的大小时,内层Panel并不会随之改变大小,所以我们需要一个事件监听,让他能够随之改变,但是这样太麻烦了,于是Java给我们提供了一个布局管理器类,这个布局管理器举个例子相当于一个大管家,房子相当于Frame,其中的家具就相当于Frame里的元素,我们只管把元素往Frame里丢,不用管怎么排列,大管家自动帮我们排列。不同的布局管理器有不同的风格
mathor
2018/08/03
1.1K0
布局管理器
11 - JavaSE之GUI
PS: Panel 的 setBounds 方法中设置的位置大小是相对于相对装入的 Frame 窗口位置和大小的。
Daotin
2018/08/31
2K0
11 - JavaSE之GUI
小项目分享---混色器
编写代码的同志们一般懂美术的就少了,偶也是,什么色轮、三维加色等等。虽然看过一些书籍(如内田广由纪的《配色基础原理》),不过还是一知半解的。
williamwong
2018/07/24
4740
小项目分享---混色器
Java基础-25(01)图形用户界面编程GUI
1:如何让Netbeans的东西Eclipse能访问。 在Eclipse中创建项目,把Netbeans项目的src下的东西给拿过来即可。 注意:修改项目编码为UTF-8 2:GUI(了解) (1)用户图形界面 GUI:方便直观 CLI:需要记忆一下命令,麻烦 (2)两个包: java.awt:和系统关联较强 javax.swing:纯Java编写 (3)GUI的继承体系 组件:组件就是对象 容器组件:是可以存储基本组件和容器组件的组件。 基本组件:是可以使用的组件,但是必须依赖容器。
Java帮帮
2018/03/16
1.6K0
javaGUI
欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/ 微博:寒枫–0-0– 知乎:https://www.zhihu.com/people/tao-wu-sheng 豆瓣:YIFEI
yifei_
2022/11/14
4420
Java---布局管理代码简单使用(解答)
1.流布局管理器: FlowLayout布局管理器中组件的相对位置随窗口大小而变化。
谙忆
2021/01/20
7020
Java---布局管理代码简单使用(解答)
【Java】利用Swing实现简单的计算器 代码分享
Main.java package myCalculator; import javax.swing.JFrame; public class Main { public static void main(String[] args) { MyFrame frame = new MyFrame();//创建窗口 frame.setTitle("计算器");//设置窗口标题 frame.setDefaultCloseOperation(JFrame.E
用户7718188
2021/11/01
7360
JAVA语言实现计算器
若觉得有用请点赞或关注~以后会发布更多有用的内容。
全栈程序员站长
2022/09/09
6340
JAVA语言实现计算器
Java 基于JFrame的一个简单学生成绩管理系统(内含详细注释)
/* * 若尘 */ package demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.a
ruochen
2021/05/15
1.4K0
Java 基于JFrame的一个简单学生成绩管理系统(内含详细注释)
【Java GUI编程】001-AWT学习笔记(一):窗口、面板、布局
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
訾博ZiBo
2025/01/06
1750
【Java GUI编程】001-AWT学习笔记(一):窗口、面板、布局
java GUI 快速入门
java 中编写 GUI 有两中工具包,分别为 AWT、Swing。 Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法。 AWT 和 Swing 都能跨平台使用;AWT 会随着不同的系统平台,UI 样式会有所变化,Swing 则不会,设计完毕后在所有平台下样式一致。
痴者工良
2021/04/26
1.8K0
java编写俄罗斯方块
Game_Box.java //方块类 public class Game_Box{ static int[][] pattern = { { 0x0f00, 0x4444, 0x0f00, 0x4444 },// 长条形 { 0x04e0, 0x0464, 0x00e4, 0x04c4 },//T型 { 0x4620, 0x6c00, 0x4620, 0x6c00 },//右Z型 { 0x2640, 0xc600, 0x2640, 0xc600 },//Z型 { 0x6220, 0x1700, 0x223
用户1503405
2021/09/22
2.1K0
java--第11章 图形用户界面编程
     swing:在awt的基础上建立的一套图形界面系统,属于Javax扩展包下。其中提供了更多的组件。而且完全由Java实现增强了移植性,属轻量级控件。
北山啦
2022/11/27
7240
java--第11章 图形用户界面编程
Java课程设计——学生成绩管理系统
在现今信息时代,生活速度的加快,使得人们越来越向信息化、数字化发展。随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,尤其是学生的考试成绩数据。面对庞大的学生的成绩,需要有学生成绩管理系统来提高学生管理工作的效率。介于此提出了学生成绩管理系统,学生管理系统是计算机对学生档案信息进行管理,具有手工管理无可比拟的优点,如索检迅速、查找方便、可靠性高、存储量大等有点。现在我国的大中专院校的学生成绩管理水平正在不断提高,停留在纸介质基础上的管理手段早已被时代淘汰,因为它浪费了许多的人力和物力。本系统使用 Swing + MySQL + IntelliJ IDEA 开发。为管理人员提供充足的信息和快捷的查询手段,提高学校学籍管理的效率。
全栈程序员站长
2022/09/09
4.2K1
Java入门(12)-- Swing程序设计
GUI(图形用户界面)为程序提供图形界面,它最初的设计目的是为程序员构建一个通用的GUI,使其能够在所有的平台上运行,但Java1.0中基础类AWT(抽象窗口工具箱)并没有达到这个要求,于是Swing出现了,它是AWT组件的增强组件,但是它并不能完全替代AWT组件,这两种组件需要同时出现在一个图形用户界面中。
爱学习的程序媛
2022/04/07
5.6K0
Java入门(12)-- Swing程序设计
相关推荐
java设计之简单的JAVA计算器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档