数据库分片

news2024/12/23 4:25:01

文章目录

  • 一、为什么要分片
  • 二、什么是数据分片
    • 1、垂直分片
    • 2、水平分片
  • 三、常用分片策略
    • 1、Range
    • 2、Hash
  • 四、相关中间件
    • 1、Sharding-Sphere
    • 2、Sharding-jdbc

一、为什么要分片

从性能方面来说,由于关系型数据库大多采用B+树类型的索引,在数据量超过阈(yu)值的情况下,索引深度的增加也将使得磁盘访问的IO次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中式数据库成为系统的最大瓶颈。

从可用性的方面来讲,服务化的无状态型,能够达到较小成本的随意扩容,这必然导致系统的最终压力都落在数据库之上。而单一的数据节点,或者简单的主从架构,已经越来越难以承担。

从运维成本方面考虑,当一个数据库实例中的数据达到阈值以上,对于DBA的运维压力就会增加,数据备份和恢复的时间成本都将随着数据量的大小而愈发不可控。一般来讲,单一数据库实例的数据阈值在1TB之内是比较合理的范围。如果过多的数据存于一张表中,对于查询影响较大。

二、什么是数据分片

数据分片指按照某个维度将存放在单一数据库中的数据分散的存放在多个数据库或表中以达到提升性能瓶颈以及可用性的效果。数据分片的拆分方式又分为垂直分片和水平分片。

1、垂直分片

按照业务拆分的方式称为垂直分片,又称为纵向拆分,核心理念是专库专用。例如下图展示了根据业务需要,将用户表和订单表垂直分片到不同数据库的方案。

在这里插入图片描述
垂直分片往往需要对架构和设计进行调整。通常来讲,是来不及应对互联网业务需求快速变化的;而且,它也无法真正的解决单点瓶颈。垂直拆分可以缓解数据量和访问量带来的问题,但无法根治。因为如果垂直拆分之后,表中的数据量依然超过单节点所能承受的阈值,还是会导致查询性能下降。这种情况下就需要水平分片进一步处理。

2、水平分片

水平分片又称为横向拆分,相较于垂直分片,它不是把数据根据业务逻辑分类拆分,而是通过某个字段或某几个字段的某种规则,将数据分散至多个库或表中,每个分片仅包含所有数据的一部分。例如下图展示了根据主键分片,偶数主键的记录放入A库(或表),奇数主键的记录放入1库(或表):
在这里插入图片描述

三、常用分片策略

1、Range

根据时间段进行分片。
在这里插入图片描述
好处是自带水平扩展,不需要过多敢于;缺点是可能会出现数据不均匀的情况,比如某个月的数据量暴涨。

2、Hash

将数据存入表之前,通过Hash规则算出该数据需要存到哪一个数据库(或表)。
在这里插入图片描述

四、相关中间件

1、Sharding-Sphere

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这3款相互独立的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。
在这里插入图片描述

2、Sharding-jdbc

Sharding-jdbc定位为轻量级Java框架,在Java的jdbc层提供的额外服务。它使用客户端直连数据库,以jar包的形式提供服务,无需额外部署和依赖,可理解为增强版的jdbc驱动,完全兼容jdbc、各种ORM框架和数据库连接池。
在这里插入图片描述
Sharding-JDBC中的分片策略

  • 标准分片策略
    对应StandardShardingStrategy,提供对SQL语句中的=,IN和BETWEEN AND的分片操作支持,StandardShardingStrategy只支持单分片键,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法。PreciseShardingAlgorithm是必选的,用于处理=和IN的分片。RangeShardingAlgorithm是可选的,用于处理BETWEEN AND分片,如果不配置RangeShardingAlgorithm,SQL中的BETWEEN AND将按照全库路由处理。
  • 复合分片策略
    对应ComplexShardingStrategy。复合分片策略。提供对SQL语句中的=, IN和BETWEEN AND的分片操作支持。ComplexShardingStrategy支持多分片键,由于多分片键之间的关系复杂,因此并未进行过多的封装,而是直接将分片键值组合以及分片操作符透传至分片算法,完全由应用开发者实现,提供最大的灵活度。
  • 行表达式分片策略
    对应InlineShardingStrategy。使用Groovy的表达式,提供对SQL语句中的=和IN的分片操作支持,只支持单分片键。对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的Java代码开发,如: t_user_$->{u_id % 8} 表示t_user表根据u_id模8,而分成8张表,表名称为t_user_0到t_user_7。
  • Hint分片策略
    对应HintShardingStrategy。通过Hint而非SQL解析的方式分片的策略。
  • 不分片策略
    对应NoneShardingStrategy。不分片的策略。

