ShardingSphere-JDBC

1. 什么是分库分表?

分库分表是一种数据库扩展技术,通过将数据拆分到多个数据库(分库)或多个表(分表)中来解决单一数据库或表带来的性能瓶颈。分库分表可以有效提升系统的可扩展性、性能和高并发处理能力,避免单一数据库或表的负载过重。

1.1 什么是分库?

分库指的是将数据分散到多个数据库实例中,以减轻单一数据库的负载。分库可以有两种方式:垂直分库水平分库

  • 垂直分库:

    • 垂直分库是指根据业务模块的不同,将不同模块的数据存储到不同的数据库中。例如,将用户数据存储在 user_db 中,将订单数据存储在 order_db 中,将商品数据存储在 product_db 中。每个数据库只负责一部分业务数据。
    • 适用场景: 适用于系统中各个模块的数据量差异很大,或者需要对不同模块进行独立管理的场景。
  • 水平分库:

    • 水平分库是指将同一业务的不同数据根据某些规则(如时间、地域等)拆分到多个数据库中。例如,按照地区划分,将美国的用户数据存储在 db_us 中,将欧洲的用户数据存储在 db_eu 中,或者按照时间将数据按年、月划分到不同的数据库中。
    • 适用场景: 适用于数据量巨大,且需要根据某些标准进行数据拆分的场景。
1.2 什么是分表?

分表是指将同一张表中的数据拆分到多个表中,以避免单个表过大而导致性能问题。分表也有两种方式:垂直分表水平分表

  • 垂直分表:

    • 垂直分表是指将一张表中的不同列分拆到多个表中。通常是将表中的列根据功能或访问频率进行划分。例如,将一个包含用户详细信息的表,按照访问频率将常用字段(如用户名、密码等)拆分成 user_basic 表,而将不常用的字段(如用户画像、日志等)拆分成 user_extra 表。
    • 适用场景: 适用于表中包含大量列,但并非所有列都会频繁访问的场景。
  • 水平分表:

    • 水平分表是指将表中的数据按照某些规则(如ID范围、时间等)拆分到多个表中。例如,用户表的数据根据用户ID范围分拆成多个表,如 user_1, user_2, user_3 等,或者按时间拆分成 user_2023, user_2024 等。
    • 适用场景: 适用于数据量过大,导致单表查询性能低下的情况。

2. 分库分表场景

2.1 什么场景分表?

分表适用于以下场景:

  • 单表数据量过大: 当某个表的记录数达到千万级,查询时可能会非常缓慢,尤其是涉及全表扫描的操作,分表可以有效提高查询效率。
  • 高并发读写: 单表无法承载高并发的查询和写入请求时,可以通过水平分表将压力分散到多个表上。
  • 单表的数据结构复杂,且访问频繁的列较少: 在这种情况下,垂直分表可以将高频访问的列提取到单独的表中,提高性能。
2.2 什么场景分库?

分库适用于以下场景:

  • 数据库连接数不足: 单个数据库的连接数上限(如 MySQL 默认为 4000 个连接)无法满足高并发的请求时,可以通过分库将连接请求分散到多个数据库实例上。
  • 数据库资源瓶颈: 当单个数据库的 CPU、内存、磁盘等资源无法满足需求时,分库可以将数据分布到多个数据库实例上,从而避免单点故障和资源瓶颈。
  • 高并发读写: 当需要处理大量并发请求时,单个数据库无法支撑,需要通过分库将请求分散到多个数据库节点上。
2.3 什么场景分库分表?

分库分表适用于以下场景:

  • 数据量巨大且访问量大: 当数据量达到数千万甚至更大,且访问量高时,单库单表无法满足存储、查询和写入需求。此时,分库分表能有效地提高查询性能和扩展系统能力。
  • 高并发写入和查询: 在高并发的业务场景中,单库单表的性能瓶颈可能导致系统无法处理所有请求。分库分表能够将数据分布在不同的物理节点上,提高系统的并发处理能力。
  • 资源瓶颈和高可用性需求: 当数据库实例的资源有限,且为了保证高可用性,必须将数据分散到多个数据库和表中,避免单点故障和资源耗尽。

3. 什么是 ShardingSphere?

