如何通过一条SQL变更多个分库分表?

news2024/9/23 2:29:07

数据库发展到今天,分库分表已经不是什么新鲜话题了,传统的单节点数据库架构在数据量和访问频次达到一定规模时,会出现性能瓶颈和扩展性问题,而分库分表技术通过将数据分散到多个数据库实例中来分担负载,从而提升系统的整体性能和稳定性。

当然,本文并不是教你怎么去做分库分表,也不是夸分库分表技术有多牛,而是想具体谈一谈很多企业在分库分表场景下的数据变更难题。

相信很多同学都有深刻体会,在分库分表的实际应用中,由于把一个库的数据分别存在了不同的库,因此一个 DDL 语句往往需要到多个数据库实例中去执行,这就带来了一系列让人挠头的难题。

难题一:变更需要在每一个分表中去执行,如果企业有 1024 个分表,那就需要执行 1024 次,异常耗时还容易出错。

难题二:如果编写脚本去批量执行,技术门槛比较高是一回事,还需要注意各种各样的细节:

  • 挨个连接数据源:如果需要变更的库太多,有多少个库就得写多少个连接脚本,这对于开发者而言是一种负担。
  • 错误捕获:SQL 语句并不是 100% 执行成功的,可能会有各种因素导致执行失败,因此脚本必须能够捕获执行过程中可能出现的各种错误,并在错误发生后妥善处理,以保证脚本执行完成后 DDL 在所有表成功执行。
  • 脚本维护成本高:由于变更场景的多样性,在耗费好大精力写完脚本后,只能对当次变更使用,下次有其他新的变更需求,可能无法直接套用脚本,又得重新对脚本做优化。

看到这里,可能已经有同学产生共鸣了,欢迎对号入座,因为大部分企业的分库变更事实上就是这么干的,想要摆脱这些痛点,肯定是有办法的,不做分库分表是不是就行了?当然不是,分库分表对于企业的重要性不言而喻,我们需要在保证分库分表的前提下,给出解决方案。

我们试想如下场景:把所有需要统一进行变更的分库划分到一个库分组中,然后只需要对该库分组提交一次 DDL 变更,那该 DDL 语句就会自动在该库分组下的所有库中完成自动执行。

看上去是不是很方便?下面我们就来看一下,怎么去实现上述的流程。

通过 NineData 的库分组功能实现批量分库变更

在 NineData 的数据库 DevOps 专业版以上版本中,支持库分组的创建,可以将不同数据源中的库添加到该库分组中,用来进行统一的变更与查询。

先简单介绍下配置流程:

基于上面这个流程,我们来演示一下配置方法。

步骤一:录入数据源

将分库所在的数据源全部录入到 NineData 平台。

步骤二:建立库分组

将处于不同数据源中的分库全部添加到库分组中,下图示例中,创建了名为 Poc_Shard_DB 的库分组,包含了 MySQL-POC1 和 MySQL-POC2 数据源中的 poc_test01、poc_test02、poc_test03、poc_test04 4个分库。

步骤三:对库分组执行表结构变更

通过 NineData 的 SQL 任务功能,对库分组发起变更申请,经过系统(规范预审)和审批人员的双重审批后,DDL 语句将会在库分组中的所有分库中执行。

1. 提交 SQL 任务,选择库分组,输入 DDL 语句。本示例给 Poc_Shard_DB 库分组增加一个 age 列。

2. 系统自动规划出 DDL 执行的目标库(见下表),然后基于规范对 DDL 语句进行评估,通过后就可以提交人工审批了。

3. 提交审批,选择审批人,然后单击确定。

4. 待审批通过后就可以执行了。在执行过程中,如果 DDL 在某个分库中没有执行成功,就会在任务列表中展示出来,非常方便。

5. 执行完成后,可以查看这几个分组,发现所有分库的目标表中都增加了对应的 age 字段。

总结

本文的整个变更过程中,变更是围绕库分组进行的,库分组可以根据企业的实际业务场景自由添加,具有非常高的通用性,并且操作十分便利,因此可以适用于各种分库变更的场景。

而对于上文中提到的几个变更难题,NineData 的库分组解决方案都可以轻松化解,从此分库变更只需点几下鼠标就完事,不用再绞尽脑汁地写脚本了。

最后补充一个新手大礼包,如果企业的数据源数量不超过 10 个,那么就可以永久免费使用上述功能,不仅如此,所有专业版的高级功能也都可以永久免费使用,废话不多说,直接上手尝试吧。

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

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

相关文章

粮信甄选·非凡凸现|携手中粮期货、国信证券共同见证数智交易前沿力量

近日,中粮期货、国信证券联合非凸科技在深圳举办了“粮信甄选,非凡凸现”主题机构洽谈会,与行业专家、私募管理人共同探讨如何推进产业与金融的深度融合,以及实现科技创新与生态合作的新模式。 近年来,国信证券始终聚…

开源物联网网关ThingsBoard IoT Gateway

前几天测试了Neuron,这是一个令人印象深刻的平台,不过它不能算是完全免费的平台,因为它还是有商业许可要求的,挺贵的,大几万的,而且它有走向闭源的趋势。所以也在寻找它的替代方案。 今天看到一个ThingsBo…

最新全新UI异次元荔枝V4.4自动发卡系统源码

简介: 最新全新UI异次元荔枝V4.4自动发卡系统源码 更新日志: 1增加主站货源系统 2支持分站自定义支付接口 3目前插件大部分免费 4UI页面全面更新 5分站可支持对接其他分站产品 6分站客服可自定义 7支持限定优惠 图片: 会员中心截图&…

王春城 | TPM是如何减少设备停机时间的?

在快节奏的生产环境中,设备停机时间无疑是每个企业都头疼的问题。它不仅影响生产效率,还可能造成巨大的经济损失。那么,有没有一种神奇的方法能够一键减少设备停机时间呢?答案就是--TPM(全面生产维护)&…

【区块链+绿色低碳】双碳数字化管控平台 | FISCO BCOS应用案例

地方政府、园区及企业实现“双碳”目标过程中存在一些挑战与难点: 1. 管理者难以掌握完整、准确、全面的碳排放数据进行科学决策:由于碳排放核算需要对数据的来源、核算方法 的规范性和采集方法的科学性有严格要求,当前面临碳排放数据数据采…

什么是PCB盲孔、埋孔和电镀孔?

PCB有不同类型的孔,根据孔贯穿PCB内外层的层次,孔可分为通孔、埋孔和盲孔。 如您所知, PCB 由堆叠在一起的铜箔层组成.这些“过孔”连接PCB上的不同电路层。它类似于具有相互连接的隧道的地下系统。如果你玩过电子游戏“超级马里奥”&#xf…

基于web的物流配送管理系统/基于客户时间窗变化的物流配送管理系统/快递配送管理系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…

springboot集成redis之字典缓存

什么是redis的字典缓存? Redis的缓存是Redis内部用于存储键值对数据结构的一种基础数据结构。在Redis中,所有的键值对都是通过字典这种数据结构来存储的。字典在Redis中扮演着核心角色,因为它不仅用于数据库中的键值对存储,还用于…

React 学习——条件渲染、遍历循环、事件绑定

React特点: 声明式的设计高效,采用虚拟DOM来实现DOM的渲染,最大限度减少DOM的操作灵活,跟其他库灵活搭配使用JSX,俗称JS里面写HTML,JavaScript语法的扩展组件化,模块化,代码容易复用…

SQL labs-SQL注入(二)

环境搭建参考 SQL注入(一) 一,SQL labs-less2。 http://192.168.61.206:8001/Less-2/?id-1 union select 1,2,group_concat(username , password) from users-- 与第一关没什么太大的不同,唯一区别就是闭合方式为数字型。 二…

苹果笔记本电脑如何优化系统 苹果电脑系统优化软件哪个好 cleanmymac x怎么用

随着时间的推移,你可能会发现你的MacBook运行速度变慢,甚至在执行一些基本任务时也会感觉到卡顿。这不仅影响了工作效率,也大大降低了使用体验。但别担心,优化你的Mac系统比做早餐还简单。本文将用一种轻松的风格向你介绍7种简单易…

AI绘画入门实践|Midjourney:使用 --seed 制作情侣头像与漫画

在 Midjourney 中,seed 是指一个种子,用于生成图像时的起点或基础。 使用格式:--seed 获取的seed值 获取 seed 值 使用 seed 生成图像 a cute boys avatar, background with blue sky and white cloud, Ghibli Studio style, Hayao Miyazaki…

2024最新手机软件APP下载排行网站源码 软件下载站PHP源码

源码介绍 这是一款简洁蓝色的手机软件下载应用排行、平台和最新发布网站源码,主要包括主页、APP列表页、APP详情介绍页、新闻资讯列表、新闻详情页、关于我们等模块页面。 软件下载站PHP网站源码,简单的部署上线,访问首页安装程序&#xff…

Docker Desktop安装

0 Preface/Foreward 1 安装 1.1 运行docker安装包 安装完Docker Desktop后,运行Docker Desktop,出现WSL 2安装不完整情况,具体情况如下: 解决方法:旧版 WSL 的手动安装步骤 | Microsoft Learn 也可以直接下载新的安…

rce漏洞-ctfshow(50-70)

Web51 if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\|\%|\x09|\x26/i", $c)){ system($c." >/dev/null 2>&1"); } Nl,绕过tac,cat,绕…

YOLOv8高效涨点之改进主干RepLKNet

这篇文章讨论了在现代卷积神经网络(CNN)设计中使用大卷积核的优势,并提出了一种新的CNN架构RepLKNet。以下是对文章内容的分条说明: 大卷积核的优势:文章提出使用大卷积核(例如3131)而不是传统的小卷积核(如33)可以提供更强大的特征提取能力。 灵感来源:这种设计思路…

AI智能名片微信小程序在品牌战略与私域流量构建中的应用与深度探索

摘要:在数字经济时代,私域流量的价值日益凸显,成为企业和个人实现可持续增长的重要驱动力。品牌,作为私域流量的核心,其稳定性和影响力直接关系到流量的质量与转化效率。AI智能名片微信小程序,作为数字营销…

耳机、音响UWB传输数据模组,飞睿智能低延迟、高速率超宽带uwb模块技术音频应用

在数字化浪潮席卷全球的今天,无线通信技术日新月异,其中超宽带(Ultra-Wideband,简称UWB)技术以其独特的优势,正逐步成为无线传输领域的新星。本文将深入探讨飞睿智能UWB传输数据模组在音频应用中的创新应用…

【故障排除】Unity在编辑器模式下Play时闪退

一开始以为是偶然的情况,但逐渐发现了规律: 每次某个角色释放技能的时候就会闪退。 为了找到问题代码,找了一下存放运行Log的文件夹: 打开 Console 窗口(菜单:Window > General > Console&#xff…

修改 Tomcat 默认端口号最简单的方法

前言 每次在创建一个新的Maven项目之后,启动项目总会报8080端口号被占用的问题,既然每次都有这样的困扰,那不如一了百了,直接修改默认的8080端口号。 (如果还是想要默认端口号。可参考我主页文章杀死占用了8080的进程…