Sharding-JDBC中的分片算法
通过分片算法将数据分片,目前提供了4中分片算法接口,由于分片算法和业务实现紧密相关,因此并未提供内置分片算法,而是通过分片策略将各种场景提炼出来,提供更高层级的抽象,开发者可以自行实现这些接口。

  • 精确分片算法
    对应PreciseShardingAlgorithm,用于处理使用单一键作为分片键的=和IN进行分片的场景,需配合StandardShardingStrategy使用。
  • 范围分片算法
    对应RangeShardingAlgorithm,用于处理使用单一键作为分片键的BETWEEN AND进行分片的场景,需要配合StandardShardingStrategy使用。
  • 复合分片算法
    对应ComplexKeysShardingAlgorithm,用于处理使用多个键作为分片键进行分片的场景,包含多个分片键的逻辑较为复杂,需要应用开发者自行处理其中的复杂度,需要配合ComplexShardingStrategy使用。
  • Hint分片算法
    对应HintShardingAlgorithm,用于处理使用Hint进行分片的场景,需要配合HintShardingStrategy使用。

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

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

相关文章

【python】re解析和re模块

目录 正则 RE概念 常见的元字符 量词 贪婪&惰性 修饰符 re模块 findall finditer search match 预加载正则式 内容提取 正则 RE概念 常见的元字符 量词 贪婪&惰性 贪婪匹配.* 惰性匹配.*? 修饰符 修饰符描述re.I使匹配对大小写不敏感re.L做本地化识别&…

接口测试框架实战 | 流程封装与基于加密接口的测试用例设计

接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法,是远远不够的,还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以,接下来,我们主要介绍下接口测试用例分析以及通用的流程封装是如何…

GO语言基础-06-匿名函数和闭包

文章目录1. 匿名函数概念语法示例2. 闭包概念语法语法示例1. 匿名函数 概念 如其名,匿名函数不声明函数名。因此要调用匿名函数只能定义一个变量等于该匿名函数。 语法 func(参数 参数类型)(返回值 返回值类型){函数体 }示例 代码 package mainimport "fm…

Jenkins操作文档

前言 jenkins概述 持续集成是一种实践,而jenkins可以帮助团队去尽量好的去完成这种实践 jenkins是⼀个开源软件项⽬,是基于Java开发的⼀种持续集成⼯具,⽤于监控持续重复的⼯作,旨在提供⼀个开放易⽤的软件平台,使软…

“锂”想护航|深耕重点工段,用AI为锂电池安全生产加倍提速!

行业发展DEVELOPMENT -受益于新能源汽车市场的爆发增长、“双碳”政策影响下的储能市场扩大等影响,中国锂电行业现已进入高度产业化、规模化发展时期。锂电池生产工艺较长,生产设备庞杂,专用性强,而当前已迈入国际化竞争的锂电行业…

【Vue】032-尚硅谷-尚品汇-mockjs模拟数据---20230111

