ShardingSphere

1 ShardingSphere

  • 开源的分布式关系型数据库中间件解决方案组成的生态圈,由ShardingJDBC、ShardingProxy、ShardingSidecar这三款相互独立却能混合部署配合使用的产品组成,它们都能提供标准化的数据分片、分布式事务和数据库治理的功能

  • ShardingJDBC:轻量级Java框架,在JDBC层以jar包形式提供额外服务(主要为数据分片和读写分离),无须额外部署,简化了数据分库分表后的数据操作。它使客户端直连数据库,兼容JDBC和各种ORM框架,支持任何第三方数据库连接池,支持任意实现JDBC规范的数据库

  • ShardingProxy:透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持

  • 分库分表:

    • 垂直分表:把一个宽表的字段按访问顺序、是否是大字段等原则拆分分别存储在不同的表中,即垂直拆分字段

    • 垂直分库:把多个表按业务耦合的松紧归类,分别存放在不同数据库甚至不同服务器上,使访问压力负载均衡,做到专库专表

    • 水平分表:把一个表的数据记录行按某种规则将部分记录分表存储,即水平拆分记录

    • 水平分库:把一个表的数据记录行分到不同数据库存储,甚至不同服务器上,按照某种规则存储数据(如某个库存储id为偶数的)

    • 数据量不大或访问压力不大,则考虑缓存、读写分离、索引等;若数据量大且持续增长,再考虑分库分表

    • 存在问题:跨节点连接查询问题(分页、排序);多数据源管理问题;事务一致性问题;主键重复问题(使用全局主键)


2 ShardingJDBC

  • 创建两张存储同类数据的表:table1,table2,table3

  • ShardingJDBC实现水平分表;编写分片策略:

    # 数据源设置
    spring.shardingsphere.datasource.names=db # 数据源,自定义名称
    # 数据源具体内容
    spring.shardingsphere.datasource.db.type= org.apache.commons.dbcp.DruidDataSource
    spring.shardingsphere.datasource.db.driver-class-name=com.mysql.jdbc.Driver
    spring.shardingsphere.datasource.db.url=jdbc:mysql://localhost:3306/myDB?...
    spring.shardingsphere.datasource.db.username=root
    spring.shardingsphere.datasource.db.password=
    # 配置表分布情形
    spring.shardingsphere.sharding.tables.table.actual-data-nodes=db.table_$->{1..3} # 行表达式标识符,以映射出指定数据库中指定表
    # 主键生成策略
    spring.shardingsphere.sharding.tables.table.key-generator.column=id
    spring.shardingsphere.sharding.tables.table.key-generator.type=SNOWFLAKE
    # 指定表的分片策略:如约定id值偶数则数据加到table1,奇数则加到table2
    spring.shardingsphere.sharding.tables.table.table-strategy.inline.sharding-column=id
    spring.shardingsphere.sharding.tables.table.table-strategy.inline.algorithm-expression=table_$->{id %2 + 1}
    # SQL输出日志
    spring.shardingsphere.proos.sql.show=true 
  • 编写Java插入数据;编写SQL:insert into table...;它会根据分片策略在解析SQL后把数据插入到对用的table1或table2中

  • ShardingJDBC实现水平分库;编写分片策略:

    # 多个数据源设置
    spring.shardingsphere.datasource.names=db1,db2 # 数据源,自定义名称
    # 分别设置多个数据源具体内容
    ......
    # 配置指定数据库里的指定表的分布情形
    spring.shardingsphere.sharding.tables.table.actual-data-nodes=db$->{1..2}.table_$->{1..3}
    # 主键生成策略
    ......
    # 指定表的分片策略:如约定id值偶数则数据加到table1,奇数则加到table2
    ......
    # 指定库的分片策略:如约定userid值偶数则数据加到db1,奇数则加到db2
    spring.shardingsphere.sharding.tables.table.datasource-strategy.inline.sharding-column=user_id
    spring.shardingsphere.sharding.tables.table.datasource-strategy.inline.algorithm-expression=db$->{user_id %2 + 1}
  • ShardingJDBC实现垂直分表;编写分片策略:

  • ShardingJDBC实现垂直分库;编写分片策略:

  • 公用全局表/数据字典表:

  • 读写分离/主从复制:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值