ShardingSphere 是一个开源的分布式数据库中间件,提供数据库分片、分库分表、数据路由、分布式事务、数据脱敏等功能。它可以在不修改应用代码的情况下,为应用提供透明的分库分表支持,简化了分布式数据库的管理和维护。

ShardingSphere 的主要特点包括:

  • 数据分片: 支持灵活的分库分表策略,可以根据用户需求定制分片规则。
  • 分布式事务: 提供跨库跨表的分布式事务管理,确保数据一致性。
  • 读写分离: 提供读写分离功能,将读请求路由到从库,提高系统性能。
  • 弹性扩展: 支持动态添加新的数据源,帮助系统应对数据增长带来的压力。

4. 数据分片核心概念

4.1
  • 逻辑表: 应用层面上的虚拟表,实际数据存储在多个物理表中。
  • 真实表: 存储在数据库中的实际表,数据按分片规则分布在不同的物理表中。
  • 绑定表: 多个表之间具有外键关系或逻辑关联,需要绑定在一起进行分片操作。
  • 广播表: 一些小型表(如配置表、字典表等)将数据广播到所有数据库节点中,不进行分片。
  • 单表: 不需要分片的表,数据存储在单个表中。
4.2 数据节点
  • 均匀分布: 数据均匀地分布到多个数据节点中。
  • 自定义分布: 开发者可以定义特定的分布规则,决定数据如何在不同的数据节点上分布。
4.3 分片
  • 分片键: 决定数据如何分配到不同分片的字段,通常选择具有唯一性、分布均匀的数据字段作为分片键。
  • 分片算法: 根据分片键和预定义的算法将数据分配到不同的分片上,常见的算法有哈希分片、范围分片等。
  • 自动化分片算法: 系统自动根据配置的分片规则选择合适的分片算法。
  • 自定义分片算法: 开发者可以定义自己的分片算法,以满足特定的业务需求。
  • 分片策略: 定义了数据如何进行分片,包括按ID、时间、范围等不同策略进行数据划分。
  • 强制分片路由: 强制要求某些操作使用特定的分片策略进行路由,通常用于特定业务需求。
4.4 行表达式

行表达式是指描述分片规则的表达式,帮助系统决定某一行数据应该放入哪个分片。

4.5 分布式主键

分布式主键确保在多个数据库和表中生成全局唯一的主键,避免出现主键冲突,通常通过全局唯一ID生成策略来实现。

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

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

相关文章

Scala的正则表达式二

