分布式数据库(ShardingSphere)

news2024/9/22 7:21:17

单库单表数据量过大导致的问题与应对

传统的将数据集中存储至单一数据节点的解决方案,在容量、性能、可用性和运维成本这三方面

已经难于满足互联网的海量数据场景。我们在单库单表数据量超过一定容量水位的情况下,索引

树层级增加,磁盘 IO 也很可能出现压力,会导致很多问题。

从性能方面来说,由于关系型数据库大多采用 B+树类型的索引,在数据量超过阈值的情况下,索

引深度的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降;同时, 高并发访问

请求也使得集中式数据库成为系统的最大瓶颈。

从可用性的方面来讲,服务化的无状态型,能够达到较小成本的随意扩容,这必然导致系统的最

终压力都落在数据库之上。而单一的数据节点,或者简单的主从架构,已经越来越难以承担。数

据库的可用性,已成为整个系统的关键。

从运维成本方面考虑,当一个数据库实例中的数据达到阈值以上,对于 DBA 的运维压力就会增大。

数据备份和恢复的时间成本都将随着数据量的大小而愈发不可控。一般来讲,单一数据库实例的

数据的阈值在 1TB 之内,是比较合理的范围。

MySQL 单表一般可以存多少数据

MySQL 常用的 InnoDB 引擎(支持事务,有行级锁),使用的 B+树的索引结构, InnoDB 存储引擎的最小存储单元是页,页可以用于存放数据也可以用于存放键值 + 指针, 在 B+ 树中叶子节点存放数据,非叶子节点存放键值 + 指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而在去数据页中查找到需要的数据。为了跟磁盘 io 的交互次数 2-3 次就能找到一条记录,我们假设树不超过 3 层。假设一行数据的大小是 1k,那么一个页(innodbpagesize 一般为 16k)可以存放 16 行这样的数据。

我们假设主键 ID 为 bigint 类型,长度为 8 字节,而指针大小在 InnoDB 源码中设置为 6 字节,这样一共 14 字节,我们一个页中能存放多少这样的单元,其实就代表有多少指针,即 16384/14=1170。

那么可以算出一棵高度为 2 的 B+ 树,能存放 1170*16=18720 条这样的数据记录。

根据同样的原理我们可以算出一个高度为 3 的 B+ 树可以存放:1170 x 1170 x 16=21902400 (两千万)条这样的记录。

MySQL 5.7 (PARTITION-分表的思想)

分区是把数据库、或它的组成部分(比如表)分成几个小部分。而且专门介绍的都是’水平分区’,即对表的行进行划分。

分区的优点:

1. 可以提高数据库的性能;

2. 对大表(行较多)的维护更快、更容易,因为数据分布在不同的逻辑文件上;

3. 删除分区或它的数据是容易的,因为它不影响其他表。

缺点:

不能解决单节点数据库容量的压力

分布式数据库

1、垂直分片:

垂直拆分(拆库):例如拆分所有订单的数据和产品的数据,变成两个独立的库。

垂直拆分(拆表):如果单表数据量过大,还可能需要对单表进行拆分。比如一个200 列的订单主表,拆分成十几个子表:订单表、订单详情表、订单收件信息表、订单支付表、订单产品快照表等等。

2、水平分片:

水平拆分(按主键分库分表):水平拆分就是直接对数据进行分片,有分库和分表两个具体方式,但是都只是降低单个节点数据量,但不改变数据本身的结构。

水平拆分(按时间分库分表):很多时候,我们的数据是有时间属性的,所以自然可以按照时间维度来拆分。比如当前数据表和历史数据表,甚至按季度,按月,按天来划分不同的表。

Apache ShardingSphere

Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

ShardingSphere-JDBC

定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

  • 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。

  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。

  • 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。

ShardingSphere-Proxy

定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和 PostgreSQL 版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作数据,对 DBA 更加友好。

向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用。

适用于任何兼容 MySQL/PostgreSQL 协议的的客户端。

ShardingSphere-Sidecar

定位为 Kubernetes 的云原生数据库代理,以 Sidecar 的形式代理所有对数据库的访问。 通

过无中心、零侵入的方案提供与数据库交互的啮合层,即 Database Mesh,又可称数据库网格。

Database Mesh 的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互进行有效地梳理。 使用 Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。

ShardingSphere-混合架构

比较

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

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

相关文章

数据库(六): MySQL的主从复制和读写分离

文章目录一、为什么要使用主从复制和读写分离二、主从复制的原理三、如何实现主从复制3.1 master配置3.2 slave配置3.3 测试主从复制四、读写分离五、缺点一、为什么要使用主从复制和读写分离 注意到主从复制和读写分离一般是一起使用的。目的很简单,就是提高数据库…

Python:路径之谜(DFS剪枝)

题目描述 小张冒充 X 星球的骑士,进入了一个奇怪的城堡。 城堡里边什么都没有,只有方形石头铺成的地面。 假设城堡地面是 nn 个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着走&#xf…

Java类和对象超详细整理,适合新手入门

目录 一、驼峰命名法 二、Java注释 三、转义符 四、Java程序它的基本结构是什么? 五、Java中的类 六、创建类 七、定义main方法 八、执行代码输出语句 九、Java中的对象 十、创建对象 十一、类与对象的关系 一、驼峰命名法 包名:多单词组成所…

常用类详解(二)StringBuffer

StringBuffer类: 基本介绍: java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删 很多方法与String相同,但StringBuffer是可变长度的。 StringBuffer是一个容器。 我们进行查看StringBuffer,如下…

fpga设计中如何防止信号被优化

本文分别对quartus和vivado防止信号被优化的方法进行介绍。 为什么要防止信号被优化 ​ 在FPGA开发调试阶段,经常遇到这样的情况,需要临时添加信号,观察信号变化,用来定位代码中存在的问题,很多时候这些临时添加的信…

sg3_utils arm64 静态编译

需求背景 在进行ufs等scsi device测试时,需要进行power mode切换等测试,因此需要有一个简单地工具集来向scsi device(ufs接口)发送scsi命令,比如 scsi reset命令等。在网上调研后发现sg3_utils是一个比较全面的工具。…

本地代码提交至gitee仓库

1、新建仓库 新建一个私人访问的仓库 2、创建公钥 点开cmd 输入ssh-keygen -t rsa -C "xxxxxxxxxx.com" 邮箱填入自己使用的即可。 输入完毕后,连按三次enter。 命令就会执行完毕,会出现这个界面 此时已经代表ssh公钥已经创建完毕。 公…

自动驾驶TPM技术杂谈 ———— 摄像头标定

文章目录介绍摄像头内参标定摄像头模型的建立摄像头坐标系与环境坐标系的转换图像坐标系与图像像素坐标系小孔成像与图像物理坐标系环境坐标系与图像像素坐标系的转换摄像头畸变矫正常见内参标定方法平面标定自标定摄像头间外参标定介绍 标定传感器是自动驾驶感知系统中不可缺少…

Springboot集成工作流Activity

介绍 官网:https://www.activiti.org/ 一 、工作流介绍 1.工作流(workflow) 就是通过计算机对业务流程自动化执行管理,它主要解决的是“使在多个参与这之间按照某种预定义规则自动化进行传递文档、信息或任务的过程&#xff0c…

儿童绘本馆图书借阅租赁知识付费小程序源码交流

1.分类图书 2.书单推荐 4.会员卡次、期限购买 5.借阅时间选择 6.积分签到 7.优惠Q领取 前端uniapp开发 后端thinkphp开发 完全开源 <template> <view class"sp-section sp-index"> <!-- search --> <view class&qu…

【第30天】SQL进阶-查询优化- performance_schema系列实战五:查看最近的事务执行信息(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、 查看最近的事务执行信息数据准备&#xff08;如果已有数据可跳过此操作&#xff09;开启第一个会话&#xff0c;配置启用事务事件开启第二个会话&#xff0c;用于执行事务&#xff0c;并模拟事务回滚第一个会话查询活跃事件第…

详解无线技术标准都使用哪些频段?中国物联网市场又适用哪些频段

由于各行各业都有各自的频段只应用需求&#xff0c;所以一般频段都是由国家来进行分配的。国家设立无线电管理机构&#xff0c;通过拍卖、定价的方法向企业、机构发放频段使用许可。获得许可的机构将会获得拍照。这也就是5G&#xff0c;4G时各运营商获得国家颁发牌照的由来。只…

【QT】TCP通信(QTcpServer 和 QTcpSocket)

目录1. TCP通信概述2. QTcpServer2.1 公共函数2.2 信号2.3 保护函数3. QTcpSocket3.1 公共函数3.2 信号4. 代码示例4.1 服务器端MainWindow.hMainWindow.cpp4.2 客户端MainWindow.hMainWindow.cpp4.3 界面显示1. TCP通信概述 TCP是一种被大多数Internet网络协议&#xff08;如…

【设计模式】我终于读懂了代理模式。。。

&#x1f466;代理模式的基本介绍 1)代理模式&#xff1a;为一个对象提供一个替身&#xff0c;以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 2)被代理的对象可以是远程对象、创建…

SharpImpersonation:一款基于令牌和Shellcode注入的用户模拟工具

关于SharpImpersonation SharpImpersonation是一款功能强大的用户模拟工具&#xff0c;该工具基于令牌机制和Shellcode注入技术实现其功能&#xff0c;可以帮助广大研究人员更好地对组织内部的网络环境和系统安全进行分析和测试。 该工具基于 Tokenvator的代码库实现其功能&a…

webpack、vite、vue-cli、create-vue 的区别

webpack、vite、vue-cli、create-vue 的区别 首先说结论 Rollup更适合打包库&#xff0c;webpack更适合打包项目应用&#xff0c;vite基于rollup实现了热更新也适合打包项目。 功能工具工具脚手架vue-clicreate-vue构建项目vite打包代码webpackrollup 脚手架:用于初始化&#…

icon-font的使用

先登录阿里巴巴图标矢量库官网iconfont-阿里巴巴矢量图标库在官网挑选需要的图标点击图标购物车并且点击下载代码下载好之后将文件夹里面的css&#xff0c;ttf文件放置到你的项目当中并且点击里面的html文件这里面有详细的用法&#xff0c;这里我是用的时font class方法‘方法二…

【macOS】mac电脑M2芯片安装Homebrew 最简单的方法

一 Homebrew的安装 打开终端&#xff0c;复制如下命令&#xff0c;按回车执行 M芯片和Intel芯片均可 中途可能需要你手动输入密码&#xff0c;输入完成回车即可&#xff08;密码不可见 选择中科大或者清华镜像源 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/Hom…

MyBatis案例 | 使用映射配置文件实现CRUD操作——修改数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JavaWeb Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&…

简单易懂、无线产品上市认证:进网许可证、入网证、CTA认证

简单易懂、无线产品上市认证:进网许可证、入网证、CTA认证 通信产品想在中国市场进行销售,一般需要通过以下三种认证 : CCC强制认证、TA型号核准(SRRC)、NAL进网许可(CTA) 今天我们来详细了解一下NAL(Network Access License)工信部信息通信管理局的相关要求。 那么…