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
相关推荐
落魄实习生10 小时前
Agent Scope Java 2.x 系列【10】Middleware
java·开发语言·ai
ZealSinger11 小时前
Spring7 RestTemplate弃用迁移
java·spring·后端开发·restclient
朝朝辞暮i11 小时前
C++ 第 13 课:值传递 —— 为什么函数里改了,外面却没变?
java·c++·算法
弹简特11 小时前
【Java项目-企悦抽】16-抽奖模块01-获取活动完整信息接口实现
java·开发语言·状态模式·springboot
泡茶喝茶写代码12 小时前
A股量化数据工程:从 REST 接口到策略信号(第 1 篇):指数列表与实时行情接入
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据接口
Sarvartha12 小时前
接口基础知识
java·开发语言
不才不才不不才12 小时前
Spring 源码系列(29): 20 道高频面试题源码级解析合集
java·后端·spring
索隆zoro12 小时前
Army 的可插拔架构:army-jdbc 与方言模块
java·后端
小蒜学长13 小时前
校园社团招新网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·校园社团招新网站
Dovis(誓平步青云)13 小时前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