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

news2024/12/23 16:23:26

为什么需要分库?

随着数据量的急速上升,单个数据库可能会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.coloradmin.cn/o/1308869.html

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

相关文章

bugku--Simple_SSTI_1---2

第一题 看到一句话,需要传入一个传参为flag 设置一个变量为 secret_key 构造paykoad /?flagsecret_key 但是发现什么都没有 SSTI模版注入嘛 这里使用的是flask模版 Flask提供了一个名为config的全局对象,可以用来设置和获取全局变量。 继续构造pa…

揭示 ETL 系统架构中的 OLAP、OLTP 和 HTAP

探索 ETL 系统设计需要了解 OLAP、OLTP 和不断发展的 HTAP。让我们试图剖析这些范式的复杂性。 1. OLAP(联机分析处理): OLAP 是商业智能的中流砥柱,通过 OLAP 立方体进行多维数据分析。这些立方体封装了预先聚合、预先计算的数据…

关键点检测之修改labelme标注的json中类别名

import json import os import shutil#source_dir表示数据扩增之后的文件夹路径,此时标注的是多分类的标签 #new_dir表示转化之后得到的二分类文件夹def to2class():#json存放路径source_dir r1#json保存路径new_dir r1for i in os.listdir(source_dir):if i.ends…

人工智能_机器学习065_SVM支持向量机KKT条件_深度理解KKT条件下的损失函数求解过程_公式详细推导_---人工智能工作笔记0105

之前我们已经说了KKT条件,其实就是用来解决 如何实现对,不等式条件下的,目标函数的求解问题,之前我们说的拉格朗日乘数法,是用来对 等式条件下的目标函数进行求解. KKT条件是这样做的,添加了一个阿尔法平方对吧,这个阿尔法平方肯定是大于0的,那么 可以结合下面的文章去看,也…

任意文件读取漏洞

使用方法php://filter/readconvert.base64-encode/resourcexxx 任意文件读取漏洞 php://filter/readconvert.base64-encode/resourceflag 在url后边接上 以base64的编码形式 读取flag里面的内容 php://filter/readconvert.base64encode/resourceflag 用kali来解码 创建一个文…

【LeetCode刷题笔记(2)】【Python】【字母异位词分组】【中等】

字母异位词分组 题目描述 给定一个字符串数组strs,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。 输入:字符串数组strs 输出:结果列表 字母异位词:由重新排列源单词的所有字母得到的一个新单词。 要求&#x…

Weblogic-CVE-2023-21839

一、漏洞概述 RCE漏洞,该漏洞允许未经身份验证的远程,通过T3/IIOP协议网络访问并破坏WebLogic服务器,成功利用此漏洞可导致Oracle WebLogic服务器被接管,通过rmi/ldap远程协议进行远程命令执行,当 JDK 版本过低或本地存在小工具&…

html 中vue3 的setup里调用element plus的弹窗 提示

引入Elementplus之后&#xff0c;在setup&#xff08;&#xff09;方法外面导入ElMessageBox const {ElMessageBox} ElementPlus 源码 &#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><!-- import Vue before Elemen…

[Halcon图像] 基于多层神经网络MLP分类器的思想提取颜色区域

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

【代码随想录算法训练营-第六天】【哈希表】242,349,202,1

242.有效的字母异位词 第一遍 思考 比较简单&#xff0c;用数组就能实现了 class Solution {public boolean isAnagram(String s, String t) {int[] checkListi new int[256];int[] checkListj new int[256];for (int i 0; i < s.length(); i) {char checkChar s.ch…

【C语言程序设计】数组程序设计

目录 前言 一、数组的定义和初始化 二、数组的基本操作 三、数组的高级应用 四、程序设计 4.1 程序设计第一题 4.2 程序设计第二题 4.3 程序设计第三题 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助…

Redis哨兵模式:什么是哨兵模式、哨兵模式的优缺点、哨兵模式的主观下线和客观下线、投票选举、Redis 哨兵模式搭建

文章目录 什么是哨兵模式哨兵模式的优缺点主观下线和客观下线投票选举哨兵模式场景应用Redis version 6.0.5 集群搭建下载文件环境安装解压编译配置文件启动关闭密码设置 什么是哨兵模式 哨兵模式是Redis的高可用解决方案之一&#xff0c;它旨在提供自动故障转移和故障检测的功…

洛谷P1722 矩阵Ⅱ——卡特兰数

传送门&#xff1a; P1722 矩阵 II - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1722 用不需要除任何数的公式来求。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cmath> #includ…

群晖(Synology)更换硬盘时间和精神双重折磨的教训

话说玩磁盘阵列的最后结果就是时间上负担不起&#xff0c;并且还被嫌弃。 在磁盘都到位后下一步就是要选择冗余类型了&#xff0c;对大部分人来说使用群晖自己提供的就好了&#xff0c;通常是 SHR。 什么是 SHR Synology Hybrid RAID&#xff08;SHR&#xff09;是 Synology…

解决:ImportError: cannot import name ‘PyKeyboard’ from ‘pykeyboard’

解决&#xff1a;ImportError: cannot import name ‘PyKeyboard’ from ‘pykeyboard’ 文章目录 解决&#xff1a;ImportError: cannot import name ‘PyKeyboard’ from ‘pykeyboard’背景报错问题报错翻译报错位置代码报错原因解决方法1&#xff0c;安装Pyhook3. 安装PyUs…

【淘宝网消费类电子产品销售数据可视化】

淘宝网消费类电子产品销售数据可视化 引言数据爬取与处理数据可视化系统功能1. 总数据量分析2. 店铺总数据3. 店铺销售额排名4. 不同电子商品销售价格5. 单个商品价格排名6. 不同省份平均销量7. 不同地区的平均销售额8. 省份数量9. 每个省份有用的平均个数 创新点结语 引言 随…

【PostgreSQL】从零开始:(二)PostgreSQL下载与安装

【PostgreSQL】从零开始:&#xff08;二&#xff09;PostgreSQL下载与安装 Winodws环境下载与安装PostgreSQL下载PostgreSQL安装PostgreSQL1.登录数据库2.查看下我们已有的数据库 Liunx环境下载与安装PostgreSQL使用YUM下载安装PostgreSQL1.下载PostgreSQL安装包2.安装PostgreS…

Selenium库自动化测试入门

前言 为什么要学selenium&#xff1f;&#xff1f;前面已经学了requests库我们会发现 对于绝大多数动态渲染的网页来说&#xff0c;用requests进行爬虫比较繁琐。 所以我们还是要学习一下selenium库&#xff0c;以帮助我们更高效的爬取网页。 环境&#xff1a; pychar 202…

golang反射(reflect)虽爽,但很贵

标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码&#xff0c;提高开发效率。 但是使用反射势必会多出大量的操作指令&#xff0c;导致性能下降 案例 字段赋值方式对比 type Student struct {Name string…

centos7中的管道和重定向

重定向 0 标准输入 1 标准输出 2 标准错误 3 进程在执行的过程中打开的其他文件 & 标准正确和标准错误的混合输出 输出重定向 &g…