分库分表场景分析

news2024/9/23 19:28:06

背景:目前需支撑交易表日五千万数据,后续完全切量到此新系统

数据库:四个部署在Aix系统上的Oracle库、每个库一张交易主表(按日31个物理分区)、十二个交易历史表(无分区)

服务节点:每个Oracle库都对应着多个服务节点

流量入口:业务网关

路由规则:用户ID末两位进行路由


一阶段:此为正常上云后流程

        流量经过业务网关路由后到达业务系统,根据当前轧差日期来放入交易主表具体分区,月初会新起调度节点进行历史数据的清理,上面描述了主表有31个物理分区(这里的分区对应表结构是一个字段,包含在唯一索引中),每天会将指定日期之前的数据挪移到十二张历史表中,在进行清理的时候理论上只会影响到当前所使用的分区,对不同物理分区处理基本不会影响主业务

二阶段

        业务完全切量,需扩库进行性能冗余,下面粗糙的描述下当时的切量方案:
                步骤I:在原本业务网关中增加配置,根据配置决定将业务发往哪个数据库上的服务
                步骤II:起8个库,部分流量发往新库,进行数据查询的时候至多走两次查询
                步骤III:陆续切量,直至所有的流量都按8库正常跑
                步骤IV:待业务网关切量稳定后,上游开始切量(之前:流量->业务网关->业务, 现在:部分流量恢复之前状态:流量->业务)
                待业务稳定后将所有量直接发往业务,下掉业务网关,由业务系统直连

        在扩容阶段会开启特殊标记,表明此时所有订单查询将会路由两个库查询最终响应结果,因之前99用户会路由到4库,扩库之后会路由到8库,此时多出来的一次查询是其补偿机制,防止业务出现异常


上面描述的已经是业务基于当时现状选择的结果

其实在做分库分表分区的时候还需要考虑不少方面,下面列举部分:
        技术选型

                关系型数据库 NoSQL 还是类似于TIDB这样的newSQL,此时第一版还是采用的Oracle,后续将切到TDSQL
        分库技术实现

                Client模式 和 Proxy模式,因框架天然支持对库路由,故业务为Client模型

        分区字段的选择

                这个需要根据业务常见需求选择,例如:业务需要用哪些字段进行查询,这里业务选择的是时间

        扩容方案

                上面二阶段其实就已经是雏形可供参考

        分区索引

                分区索引 和 全局索引,这里业务选择的是分区索引,对此时业务来说影响更小性能更优

        复杂查询、分页等

                因数据按照某些规则进行分离了,想要汇总查询是非常难受的,不依赖三方中间件的情况下没什么好的解决方案,目前采用 ES 做数据分离查询
                
        历史数据迁移

               业务拆分为1+12张表以及31个分区来实现历史业务的迁移

        短时间订单量大爆发

                冗余性能来应对这种流量


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1397842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 配置与理解

简述 Git 在 Windows 和 Ubuntu 中的配置,以及对 Git 工作区域划分和 Git 中对于文件状态划分的理解。 git 基础安装与配置 基于 WSL 的 Ubuntu 下的 git 打开或关闭Windows功能 -> Hyper-V、Virtual Machine Platform、Windows Subsystem for Linux # 1.必须…

2023 IoTDB Summit:湖南大唐先一科技有限公司主任架构师舒畅《IoTDB 在发电领域的应用实践》...

12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…

高清网络视频监控系统技术方案

目 录 一、概述 二、建设目标及需求 (一)建设总目标 (二)需求分析 三、设计依据与设计原则 (一)设计依据 (二)设计原则 四、建设方案设计 (一&…

浪花 - 用户信息展示+更新

1. 用户登录获取登录凭证 已登录的用户才能获取个人信息发送 Aixos 请求登录 const user ref();onMounted(async () > {const res await myAxios.get(/user/current);if (res.code 0) {console.log("获取用户信息成功");user.value res.data;} else {consol…

进入docker容器,vi: command not found

问题描述: 进入docker容器,查看文件执行vim 命令,报错 vim: command not found。搜索解决方案,说执行一下 apt-get install vim命令,然后又报错 Unable to locate package vim。 解决: 1.执行 npt-get up…

亚马逊云科技 WAF 部署小指南(六)追踪 Amazon WAF Request ID,排查误杀原因

众所周知,中国是全球制造业的巨大力量,许多中国企业通过 2B 电商平台网站进行商品销售和采购。在这些电商平台上,Web 应用防火墙(WAF)成为不可或缺的安全工具。然而,WAF 也可能导致误杀问题。一旦误杀发生&…

Deep MultimodalLearningA survey on recent advances and trends

深度多模态学习:对近期进展和趋势的综述 深度学习的成功已经成为解决越来越复杂的机器学习问题的催化剂,这些问题通常涉及多个数据模态。我们回顾了深度多模态学习的最新进展,并突出了该活跃研究领域的现状,以及存在的差距和挑战…

Java中打印图案最常用的25个图案程序

Java是公认的最流行的编程语言,因为它的简单性和多功能性。还可以使用它开发各种应用程序,包括Web、移动和桌面应用程序。此外,Java为开发人员提供了强大的工具来轻松高效地创建复杂的程序。Java最有前途的特性之一是它能够创建可以以特定格式…

爬虫-selenium自动化(3)-验证码

#验证码分很多种,奇葩也无处不在:哪个是真茅台,红绿灯,摩托车......(我是个人都看不出来) (๑﹏๑) #本节内容为selenium自动化实现验证码通过-------字符验证码,点触验证码。 验证码介绍 字符验证码案例 点触验证码案例

[Python] scikit-learn之mean_squared_error函数(Mean Squared Error(MSE))介绍和使用案例

什么是均方误差(MSE)和均方根误差(RMSE)? MSE 是均方误差(Mean Squared Error)的缩写,是一种常用的衡量回归模型预测精度的指标。它表示预测值与真实值之间差异的平方和的平均值,通常用于评估回归模型的性能。 RMSE 是均方根误差(Root Mean Squared Er…

C#,字符串匹配(模式搜索)有限自动机(Finite Automata)算法的源代码

一、有限状态自动机 图中两个圆圈,也叫节点,用于表示状态,从图中可以看成,它有两个状态,分别叫0和1。从每个节点出发,都会有若干条边。当处于某个状态时,如果输入的字符跟该节点出发的某条边的内…

tomcat与servlet

目录 一、Http服务器 二、tomcat 1、概念 2、tomcat解压缩文件 (1)bin文件夹 (2)conf文件夹 (3)logs (4)webapps 3、借助tomcat服务器访问网页 三、servlet 1、概念 2、s…

阿里云有哪些优势?为什么选择阿里云?

为什么选择阿里云?阿里云服务器有哪些优势?阿里云全球第三,国内第一云,阿里云服务器网aliyunfuwuqi.com分享云服务器ECS在丰富ECS实例架构、弹性灵活、稳定可靠、便捷易用、安全保障和成本优化多方面优势: 阿里云服务…

【Linux】磁盘结构 | 文件系统 | 软硬链接

文件的状态有被打开和没有被打开,之前谈到一个文件被进行读写,就要打开加载到内存中,通过对应的系统调用,fd文件描述符的管理,write和read等函数的增删查改。并且借助缓冲区对文件属性和内容的修改。 大部分文件是没有…

高级架构师是如何设计一个系统的?

架构师如何设计系统? 系统拆分 通过DDD领域模型,对服务进行拆分,将一个系统拆分为多个子系统,做成SpringCloud的微服务。微服务设计时要尽可能做到少扇出,多扇入,根据服务器的承载,进行客户端负…

HFSS实战(一)——仿真PCB微带线的损耗

文章目录 一、ODB文件的导出二、PCB文件导入2.1 pcb文件导入2.2层叠设置 三、模型的裁剪四、模型的简化五、端口设置六、将3D LAYOUT模型导出成HFSS模型七、HFSS仿真结束 主要学习目标:利用HFSS3D layout 完成微带线的电磁仿真 利用一个简单的仿真,完成…

项目实战————苍穹外卖(DAY11)

苍穹外卖-day11 课程内容 Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现:数据统计 数据统计效果图: 1. Apache ECharts 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观&#x…

2023.1.19 关于 Redis 事务详解

目录 Redis 事务对比 MySQL 事务 MySQL 事务 Redis 事务 Redis 事务原子性解释 Redis 事务详解 执行流程 典型使用场景 Redis 事务命令 WATCH 的使用 WATCH 实现原理 总结 阅读下文之前建议点击下方链接了解 MySQL 事务详解 MySQL 事务详解 Redis 事务对比 MySQL 事…

探索设计模式的魅力:一篇文章让你彻底搞懂建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,旨在将一个复杂对象的创建过程与其表示分离,使得同样的构建过程可以创建不同的表示形式。 主要角色: 产品(Product):表示正在构建…

小程序系列--9.生命周期

1. 什么是生命周期? 2. 生命周期的分类 3. 什么是生命周期函数 4. 生命周期函数的分类 5. 应用的生命周期函数 6. 页面的生命周期函数