032-尚硅谷-尚品汇-mockjs模拟数据 官网链接 第一步:安装依赖包mockjs 安装mockjs npm install --save mockjs第二步:在src文件夹下创建一个文件夹mock。 第三步:准备模拟的数据。! mock/banner.json [{"id": "1","imgUrl": &q…

哪种蓝牙耳机音质好?2023公认音质最好的蓝牙耳机推荐

现如今,蓝牙耳机的使用频率越来越高,其在音质上的表现也越来越好。那么,在众多的蓝牙耳机当中,哪种蓝牙耳机音质好?下面,我来给大家推荐几款公认音质最好的蓝牙耳机,一起来看看吧。 一、南卡小…

(十七)Java的时间与日期(1)

目录 前言: ①Date类 ②SimpleDateFormat类 ③Calendar 前言: 时间和日期. 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分析,集群节…

深入浅出变长结构体

1、 问题的引出 项目中用到数据包的处理,但包的大小是不固定的,其长度由包头的2字节决定。比如如下的包头:88 0f 0a ob cd ef 23 00 。长度由头2个字节880f决定,考虑字节序,转为0f88,转为10进制3976个字节的…

汽车零部件行业追溯系统的应用

汽车行业正处于一个蓬勃发展的阶段,随着客户需求的不断变化,生产厂商推出新款商品的速度也越来越快,新项目和变更的不断出现,就可能导致在交付的产品质量方面遇到各种各样的问题。如果这些质量问题得不到及时有效地追溯和控制&…

知识点滴 - PLC培训笔记

如上图所示,这个设备就是PLC的应用场景,对外控制很多接口电路,交流直流,不同大小电流、电压的电路。在工业上使用很多。 而开发PLC程序时,是在相应的集成开发环境中,画出如下的梯形图: 什么是PL…

Vue使用Element-UI生成并展示表头序号

前言 序号算是在展示数据的时候,一种很普遍的属性了,我们可以自己写生成序号的规则,也可以借助第三方。 这里我选择后者,使用Element-UI自带的一个table属性,去生成并展示需要 首先看下我的页面,是没有序…

Apache Sling App CMS <1.1.4 存在反射型XSS漏洞(CVE-2022-46769)

漏洞描述 Apache Sling 是一个基于可扩展内容树(extensible content tree)的 RESTful Web 应用框架。 1.1.4 之前版本的 Apache Sling 中的 cms.js#confirmMessage 方法未对用户可控的 title 和 message 参数进行过滤,攻击者可将精心构造的…

dubbo源码实践-总结

自己大概花了一个月的时间,断断续续的看了一遍dubbo源码,之前的文章从实践出发搭建了dubbo各层的例子!Dubbo源码的学习也暂时告一段落。这篇就谈谈自己对dubbo源码学习个人感受!1 dubbo是什么?dubbo是一个RPC框架&…

网站优化包括对什么优化(网站优化有哪些方面)

互联网时代下,各行各业都想在在互联网中占据市场,目前网站优化成为时代的潮流,很多站长,在对网站进行优化时,稍不注意就会造成网站优化过度,这也是各位最头疼的事情,网站优化能急于求成&#xf…

KubePi <1.6.4 存在会话固定漏洞(CVE-2023-22479)

漏洞描述 KubePi 是一个 K8s 面板,允许管理员导入多个 Kubernetes 集群,并且通过权限控制将不同 cluster、namespace 的权限分配给指定用户。 1.6.4 之前版本的 KubePi 在用户登录后未刷新用户 cookie,攻击者可通过诱导用户点击恶意链接等劫…

maven创建web工程,使用模板方式(二)

一,选择webapp模板 二,填写完信息后,创建后是如下的结构: 可以看到只有web目录,没有其他的java,resources,test目录等。 三,创建Java,resources,test目录 右键-> ma…

【C语言进阶】 指针强化练习

目录题目一题目二题目三题目四题目五题目六题目七题目八题目一 下面这段代码的执行结果是? int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d\n", *(a 1), *(ptr - 1));return 0; }解决这种数组与指针相结合的问题…

【Leetcode面试常见题目题解】2. 无重复字符的最长子串

题目描述 本文是LC第3题:无重复字符的最长子串。 题目描述如下 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 举例 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 输入:…

html实现酷炫的公司年会抽奖(附源码)

文章目录1.设计来源1.1 主界面1.2 抽奖效果1.2 中奖效果2.效果和源码配置2.1 动态效果2.2 员工信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码源码下载作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/128640998 ht…