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
相关推荐
黒亱中旳9 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring
网络工程小王9 小时前
[智能对话系统架构设计文档]
java·系统架构·langraph
alxraves9 小时前
医用超声远程会诊系统:会诊平台的核心架构与功能解析
java·人工智能·架构
带刺的坐椅9 小时前
用 Solon AI ReActAgent 落地智能客服工单处理
java·ai·llm·agent·solon·react-agent
我是坏垠10 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant10 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
广州灵眸科技有限公司12 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
库克克12 小时前
【C++ 】内联函数
java·开发语言·c++
zh_xuan12 小时前
java 虚拟线程
java·开发语言·虚拟线程
jason成都12 小时前
RTKLIB Java 移植踩坑复盘:卡尔曼滤波核心逻辑修复与滑坡场景实测验证
java·开发语言