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
相关推荐
Lumos_7778 小时前
Linux -- 线程
java·jvm·算法
知兀9 小时前
【MybatisPlus】后端用枚举类,数据库用tinyint,存在枚举类型转换
java
StockTV9 小时前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
User_芊芊君子9 小时前
【OpenAI 把 AI 玩明白了】:自主推理 + 动态知识图谱,这 4 个技术突破要颠覆行业
java·人工智能·知识图谱
c++之路9 小时前
C++20概述
java·开发语言·c++20
Championship.23.249 小时前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮9 小时前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken10 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步10 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿10 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring