ShardingSphere 介绍

ShardingSphere 使用指南_shardingsphere使用-CSDN博客

1.1 ShardingSphere 简介

Apache ShardingSphere 是一款开源的分布式数据库中间件生态系统,旨在将现有的数据库转变为分布式数据库解决方案。它通过数据分片、读写分离、分布式事务和数据加密 等功能,增强了原有数据库的能力。ShardingSphere 提供了 ShardingSphere-JDBC 和 ShardingSphere-Proxy 两种核心组件,分别适用于不同的应用场景

1.2 分布式数据库的挑战与解决方案

在分布式数据库环境中,主要面临以下挑战:

数据一致性:由于数据分布在多个节点上,确保各节点间的数据一致性变得复杂。

分布式事务:跨节点的事务处理需要协调多个节点,增加了事务管理的难度。

运维复杂性:分布式架构的部署、监控和故障排查比单体架构更为复杂。

为应对这些挑战,ShardingSphere 提供了以下解决方案:

数据分片:将数据水平拆分到多个节点上,提升系统的扩展性和性能。

读写分离:通过将读操作和写操作分离到不同的节点上,提升读写性能。

分布式事务:支持基于 XA 和 BASE 的混合事务引擎,确保跨数据源的数据一致性。

数据加密:提供透明的数据加密方案,保障数据安全。

2. ShardingSphere 的核心组件

Apache ShardingSphere 作为一款开源的分布式数据库中间件,提供了多种核心组件,以满足不同的应用场景需求。主要组件包括:

2.1 ShardingSphere-JDBC

ShardingSphere-JDBC 是一个轻量级的 Java 框架,旨在为 Java 应用程序提供增强的 JDBC 功能。它以 Jar 包形式集成到应用中,无需额外部署 ,直接在应用层实现数据分片、读写分离、分布式事务等功能。适用于任何基于 JDBC 的 ORM 框架,如 JPA、Hibernate、MyBatis、Spring JDBC Template 等。

2.2 ShardingSphere-Proxy

ShardingSphere-Proxy 是一个透明的数据库代理,支持 MySQL 和 PostgreSQL 协议。它以独立进程的形式运行,提供类似数据库的访问方式,适用于多语言开发环境。通过代理模式,应用程序无需修改即可实现数据分片、读写分离等功能,对 DBA 更加友好。

使用

java 复制代码
# 配置真实数据源
dataSources:
  ds0:
    type: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/ds0
    username: root
    password: your_password
  ds1:
    type: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/ds1
    username: root
    password: your_password

rules:
  - !SHARDING
    tables:
      t_order:
        actualDataNodes: ds${0..1}.t_order${0..1}
        tableStrategy:
          standard:
            shardingColumn: order_id
            shardingAlgorithmName: table_inline
        databaseStrategy:
          standard:
            shardingColumn: user_id
            shardingAlgorithmName: database_inline
    shardingAlgorithms:
      database_inline:
        type: INLINE
        props:
          algorithm-expression: ds${user_id % 2}
      table_inline:
        type: INLINE
        props:
          algorithm-expression: t_order${order_id % 2}

订单表 t_order 做 分库 + 分表

  • 按 user_id 分库 → 决定去 ds0 还是 ds1
  • 按 order_id 分表 → 决定去 t_order0 还是 t_order1
相关推荐
nanxun88616 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户15630681035118 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师20 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261352 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程