Sharding-JDBC

在springboot项目中使用mybatis 集成 Sharding-JDBC

风格不统一 提交于 2020-02-13 07:48:50
前段时间写了篇如何使用Sharding-JDBC进行分库分表的例子,相信能够感受到Sharding-JDBC的强大了,而且使用配置都非常干净。官方支持的功能还包括读写分离、分布式主键、强制路由等。这里再介绍下如何在分库分表的基础上集成读写分离的功能。 读写分离的概念 就是为了缓解数据库压力,将写入和读取操作分离为不同数据源,写库称为主库,读库称为从库,一主库可配置多从库。 设置主从库后,第一个问题是如何进行主从的同步。官方不支持主从的同步,也不支持因为主从同步延迟导致的数据不一致问题。工程实践上进行主从同步有很多做法,一种常用的做法是每天定时同步或者实时同步。这个话题太大,暂不展开。 读写分离快速入门 读写可以单独使用,也可以配合分库分表进行使用,由于上个分库分表的例子是基于 1.5.4.1 版本进行说明的,这里为了紧跟官方的步伐,升级Sharding-JDBC到最新的 2.0.0.M2 项目结构如下: pom依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot<

mysql、oracle分库分表方案之sharding-jdbc使用(非demo示例)

风流意气都作罢 提交于 2020-02-12 06:25:21
选择开源核心组件的一个非常重要的考虑通常是社区活跃性,一旦项目团队无法进行自己后续维护和扩展的情况下更是如此。 至于为什么选择sharding-jdbc而不是Mycat,可以参考知乎讨论帖子https://www.zhihu.com/question/64709787。 还可以参考https://blog.csdn.net/u013898617/article/details/79615427。 关于分库分表和读写分离、主从 一般来说,需要分库分表的系统是流量比较大的,而且比较容易出现峰值的比如说打折/活动的时候;其次,当单机扛不住业务流量的时候,分库分表一定不是第一选择,在分库分表之前,应该先保证垂直拆分完成了,子系统内都是高内聚的,其次基于Master-Slave的读写分离或者模糊查询很多的,可能NoSQL比如elastic就引流去很大一部分了。当读写分离也做完了,主库只剩下关键业务逻辑之后,流量还是很高,这个时候才开始考虑分库分表。因为相对于读写分离、垂直拆分,分库分表对开发和运维的要求多得多,如果确定业务一两年内不会剧增的,盲目引入只会导致成本高昂(尤其是各种SQL限制)。 其次,分库分表会增加N倍的数据库服务器,一般来说是4的倍数,如果某个应用说要做分库分表,又只有两台机器,那完全就是凑热闹。 读写分离和分库分表应该来说是前后的两件事比较合理

sharding-jdbc 实现分表

一世执手 提交于 2020-02-12 06:08:26
Sharding-JDBC 简介 Sharding-JDBC直接封装JDBC API,可以理解为增强版的JDBC驱动,旧代码迁移成本: 可适用于任何基于Java的ORM框架,如:JPA、HIbernate、MYbatis、Spring JDBC Template或者直接使用JDBC。 可基于任何第三方的数据库连接池,如:DBCP、C3P0、Druid等。 理论上可支持任意实现JDBC规范的数据库。目前支持MySQL、Oracle、SQLServer等。 Sharding-JDBC定位为轻量级Java框架,使用客户端直连数据库,以jar包形式提供服务,未使用中间层,无需额外部署,无其他依赖,DBA也无需改变原有的运维方式。采用“半理解”理念的SQL解析引擎,以达到性能与兼容性的最大平衡。 Sharding-JDBC功能灵活且全面: 分片策略灵活,可支持 = , BETWEEN,IN等多维度分片,也支持多分片键共用。 SQL解析功能完善,支持聚合,分组,排序,Limit,TOP等查询,并且支持Binding Table以及笛卡尔积的表查询。 支持柔性事务(目前仅最大努力送达型)。 支持读写分离。 支持分布式生成全局主键。 整体架构图 sharding-JDBC 实现分表 数据库表 CREATE TABLE IF NOT EXISTS `t_order_0` ( `order_id`

sharding-jdbc-core 源码分析

不羁的心 提交于 2020-01-26 18:27:18
目录 Sharding-Jdbc 源码分析 1. Sharding-Jdbc 包结构 2. JDBC 四大对象 2.1 DataSource 2.2 Connection 2.3 Statement 2.4 ResultSet 3. Sharding-Jdbc 执行流程分析 4. sharding-jdbc-core 任务执行分析 4.1 ShardingStatement 4.2 StatementExecutor Sharding-Jdbc 源码分析 Apache Sharding-Sphere 系列目录( https://www.cnblogs.com/binarylei/p/12217637.html ) 在看 Sharding-Jdbc 源码之前,强烈建议先阅读一直官网的文章: Apache Sharding-Jdbc 数据分片 JDBC 调用过程如下:APP -> ORM -> JDBC -> PROXY -> MySQL。如果要完成数据的分库分表,可以在这五层任意地方进行,Sharding-Jdbc 是在 JDBC 层进行分库分表,Sharding-Proxy 是在 PROXY 进行分库分表。 Sharding-Jdbc 是一个轻量级的分库分表框架,使用时最关键的是配制分库分表策略,其余的和使用普通的 MySQL 驱动一样,几乎不用改代码。具体使用方法参考:

SpringCloud配置sharding-jdbc

自闭症网瘾萝莉.ら 提交于 2020-01-17 13:56:16
官网地址: http://shardingsphere.apache.org/index_zh.html Maven配置: <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>3.0.0</version> </dependency> SpringBoot版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> </parent> yml配置: 注意 此处是jdc-url 不是url sharding: jdbc: datasource: names: message0,message1 # 数据源ds0 message0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://10.10.10

解析Sharding-Sphere的SQL执行引擎

回眸只為那壹抹淺笑 提交于 2020-01-07 19:07:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、前言 Sharding-JDBC 是一款优秀的分库分表框架,从3.0开始,Sharding-JDBC更名为Sharding-Sphere,之前用Sharding-JDBC 2时,对于同库分表而言,sql执行是串行的,因为同数据源的connection只会获取一个,并且对于connection加上了synchronized,所以对于同库分表而言,整个执行过程完全是串行的。最后为了同库分表可以并行,不得不为同一个库配置多个连接池。Sharding-Sphere 3.0对执行引擎进行了优化,引入内存限制模式和连接限制模式来动态控制并行度。 本篇博客主要剖析以下两个问题: 1、内存限制模式和连接限制模式是如何控制同一数据源串行和并行的 2、执行引擎优雅的设计 二、Sharding-Sphere的两种模式的差别 内存限制模式:对于同一数据源,如果有10张分表,那么执行时,会获取10个连接并行 连接限制模式:对于同一数据源,如果有10张分表,那么执行时,只会获取1个连接串行 控制连接模式的算法如下: 更多设计的细节可以仔细阅读Sharding-Sphere官网:http://shardingsphere.io/document/current/cn/features/sharding/principle/execute

开源基础框架 csx-bsf-all【开源】【原创】

佐手、 提交于 2020-01-07 01:01:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 开源csx-bsf-all Git地址 https://gitee.com/yhcsx/csx-bsf-all ​ 技术架构 彩食鲜技术架构概述 介绍 BSF 为 base service framework 的简写,定义为技术团队的基础框架,用于基础服务的集成和跟业务无关的基础技术集成。 BSF集成了自研的监控报警,用来监控各个服务系统的性能及异常告警。集成并封装Apollo,Rocket MQ,Redis, Elastic Search,ELK,XXLJOB, Sharding JDBC,Cat,Eureka,七牛云等第三方中间件,提供简易使用的底层框架。 愿景 为了更好地支持业务开发,让开发人员从中间件中解放出来,专注业务以提高开发效率。同时基础框架集中统一优化中间件相关服务及使用,为开发人员提供高性能,更方便的基础服务接口及工具。 项目结构规范说明 csx-bsf-all -- csx-bsf-core (项目核心类库) -- csx-bsf-demo (项目集成使用demo) -- csx-bsf-dependencies (项目依赖pom定义) -- README.md (说明文档,必须有) -- csx-bsf-starter (项目full-start包) -- csx-bsf-elk

关于分库分表

我与影子孤独终老i 提交于 2019-12-26 23:37:10
一.为什么要进行分库分表 高并发,请求太多,扛不住了。(比如一台单机一般最好不要超过2000/s的QPS,高峰时期有8000QPS,这时候就要利用分库分表、消息中间件、数据库中间件、异步写来缓解服务器压力) 单机磁盘容量快满了 单表数据量太大,SQL越跑越慢 二. 分库分表中间件有哪些,优缺点 ​ 目前常用的有sharding-jdbc(基于client层)、mycat(基于proxy层) ​ client层优点在于不用部署,运维成本低,直接通过jar包导入所需的系统模块,缺点在于但是如果遇到升级的需求 的话,各个系统模块都需要升级,耦合sharding-jdbc的依赖。 ​ mycat缺点在于需要部署,自己运维一套中间件,运维成本高,但是好处在于对各个项目都是透明的,遇到升级直 接在中间件升级就好了。 三、如何分库分表 垂直拆分:把一个有很多字段的表拆分成多个表,或者是多个库上面去。每个库表,结构、字段都不一样。好处,举例:根据业务拆分,将常用的字段和不常用的字可以拆分成两张表,因为数据库是有缓存的,因此,访问频率高的行字段越少,缓存就可以存放更多行,性能就会更好。 水平拆分:根据表来进行分割:比如user表可以拆分为user0,、user1、user2、user3、user4等,实际应用中,通常可以先用hash法(比如取模),也或者通过时间(周、月)来分到对应的库

【软帝学院】七点java程序员进阶必备技能,让你少走弯路

谁说我不能喝 提交于 2019-12-26 20:22:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 程序员进阶很慢?七点java 程序员进阶必备技能,让你少走弯路 一、架构师筑基必备技能 阿里面试更多的内容是架构师基础内容,比如并发编程的AQS、CAS等,多纬度提升架构基础,并发编程高级进阶,JVM性能深度调优,网络编程与高效IO,深入Tomcat底层,Mysql深度优化实战,架构师必备Linux 二、分布式方案及团队协作工具 分布式环境下应该知道的分布式系列问题: 分布式事物解决方案 单点登录解决方案 分布式任务调试解决方案 Maven企业级实战 Jenkins分布式构建实战 Git版本管理 三、设计思想解读开源框架 站在巨人肩膀上学习源码设计思想,让你的代码风格更骚更极致,分析源码直接解决系统问题 设计六大原则 结构型模式 创建型模式 行为型模式 Spring5源码解读 SpringMVC源码解读 Mybatis源码解读 四、高效存储让项目性能起飞 存储是衡量系统性能的重要指标之一 Redis分布式缓存库 缓存解决方案实战 MongDB那些事 Mysql高可用模型实战 Mycat分库分表实战 Sharding-JDBC实战 FastDFS存储实战 五、性能直线提升架构技术 系统性能瓶颈垂直解决工具,你不应该抱怨系统性能差,只是有很多高性能工具你还没用到而已 分布式架构思维 Zookeeper进阶及底层协议

数据库系列课程(08)-SpringBoot整合Sharding-Jdbc

本秂侑毒 提交于 2019-12-26 02:59:12
1. 引言 先来理解几个概念: 「LogicTable」 :数据分片的逻辑表,对于水平拆分的数据库(表),同一类表的总称。例如订单信息表拆分为2张表,分别是 t_order_0 、 t_order_1 ,他们的逻辑表名为 t_order 。 「ActualTable」 :在分片的数据库中真实存在的物理表。即上个示例中的 t_order_0 、 t_order_1 。 「DataNode」 :数据分片的最小单元。由数据源名称和数据表组成,例: test_msg0.t_order_0 。配置时默认各个分片数据库的表结构均相同,直接配置逻辑表和真实表对应关系即可。 「ShardingColumn」 :分片字段。 用于将数据库(表)水平拆分的关键字段。SQL中如果无分片字段,将执行全路由,性能较差 。Sharding-JDBC支持多分片字段。 「ShardingAlgorithm」 :分片算法。Sharding-JDBC通过分片算法将数据分片,支持通过等号、BETWEEN和IN分片。分片算法目前需要业务方开发者自行实现,可实现的灵活度非常高。未来Sharding-JDBC也将会实现常用分片算法,如range,hash和tag等。 2. SpringBoot整合Sharding-Jdbc SpringBoot整合Sharding-Jdbc分为两种方式 方式一:原生配置方式,自己需要实现接口