博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高性能架构-数据库分库分表-ShardingSphere
阅读量:693 次
发布时间:2019-03-17

本文共 2841 字,大约阅读时间需要 9 分钟。

高性能架构-数据库分库分表-ShardingSphere

Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

Apache ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。


文章目录


前言

ShardingSphere。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ShardingSphere是什么?

ShardingSphere-JDBC 是 Apache ShardingSphere 的第一个产品,也是 Apache ShardingSphere 的前身。 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。

支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。

二、主要原理

sharding-jdbc框架集成在应用端,应用代码执行jdbc dao操作时,被shardingpjdbc框架拦截,进行本地的sql解析,改写,路由,执行。即解析到sql语句,获取到语句的类型,涉及到的表和关键字段,如DML语句(update,delete,insert,create)DQL(select)语句实现路由到不同的数据库实现读写分离,解析到不同的表根据分片规则(如 where id=1)路由到不同的库和表,实现分库分表。路由到对应的数据库上执行,将返回的结果归并,因为一条sql可能涉及到多个库和表的联查,返回给DAO操作的方法。

**加粗样式
**

三、简易使用

直接上代码,在写的过程中,遇到了不少坑,再次也一并分享给大家

1.引入依赖

使用mybatisplus与shardingshpere集成开发的

com.baomidou
mybatis-plus-boot-starter
io.shardingsphere
sharding-jdbc-spring-boot-starter
3.1.0

此处遇到坑一:使用sharding-jdbc-spring-boot-starter 4.0.1版本时,一直报错,改为3.1.0版本就可以了

2.增加配置

配置文件中增加:

sharding:  jdbc:    datasource:      names: ds0      ds0:        jdbcUrl: jdbc:mysql://ip:3306/bpmp        type: com.zaxxer.hikari.HikariDataSource        driverClassName: com.mysql.cj.jdbc.Driver  #com.mysql.jdbc.Driver        username: username        password: password    config:      sharding:        tables:          data_user:  #data_user表            key-generator-column-name: id  #主键            actual-data-nodes: ds0.data_user_${
0..9} #数据节点,均匀分布 table-strategy: #分表策略 inline: #行表达式 sharding-column: cus_id algorithm-expression: data_user_${
cus_id % 10} #按模运算分配 props: sql: show: true
spring:  main:    allow-bean-definition-overriding: true

遇到的坑二:需要设置allow-bean-definition-overriding: true

配置说明:

数据源ds0中的表逻辑表 data_user 主键为id,分表策略为根据行表达式来分 inline
sharding-column: cus_id
algorithm-expression: data_user_${cus_id % 10} #按模运算分配
制定根据cus_id字段%10分表,分为了十张表。

3.数据库中建立对应的库表

数据库中根据设置的表,需要建立对应的物理表

即上述的data_user_0,data_user_1,data_user_2,data_user_3
data_user_4,data_user_5,data_user_6,data_user_7
data_user_8,data_user_9


总结

本文为简单的sharding-jdbc入门,详细内容可参考官网

https://shardingsphere.apache.org/document/legacy/3.x/document/cn/overview/

转载地址:http://yashz.baihongyu.com/

你可能感兴趣的文章