分库分表及ShardingShpere-proxy数据分片

为什么需要分库?

随着数据量的急速上升,单个数据库可能会QPS过高导致读写耗时过长而出现性能瓶颈,所以需要考虑拆分数据库,将数据库分布在不同实例上提升数据库可用性。主要的原因有如下:

  1. 磁盘存储。业务量剧增,MySQL单机磁盘容量会撑爆,磁盘使用率过高的情况下甚至会影响性能,拆成多个数据库,磁盘使用率大大降低。
  2. 并发连接限制。单个数据库的连接存在上限,如果连接数超过上限,会出现connect refused,导致有些请求无法成功请求数据库。特别在高并发场景下,单机MySQL压力很大甚至扛不住而导致MySQL连接打满造成不可用,影响业务正常运行。

为什么需要分表?

随着单表数据量的增加,对于数据的查询和更新,即使在数据库底层有一定的优化,但是随着量变必定会引起质变,导致性能急剧下降。这时可以通过分表的方法,将单表数据按一定规则水平拆分到多个表中,减小单表的数据量,提升系统性能。
如果一个查询SQL没命中索引,千百万数据量的表可能会拖垮这个数据库。即使SQL命中了索引,如果表的数据量超过一千万的话,查询也是会明显变慢的。因为索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,高度越高,磁盘IO次数越多,查询就变慢。

拆分方式

  1. 垂直拆分。垂直拆库可以理解为把单库里的不同表拆分至不同数据库。垂直拆表可以理解为将一个表里的部分列(可以是长度较长的、不常用的等)拆分至另一个表,使得每张表的职责更明确,数据更聚焦。
  2. 水平拆分。水平分库是指,将表的数据量切分到不同的数据库服务器上,每个服务器具有相同的库和表,只是表中的数据集合不一样。它可以有效的缓解单机单库的性能瓶颈和压力。水平分表指一按照某种规则(如hash取模、range),把表里的数据切分到多张同样职责的表中。

分库分表带来的问题

  1. 不同数据库存在于不同实例上,本地事务无效,需要使用分布式事务
  2. 跨数据库进行Join操作,需要将sql拆成多次查询。
  3. 跨节点排序。需要在每个数据库都排完序后,在应用层再次合并排序。
  4. 分页。需要在应用层额外处理。
  5. 分布式ID。分库分表需要保证id不重复,需要额外使用雪花算法或者uuid生成全局id。

ShardingShpere-proxy

ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。它站在数据库的上层视角,关注它们之间的协作多于数据库自身。
我们系统使用ShardingSphere-proxy,并部署为一个单独的分片服务。ShardingShphere生态中还有ShardingShpere-JDBC,其作为sdk的方式附载在业务项目中。主要是用shardingShpere-proxy的数据分片能力来提供逻辑SQL的功能。

在这里插入图片描述
数据分片
用户使用时,只需要传入基于逻辑库/表的sql操作即可,提升使用效率,简化流程。
数据分片流程:
sql 解析 - 词法解析和语法解析;
sql 路由 - 根据解析上下文匹配数据库和表的分片策略,并生成路由路径;
sql 改写 - 将逻辑 SQL 改写为在真实数据库中可以正确执行的 SQL;
sql 执行 - 使用多线程并发执行 sql;
结果归并 - 将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端;
在这里插入图片描述
https://shardingsphere.apache.org/document/current/cn/reference/sharding/route/

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

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

相关文章

javaWebssh汽车销售管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh汽车销售管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

redis-学习笔记(Jedis zset 简单命令)

zadd & zrange zadd , 插入的第一个参数是 zset , 第二个参数是 score, 第三个参数是 member 成员 内部依据 score 排序 zrange 返回 key 对应的 对应区间内的值 zrangeWithScore 返回 key 对应的 对应区间内的值和分数 示例代码 zcard 返回 key 对应的 zset 的长度 示例代…

05-命令模式

意图(GOF定义) 将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化,对请求排队或者记录日志,以及可支持撤销的操作。 理解 命令模式就是把一些常用的但比较繁杂的工作归类为成一组一组的动作&…

Linux环境下maven的安装

到官网下载maven 步入下面的地址选择合适的maven版本 https://dlcdn.apache.org/maven/ 以笔者为例,选择了3.5.4这个版本 将maven上传到Linux服务器并解压 tar -zxvf apache-maven-3.5.4-bin.tar.gz配置环境变量 我们使用vim编辑profile vim /etc/profile环境…

【数据结构(十一·多路查找树)】B树、B+树、B*树(6)

文章目录 1. 二叉树 与 B树1.1. 二叉树存在的问题1.2. 多叉树 的概念1.3. B树 的基本介绍 2. 多叉树——2-3树2.1. 基本概念2.2. 实例应用2.3. 其他说明 3. B 树、B树 和 B*树3.1. B树 的介绍3.2. B树 的介绍3.2. B*树 的介绍 1. 二叉树 与 B树 1.1. 二叉树存在的问题 二叉树…

