-
开源的分布式关系型数据库中间件解决方案组成的生态圈,由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条)