ShardingSphere——介绍

什么是 ShardingSphere?

Apache ShardingSphere 是一个开源的分布式数据库中间件生态圈,可以看作是一个数据库增强工具中间件,它在应用程序和数据库之间,帮助开发者实现一些复杂的分布式数据库管理功能,为用户提供数据分片、分布式事务、数据库治理等功能。它支持通过分片(Sharding)、读写分离、影子库(Shadow Database)等多种方式,帮助开发者优化分布式数据库的操作体验。

具体来说,ShardingSphere 是为分布式数据库场景设计的,可以认为它是数据库能力的补充和增强。它并不直接存储数据,而是通过对 SQL 的拦截和处理,将数据分发到不同的数据库实例或表中,最终返回聚合的查询结果。

ShardingSphere 主要包括以下三个核心组件:

  1. ShardingSphere-JDBC

    • 类似于增强版的 JDBC,轻量级,无需中间层部署。

    • 与应用程序嵌入在一起,支持数据分片、读写分离等功能。

  2. ShardingSphere-Proxy

    • 一个独立的代理层,类似数据库代理服务器。

    • 可以直接与现有的数据库客户端(如 MySQL 客户端)交互,提供透明的数据分片和读写分离功能。

  3. ShardingSphere-Scaling

    • 提供数据迁移和同步服务,支持动态扩缩容。

关键点

逻辑表 vs. 物理表

  • 逻辑表:应用程序中操作的表名。

  • 物理表:实际存储数据的表名(通过 ShardingSphere 映射)。

分片策略

  • 水平分片:根据分片键值(如 user_id),将数据存储到不同的物理表。

  • 库表映射规则:通过 actual-data-nodes 定义。

分布式 ID

  • 使用 SNOWFLAKE 作为主键生成器,避免 ID 冲突。

路由和聚合

  • ShardingSphere 自动处理查询路由和结果聚合,开发者无需关心具体表的细节。

优势

轻量级:可以嵌入到应用中,不需要额外部署服务(使用 ShardingSphere-JDBC)。

扩展性强:支持动态添加数据源和分片规则。

支持多种数据库:如 MySQL、PostgreSQL、Oracle 等。

高性能:通过分片、读写分离优化性能。

兼容性:完全兼容现有的 JDBC 和数据库客户端。

注意点

  1. Sharding 和事务冲突

    • Sharding 会将数据分散到多个库表,普通的事务管理可能失效,需要使用分布式事务管理。

  2. 分片键的选择

    • 分片键应该是查询频繁的字段,避免影响性能。

  3. 规则复杂度

    • 复杂的分片规则可能导致维护成本增加,需要权衡业务需求。

与数据库的关系

功能数据库提供ShardingSphere 提供
数据存储数据库(MySQL、PostgreSQL 等)不负责存储数据,仅负责分发、路由和聚合
SQL 执行数据库拦截 SQL,优化分片后的路由逻辑
分库分表不支持或需手动实现自动完成数据分片
读写分离需手动配置动态路由到主库/从库
分布式事务复杂且需额外工具内置分布式事务协议,简化实现
动态扩缩容数据库不负责ShardingSphere-Scaling 提供支持

应用场景

数据分片(Sharding)

  • 将大表拆分成多个小表(水平分表),分布到不同的数据库中。

  • 提高查询性能,解决单表数据量过大的问题。

读写分离

  • 配置主从数据库架构,将写操作路由到主数据库,读操作路由到从数据库。

  • 提高数据库性能和吞吐量。

分布式事务

  • 通过 XA、BASE 等事务协议,支持跨多个数据库的分布式事务管理。

多租户

  • 在 SaaS 系统中,按租户划分数据,通过动态分表和路由实现隔离。

数据库治理

  • 动态数据路由、灰度发布、数据脱敏等场景。

结合Spring Boot使用

1. 引入依赖

pom.xml 中添加 ShardingSphere 的依赖:

<dependencies>
    <!-- ShardingSphere-JDBC 核心依赖 -->
    <dependency>
        <groupId>org.apache.shardingsphere</groupId>
        <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
        <version>5.3.1</version>
    </dependency>
</dependencies>

2. 配置数据源

application.yml 文件中配置数据源和 ShardingSphere 规则:

spring:
  shardingsphere:
    datasource:
      common:
        username: root
        password: password
        driver-class-name: com.mysql.cj.jdbc.Driver
      # 配置第一个数据源
      ds0:
        url: jdbc:mysql://localhost:3306/demo_ds_0?useSSL=false&serverTimezone=UTC
      # 配置第二个数据源
      ds1:
        url: jdbc:mysql://localhost:3306/demo_ds_1?useSSL=false&serverTimezone=UTC
​
    rules:
      sharding:
        tables:
          # 配置逻辑表 user
          user:
            actual-data-nodes: ds${0..1}.user_${0..1}  # 定义物理表
            table-strategy:
              inline:
                sharding-column: user_id  # 分片键
                algorithm-expression: user_${user_id % 2}  # 分片算法
            key-generator:
              column: user_id
              type: SNOWFLAKE
        default-database-strategy:
          inline:
            sharding-column: user_id
            algorithm-expression: ds${user_id % 2}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【运维自动化-作业平台】如何使用全局变量之数组类型?

数组类型的全局变量也是作业平台里常用的&#xff0c;支持关联数组和索引数组&#xff0c;目前仅支持shell&#xff0c;语法跟shell一致。索引数组 语法 arry(1 2 3 a b c) ---定义一个数组arry ${arry[*]} ---获取所有数组元素 ${arry[]} ---获取所有数组元素 ${arry[0]} --…

docker安装zabbix +grafana

安装zabbix grafana 1、部署 mkdir -p /opt/zabbix/{data,backups}mkdir -p /opt/grafanasudo chown -R 472:472 /opt/grafanasudo chmod -R 755 /opt/grafanacat > docker-compose.yml <<-EOF version: 3.3services:mysql-server:image: mysql:8.1container_name: m…

容器安全检测和渗透测试工具

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect Docker-bench-…

GB 35114-2017 学习笔记(规避版权阉割版)

GB 35114-2017 学习笔记&#xff08;规避版权阉割版&#xff09; openstd.samr.gov.cn 国家标准全文公开系统 这个政府网站提供GB 35114-2017标准的的预览和下载&#xff0c;有需要的自行下载 GB 35114-2017作为一个国家强制标准&#xff0c;在国家标准全文公开系统 自己做个…

高校企业数据挖掘平台推荐

TipDM数据挖掘建模平台是由广东泰迪智能科技股份有限公司自主研发打造的可视化、一站式、高性能的数据挖掘与人工智能建模服务平台&#xff0c;致力于为使用者打通从数据接入、数据预处理、模型开发训练、模型评估比较、模型应用部署到模型任务调度的全链路。平台内置丰富的机器…

ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)

ROSSERIAL与Arduino IDE交叉开发 一、简介二、安装1、Ubuntu下的Arduino IDE安装 **针对ESP32报错问题原因溯源和修改**三、运行结点 一、简介 这个教程展示在ubuntu环境下如何利用Arduino IDE配合rosserial开发机器人部件。通过Arduino IDErosserial实现arduino/esp32开发板通…

word-毕业论文的每一章节的页眉单独设置为该章的题目怎么设置

在Microsoft Word中&#xff0c;为毕业论文的每个章节设置不同的页眉&#xff0c;通常需要使用“分节符”来分隔各个章节&#xff0c;然后在每个章节中单独设置页眉。以下是详细步骤&#xff1a; 使用分节符 插入分节符&#xff1a; 将光标放在每个章节的末尾&#xff08;注意…

Flutter:SlideTransition位移动画,Interval动画延迟

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationControllerlate AnimationController _controller;overridevoid initState() {super.…

H.265流媒体播放器EasyPlayer.js网页全终端安防视频流媒体播放器可以播放本地视频吗

H.264/H.265播放器EasyPlayer.js主要用于在网页上实现视频播放功能&#xff0c;特别是针对RTSP流的播放。它允许开发者在不需要安装额外插件或软件的情况下&#xff0c;直接在网页中嵌入和播放来自监控摄像头或其他RTSP源的视频流。 可以播放本地视频吗&#xff1f; 回答&…

Linux: 任务的定时与延期

概述 ls 这种命令是立刻执行的命令&#xff0c;在linux中命令还可以延时执行&#xff0c;它们都涉及到时间的观念 常用命令 先来看下有关系统时间的规格 1 &#xff09; date 命令调节时间 $ date 显示当前时间还可以去定制 date 的一个输出, $ man date 可自定义输出 $ d…

RBAC——基于角色的访问控制

目录 一、RBAC核心概念 1. 角色&#xff08;Role&#xff09; 2. 用户&#xff08;User&#xff09; 3. 权限&#xff08;Permission&#xff09; 4. 会话&#xff08;Session&#xff09; 二、RBAC模型的演进 1. RBAC0&#xff1a;基本模型 2. RBAC1&#xff1a;角色…

OceanBase V4.x应用实践:如何排查表被锁问题

DBA在日常工作中常常会面临以下两种常见情况&#xff1a; 业务人员会提出问题&#xff1a;“表被锁了&#xff0c;导致业务受阻&#xff0c;请帮忙解决。” 业务人员还会反馈&#xff1a;“某个程序通常几秒内就能执行完毕&#xff0c;但现在却运行了好几分钟&#xff0c;不清楚…

同三维T80003JEHS 4K/60帧HDMI/SDI超高清H.265解码器

1路HDMI和1路SDI输出&#xff0c;1路3.5音频输入和1路3.5音频输出&#xff0c;1个USB2.0口1个USB3.0口&#xff0c;带1个RS232串口&#xff0c;2个网口&#xff0c;支持1路4K60或4路4K30或16路1080P或32路720P解码输出。4种画面分割显示模式。 产品简介&#xff1a; 同三维T80…

【更新中】《硬件架构的艺术》笔记(五):低功耗设计

介绍 能量以热量形式消耗&#xff0c;温度升高芯片失效率也会增加&#xff0c;增加散热片或风扇会增加整体重量和成本&#xff0c;在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支&#xff0c;产品也更小更便宜更可靠。本章描述了减少动态功耗和静态功耗的各种技术。…

网络安全审计概述与分类

目录 网络安全审计概述等保五个级别对审计要求网络安全审计系统组成网络安全审计系统类型 网络安全审计概述 4A分别是认证、授权、账号、审计 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储分析和利用的工作。 网络安全审计的作用在于建立“事后”…

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!

在生死时速的紧急救援战场上&#xff0c;每一秒都至关重要&#xff01;随着科技的发展&#xff0c;增强现实&#xff08;AR&#xff09;技术正在逐步渗透到医疗健康领域&#xff0c;改变着传统的医疗服务模式。 安宝特AR远程协助解决方案&#xff0c;凭借其先进的技术支持和创新…

IDEA:2023版远程服务器debug

很简单&#xff0c;但是很多文档没有写清楚&#xff0c;wocao 一、首先新建一个远程jvm 二、配置 三、把上面的参数复制出来 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 四、然后把这串代码放到服务器中&#xff08;这里的0.0.0.0意思是所有IP都能访问&a…

Midjourney基础命令和提示词

1 基础命令 1.1 /imagine prompt 生成图片的核心命令&#xff0c;prompt 后输入描述。 /imagine prompt: A majestic dragon flying over a misty mountain, cinematic lighting, 4K resolution 高级提示 1.1.1 基本参数 图片比例 --ar 图片比例 混乱 Aspect Ratios --…

ElasticSearch7.x入门教程之索引概念和基础操作(三)

文章目录 前言一、索引基本概念二、索引基本使用elasticsearch-head插件Kibana使用 总结 前言 要想熟悉使用ES的索引&#xff0c;则必须理解索引相关的概念&#xff0c;尤其是在工作当中。 在此记录&#xff0c;方便开展工作。 一、索引基本概念 尽量以通俗的话语。 1、集群…