react Hooks(useEffect)实现原理 - 简单理解

useEffect 语法: useEffect(setup, dependencies?) 含义: useEffect 是一个 React Hook,它允许你 将组件与外部系统同步。 useEffect 源码简单理解 一、mountEffect 和 upadateEffect useEffect 与其它 hooks 一样分为 mountEffect 和 upadateEffec…

I2C总线通信(温湿度实验)

1.使能GPIOF时钟 2.将PF14设置为输出,PF15也可以先设置为输出 3.设置输出速度最高档位速度 4.SI7006的初始化 5.读取温度、湿度 6.将读取到的温度湿度数据通过计算公式进行转换 7.将结果输出 main.c #include "si7006.h"extern void printf(cons…

工科数学分析(华南理工大学)

旷了三天课,估计要被薄纱了这下() ----------------引言 第一节 集合与实数集 比较重要的是实数具有稠密性。 即在两个实数之间存在无穷个其他实数, 然后是绝对值不等式 第一个经常用来放缩不等式,证明极限 第二…

DENet:用于可见水印去除的Disentangled Embedding网络笔记

1 Title DENet: Disentangled Embedding Network for Visible Watermark Removal(Ruizhou Sun、Yukun Su、Qingyao Wu)[AAAI2023 Oral] 2 Conclusion This paper propose a novel contrastive learning mechanism to disentangle the high-level embedd…

Debian 系统镜像下载

最近在看一些网络相关的文章需要用到 debian 11.x 的系统网上找了好多都发下载,在官网看一下 有个 11.8 的版本我无法下载,提示被最新的 debian-12.4.0 所代替,于是找到了这个链接 Index of /cdimage/unofficial/non-free/cd-including-fi…

imazing是什么软件

imazing是什么软件 iMazing 是世界上最值得信赖的软件,可以将您的信息、音乐、文件和数据从 iPhone 或 iPad 传输到您的 Mac 或 PC。 获得备份、数据提取、媒体和文件传输的强大能力,以及更多 iMazing 功能。 iMazing是一款第三方的苹果iOS设备管理软件。 iMazing- 2 Mac-安装…

死锁(面试常问)

1.什么是死锁 简单来说就是一个线程加锁后解锁不了 一个线程,一把锁,线程连续加锁两次。如果这个锁是不可重入锁,会死锁。两个线程,两把锁。 举几个例子,1.钥匙锁车里了,车钥匙锁家里了。2. 现在有一本书…

在 Qt Creator 中编写 Doxygen 风格的注释

2023年12月10日,周日上午 如何生成Doxygen 风格的注释 在需要Doxygen 风格注释的函数上方输入 /**,然后按下 Enter 键。Qt Creator 将自动为你生成一个注释模板。 输入,Qt Creator会自动帮你补全Doxygen标签 不得不说,写了Doxyge…

Re58:读论文 REALM: Retrieval-Augmented Language Model Pre-Training

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:REALM: Retrieval-Augmented Language Model Pre-Training 模型名称:Retrieval-Augmented Language Model pre-training (REALM) 本文是2020年ICML论文,作者来自…

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务—鸿鹄工程管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 项目背景 随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提…

数据结构与算法:衡量算法好坏的指标——复杂度

1.复杂度 复杂度,用来分析算法执行过程中,所需要的资源。 时间复杂度是衡量所需要的时间。 空间复杂度,是衡量所需要的(内存)空间。 1.1 时间复杂度 特性 1.衡量算法执行所需时间 2.根据「常数操作」次数推定 3.一般以最大数据量N作为衡量…

js基础:函数、对象、WebAPIs-DOM

一、函数和对象 1、函数概述 🤖chatgpt:什么是函数?为什么要有函数? 函数是一种可重复使用的代码块,它们可以接受输入(参数)、执行特定的任务,并返回结果。 JavaScript中函数是非常…

Paper Reading: (InPL) 不平衡半监督学习中的分布内伪标记优先

目录 简介目标/动机方法实验总结Appendix 简介 题目:《InPL: Pseudo-labeling the Inliers First for Imbalanced Semi-supervised Learning》, ICLR’23 ​ InPL:不平衡半监督学习中的分布内伪标记优先 日期:2023.2.2 单位:威斯康星大学麦…

高通平台开发系列讲解(外设篇)高通平台EMMC适配说明

文章目录 一、EMMC的内部框图说明二、EMMC 设备树配置三、EMMC 内核配置四、EMMC 源码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要图解高通平台 EMMC适配说明。 eMMC(嵌入式多媒体卡)是一种集成了闪存存储器和控制器的存储芯片,通常用于嵌入式设备中,…

STM32的看门狗(WDG)

WDG(Watchdog)看门狗 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠…