shardingjdbc(八)拓展分片算法
上篇中提到可以通过spi机制拓展分布式序列算法,其实shardingjdbc很多核心组件和算法都支持自定义扩展。这篇说下通过spi机制拓展分片算法; 简单的说就是实现对应的接口,实现getType 方法和对应的分片类,然后就可以在配置文件中使用对应的类型了; 假设要扩展一个标准的分片算法 首先自定义类,并实现 StandardShardingAlgorithm,其他的组合或强制路由的算法需要实现其他的那2个接口; 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677package com.example.shardingjdbcdemo.spi;import lombok.SneakyThrows;import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShard ...
shardingjdbc(七)分布式序列
分片带来的主键唯一问题当一个表的数据被切分到多个表的时候,那么单表的唯一主键就无法通过数据库来控制了,因为需要保证同一个表在多个真实表的主键id的唯一性。 注意:5.x 版本和4.x版本在配置上有略微的差别 内置解决方案shardingjdbc内置了2种主键算法来供选择; uuiduuid 就是利用了jdk生成的uuid 字符串,来保证主键id 的不重复的特点 内置算法类是 UUIDKeyGenerateAlgorithm 使用方式也很简单 123456keyGenerateStrategy: column: order_id keyGeneratorName: uuidkeyGenerators: uuid: type: UUID 缺点:1.主键必须是 字符串类型; 2. 主键非连续的,对于b-tree索引插入数据时,建立索引的性能比连续数据的性能比较差; 优点: 比较简单 不是很推荐的一种方式; 雪花算法雪花算法是Twitter 开源的一种分布式序列算法。生成的是一个64bit的整数。并且生成的是根据时间连续的; 整体结构 是 时间戳 ...
shardingjdbc(六)广播表和绑定表
广播表配置广播的特点是所有的接收端就能收到。所以对于这里的广播表的概念就是插入数据所有的节点都能获取到同样的数据; 一般用到比如数据字典等数据量不到,但是所有数据源都需要有相同的数据的场景 一个表配置成广播表是一定不分片的 插入时,向所有数据源广播发送sql语句 查询时,只查询其中的一个数据源 配置: 只需要在broadcastTables 下可增加多个需要广播的表信息 123broadcastTables: - t_user - t_auth 绑定表有这么一个场景,order 和 user 都是分片的,并且2个表是有对应的关联关系的,那么在通过连接查询2个分片的表的时候,默认的最怎么查呢? 假设有4张数据表,每个表都分片2个。 完整配置如下; 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657spring: application: name: shardingjdbcDemo main: allow- ...
shardingjdbc(五)默认策略配置
未指定数据源的表数据源如何选择的?假设又有一个user表;对于user表未配置分片策略; 主要的配置信息为: 2个数据源 只对order 进行分表; 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667spring: application: name: shardingjdbcDemo main: allow-bean-definition-overriding: true shardingsphere: #数据源信息 datasource: #名称为dbsource-0的数据源 dbsource-0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: j ...
shardingjdbc(四)选择分片算法
本篇将通过小例子的方式来一个一个的说明内置的分片算法; 内置多种分片算法以满足不同的业务场景; 自动分片算法内置了一些常见场景的分片算法,只需要简单配置一些属性就可以实现分片 取模分片算法顾名思义就是通过数据取模来分片,只需要指定分片算法类型和分片的数量,就会自动根据分片键的数据 % 分片的数量 完成分片 分片算法只需要指定类型,和配置一个几个分片的属性即可 完整配置如下 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263spring: application: name: shardingjdbcDemo main: allow-bean-definition-overriding: true shardingsphere: #数据源信息 datasource: #名称为dbsource-0的数据源 dbsource-0: type: c ...
shardingjdbc(三)选择分片策略
shardingjdbc 通过分片策略 + 分片算法完成数据分片; shardingjdbc 为我们提供了4种分片策略,我们可以根据自己的需求选择合适的策略配置,当然如果提供的都不能满足需求,也可以自定义策略,自定义策略会在后面的章节介绍。 分片策略的接口是 1org.apache.shardingsphere.sharding.route.strategy.ShardingStrategy 内置分片策略 分片策略 配置key 对应的实现类 适用场景 说明 不分片 none NoneShardingStrategy 不分片 不需要分片的时候配置此策略 标准分片 standard StandardShardingStrategy 单个分片键 只有一个分片键的时候使用此策略 组合分片 complex ComplexShardingStrategy 多个分片键 表有多个分片键的时候使用此策略 命中分片 hint HintShardingStrategy 非固定分片键 比较灵活的分片场景 所以在选择分表或分库的策略的时候,主要是针对分片键来决定的。根据分片键的一个 ...
shadingjdbc(二)开始使用,快速入门
以springboot 来开始使用shardingjdbc 引入shardingjdbc starter依赖 12345<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>${shardingsphere.version}</version> </dependency> 其他的比如数据库连接驱动,mybaytis,等引入,完整pom如下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 ...
shadingjdbc(一)介绍和基本原理
接下来的几篇文章将通过理论和代码操作实例的方式快速入门shadingjdbc(5.0版本)。 简单介绍shardingjdbc是一个用来分库分表的框架是shadingsphere 的一个子项目。 shadingsphere 截止目前包含了3个产品,JDBC,Proxy 和 Sidecar。shadingsphere在 2020 年已经是apache顶级项目。 官网地址: ShardingSphere shardingjdbc 主要的功能是针对支持jdbc 规范的关系型数据库做分库分表等操作。 支持的数据库有 Mysql,openGauss,postgreSQL,SQLServer,Oracle,SQL92 为什么要分库分表在实际开发场景中,会遇到有些数据表数据量比较大的场景,而mysql对数据量的承受能力是有限的,比如当单表数据量超过一定的数量,单表通过索引查询会遇到一个性能瓶颈,查询会比较的慢。那么就需要考虑分表查询和存储。随着业务的发展和并发量的增加,即使分了表,单台数据库的性能压力还会比较大,主要体现在CPU,IO,内存等压力并没有分解,那么需要对数据进行分库存储分担查询压力。 ...
远程连接经常断开解决
问题描述Linux 通过远程工具 经常出现连接断开的问题; Linux系统版本 Centos7 连接客户端 finalShell 3.9.4 解决 编辑ssh配置文件 1sudo vim /etc/ssh/sshd_config 添加 或放开配置 123TCPKeepAlive yesClientAliveInterval 5ClientAliveCountMax 180 TCPKeepAlive 保持连接 ClientAliveInterval 客户端的心跳间隔 ClientAliveCountMax 客户端最大的超时时间 重启服务 1systemctl restart sshd 但是通过这种方式并没有效果; 配置环境变量中的 TMOUT 1vim /etc/profile 写入内容 1export TMOUT=0 0 表示了不超时。 参考连接: https://blog.csdn.net/GGxiaobai/article/details/53507161 https://zhuanlan.zhihu.com ...
mybatis-自定义plugins
简单说明在使用mybatis的时候非常常用的一个插件就是分页的插件。首先回顾下这个插件的使用。 引入对应的依赖 123456789101112<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> <exclusions> <!--去除内部版本--> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </ex ...




