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
相关推荐
白鸽(二般)5 小时前
MinIO Java Client API
java·开发语言
软萌萌的16 小时前
Java Spring Boot 修改yml配置&加载顺序规则
java·spring boot·python
IT小盘7 小时前
13-企业Prompt模板-角色任务约束与输出格式
java·前端·prompt
爱敲键盘的猴子7 小时前
Java并发编程 -- volatile
java·java并发
plainGeekDev8 小时前
工厂模式 → Hilt
android·java·kotlin
plainGeekDev9 小时前
Application 单例 → Hilt Singleton
android·java·kotlin
888CC++9 小时前
C语言与C++的区别:从面向过程到面向对象
java·c语言·c++
学者猫头鹰10 小时前
分布式事务实战教程
java·分布式
heimeiyingwang11 小时前
【架构实战】Kubernetes调度器深度剖析:从Pod调度到自定义调度器
java·架构·kubernetes
纳兰青华12 小时前
回文侦探:三种境界破解最长回文子串
java·算法·动态规划