验证用户名是否合法 规则 1.长度在6-12之间 2.不能数字开头 3.只能包含数字,大小写字母,下划线def main(args: Array[String]): Unit {val name1 "1admin"//不合法,是数字开头val name2 "admin123"//合法val name3 &quo…

谈谈web3

全面解析 Web3:未来互联网的革命性进程 引言:互联网进化的三部曲 互联网的发展经历了三个重要阶段,每一个阶段都深刻地改变了我们的生活方式: Web1(1990-2005):静态互联网时代,人…

mysql高级篇 | 尚硅谷 | 第11章_数据库的设计规范

十一、数据库的设计规范 文章目录 十一、数据库的设计规范一、为什么需要数据库设计二、范式1、范式简介2、范式都包括哪些3、键和相关属性的概念4、第一范式(1st NF)5、第二范式(2nd NF)6、第三范式(3rd NF)7.小结 三、反范式化1、概述2、应用举例3、反范式的新问题4、反范式的…

【汽车】-- 发动机类型

汽车发动机根据不同的分类标准可以分为多种类型。以下是常见的发动机类型及其特点,并列举相应的品牌和车型举例: 1. 按燃料类型分类 (1) 汽油发动机 特点:使用汽油作为燃料,通过火花塞点火,转速高,运转平…

自然语言处理的未来愿景

自然语言处理的未来愿景 在这个信息爆炸的时代,计算机如何理解和生成我们日常使用的语言,已经成为一个引人注目的问题。你有没有想过,为什么智能助手能理解你的指令?又或者,为什么社交媒体上的推荐引擎能够精准地推荐你喜爱的内容?这背后,正是自然语言处理(NLP)在发挥…

【蓝桥杯每日一题】砍竹子

砍竹子 2024-12-7 蓝桥杯每日一题 砍竹子 STL 贪心 题目大意 这天, 小明在砍竹子, 他面前有 nn 棵竹子排成一排, 一开始第 ii 棵竹子的 高度为 h i h_i hi​. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为…

微信小程序开发简易教程

微信小程序文件结构详解 1. 项目配置文件 project.config.json 项目的配置文件包含项目名称、appid、编译选项等配置示例: {"description": "项目配置文件","packOptions": {"ignore": []},"setting": {&quo…

Unix/Linux 命令行重定向操作

2>/dev/null 是一个常见的 Unix/Linux 命令行重定向操作,用于将标准错误(stderr)输出重定向到 /dev/null,即丢弃错误信息而不显示。理解这个表达式需要了解几个概念:文件描述符、重定向和特殊文件 /dev/null。 ###…

图解LinkedList底层原理

图解LinkedList底层原理 本篇将讲解Java中的一个集合LinkedList的底层实现原理,会查看并分析底层源码,结合图解的方式,理解其添加数据的过程 数据结构 LinkedList 是基于双向链表实现的,节点结构如下: private stati…

react antd tabs router 基础管理后台模版

在构建 React 后台管理系统时,使用标签页的方式展示路由是一种高效且用户友好的设计模式。这种实现方式通常允许用户在多个页面之间快速切换,并保留页面的状态,类似于浏览器的多标签页功能。 需求分析 1.动态标签页:根据用户的导…

【OpenCV】图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值,则会被赋为一个值(可能为白色),否则会赋为另一个值(可能为黑色)。使用的函数是 cv.threshold。第一个参数是源图像,它应该是灰度图像。第二…

初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容

uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…

【开源】一款基于SpringBoot 的全开源充电桩平台

一、下载项目文件 下载源码项目文件口令:动作璆璜量子屏多好/~d1b8356ox2~:/复制口令后,进入夸克网盘app即可保存(如果复制到夸克app没有跳转资源,可以复制粘贴口令到夸克app的搜索框也可以打开(不用点搜索按钮&#…

Ubuntu上使用system()函数运行不需要输入密码

使用system()运行一些终端命令的时候,需要sudo权限,也就是必须输入密码,那么在程序自启动的时候就无法成功启动。如果设置Ubuntu下所有操作都不需要密码,安全性太低,所以我们可以将需要用到的终端指令给予无需输入密码…

【人工智能】人工智能,深度学习与人工神经网络

人工智能 人工智能一、定义与核心要素二、主要方法与技术三、应用领域四、发展前景与挑战五、分类六、研究目标与价值 深度学习定义与核心思想网络结构工作原理关键技术与模型应用领域发展与挑战 人工神经网络一、定义与原理二、基本特性三、网络结构四、工作原理五、应用领域六…

RPC 详解

一、简介 RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许程序在不同的计算机上执行过程或服务。RPC 使得开发者能够像调用本地函数一样调用远程服务,简化了网络编程的复杂性。使得开发者能够专注…

WHAT - React 富文本编辑器推荐

目录 1. Draft.js2. Slate.js3. Quill4. TinyMCE5. CKEditor6. react-quill7. TipTap8. Lexical React 生态中有许多优秀的开源富文本编辑器可供使用,以下是一些常用的选择: 1. Draft.js Draft.js 优点: 由 Facebook 开发和维护&#xff0…

php使用file_get_contents返回false

php使用file_get_contents返回false, 具体报错内容如下: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request 解决方式1 : 使用curl 替换 file_get_contents 解决方式2 : 请检查请求网址中是否包含中文, 将中文部分进行urlencode function encodeChin…

国产GPU中,VLLM0.5.0发布Qwen2.5-14B-Instruct-GPTQ-Int8模型,请求返回结果乱码

概述 国产GPU: DCU Z100 推理框架: vllm0.5.0 docker容器化部署 运行如下代码: python -m vllm.entrypoints.openai.api_server --model /app/models/Qwen2.5-14B-Instruct-GPTQ-Int8 --served-model-name qwen-gptq --trust-remote-code --enforce…

WireShark速成

1.WireShark安装 官网: Wireshark Go Deep Kali Linux系统自带WireShark工具。 2.WireShark介绍 WireShark是一个网络包分析工具,该工具主要用于捕获网络数据包,并自动解析数据包,为用户显示数据包的详情信息,供…