Sharding-JDBC


崛起于Springboot2.X + Mysql分库分表Sharding-JDBC(7)

夙愿已清 提交于 2020-02-28 16:05:02
《 SpringBoot2.X心法总纲》 (本篇博客已于2019-08-28优化更新) 序言:当当开发的一个中间件, sharding-jdbc官网API ,听说能用它也能读写分离,但这一篇博客主要讲述的是分库分表的功能。 1、Sharding-JDBC 1.1 历史由来 第一版的分库分表并不是现有的Sharding-JDBC,而是当当的一个内部框架ddframe的数据库模块, dd-rdb的其中一项功能就是分库,没有分表功能,当时只是做了简单的SQL解析。后来随着ddframe被各个 团队采用,只分库的需求渐渐不够用了,而dd-rdb里面有大量的数据库ORM相关的东西,为了使分库分表这 一核心需求更加纯粹,我们才将其中的分片的部分单独提炼出来并命名为Sharding-JDBC,用于在Java的 JDBC层面提供一层驱动,无缝的处理这方面的需求。 1.2 使用场景 对于关系型数据库数据量很大的情况,需要进行水平拆库和拆表,这种场景很适合使用Sharding-JDBC。 举例说明:假设有一亿数据的用户库,放在 MySQL 数据库里查询性能会比较低,而采用水平拆库,将其分为10 个库,根据用户的ID模10,这样数据就能比较平均的分在10个库中,每个库只有1000w记录,查询性能会大大提 升。分片策略类型非常多,大致分为Hash + Mod、Range、Tag 等。Sharding

分库分表 Sharding-JDBC 分布式主键

点点圈 提交于 2020-02-28 07:01:28
在传统企业软件开发中,主键自动生成技术是基本需求,各个数据库对于该自增主键的需求提供了相应的支持,如MySQL的自增键。对于MySQL而言,分库分表之后,不同库、不同表生成全局唯一的主键是非常麻烦的事情。因为同一个逻辑表内的不同物理表之间的自增主键是无法互相感知的,这样会生成重复的主键。 目前有许多第三方解决方案可以完美解决这个问题,比如UUID等依靠特定算法自生成不重复键,或者通过引入主键生成服务(Redis或者ZooKeeper)等。 Sharding-JDBC提供了注解生成接口KeyGenerator。各个实现类通过实现generateKey()方法即可对外提供生成主键的功能。下面分析Sharding-JDBC分布式主键的使用。 DefaultKeyGenerator是Sharding-JDBC默认的主键生成器 。该主键生成器采用 Twitter Snowflake 算法实现生成64位的Long型编号。国内很多大型互联网公司发号器服务基于该算法加部分改造实现。下面分析DefaultKeyGenerator产生的编号的组成。 DefaultKeyGenerator生成的64位Long型编号的组成如图所示。 64位Long型编号中各个部分的如表所示。 位数 含义 取值范围 1 符号位 0 41 时间戳 从2016-11-01 00:00:00 开始的毫秒数,支持约70年 10

分库分表 Sharding-JDBC 介绍和实战

你。 提交于 2020-02-28 06:01:50
1 介绍 Sharding-JDBC是开源的数据库中间件。Sharding-JDBC定位为轻量级数据库驱动,由客户端直连数据库,以jar包形式提供服务,没有使用中间层,无须额外部署,无须其他依赖。Sharding-JDBC可以实现旧代码迁移零成本的目标。Sharding-JDBC与MyCat不同,MyCat本质上是一种数据库代理。 2 实战SQL 2.1 有2个库 库名 表名 shop_0 shop_info_0、shop_info_1 shop_1 shop_info_0、shop_info_1 2.2 表结构SQL DROP DATABASE IF EXISTS `shop_0`; CREATE DATABASE `shop_0`; USE `shop_0`; CREATE TABLE `shop_info_0` ( `shop_id` bigint(80) NOT NULL, `shop_name` varchar(45) DEFAULT NULL, `account` varchar(45) NOT NULL, PRIMARY KEY (`shop_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `shop_info_1` ( `shop_id` bigint(80) NOT NULL, `shop_name`

shardingsphere数据库中间件

无人久伴 提交于 2020-02-27 06:49:42
shardingsphere组成 : sharding-jdbc 、sharding-proxy、sharding-sidecar(计划中) 核心功能以及整体框架图 sharding-jdbc特点 1. 轻量级Java框架,在Java的JDBC层提供额外服务 2.适用于任何基于JDBC的ORM框架 3.支持任何第三方数据库连接池 4.支持任意实现JDBC规范的数据库 sharding-Proxy 1.透明的数据库代理端,目前支持MYSQL/PostgreSQL 2.兼容MYSQL/PostgreSQL协议的客户端 sharding-sidecar(计划中) 1.k8s的云原生数据库代理,以Sidecar的形式代理所有对数据库的访问。通过无中心,零侵入的方案与数据库交互,称为数据网格 混合架构 1.sharding-jdbc采用无中心化架构,适用于Java开发的高性能的轻量级OLTP应用 2.Sharding-proxy提供对数据库管理和运维 3.采用统一注册中心统一配置分片策略 来源: oschina 链接: https://my.oschina.net/u/1017791/blog/3173943

sharding sphere 4.0.0-RC1版本 按年分表(后续优化)

故事扮演 提交于 2020-02-27 03:41:44
1. sharding sphere 4.0.0-RC1版本 按年分表(后续优化) 1.1. 概述 关于上一篇中 LogShardingAlgorithm 的 tables ,我原先是在第一次调用的时候初始化,这样做虽然能实现功能,但每次调用都会走这个if判断,虽然性能损耗不大,但我觉得这不是业务应该走的逻辑顺序,我的理想是在 LogShardingAlgorithm 被实例化后去自动初始化 tables 现在面对的问题是 LogShardingAlgorithm 的实例化是在Spring初始化中间执行的,且它本身的创建不是通过Spring的 @Component 等注解生成,而是通过反射实例化。若在实例化刚开始,也就是构造方法执行的时候执行初始化,那时候 applicationContext 还没有初始化完毕,拿不到环境参数,连 Datasource 也还没开始初始化 1.2. 解决方法 经过改造后,代码如下,单独拎出一个初始化方法,在类对象实例化后调用 /** * @author: laoliangliang * @description: 日志分片 * @create: 2020/1/2 10:19 **/ @Slf4j public class LogShardingAlgorithm implements PreciseShardingAlgorithm,

面试总被问分库分表怎么办?你可以这样怼他

不问归期 提交于 2020-02-26 22:03:03
引言 微服务、分布式大行其道的当下,中、高级Java工程师面试题中高并发、大数据量、分库分表等已经成了面试的高频词汇,这些知识不了解面试通过率不会太高。你可以不会用,但你不能不知道,就是这么一种现状。技术名词大多晦涩难懂,不要死记硬背理解最重要,当你捅破那层窗户纸,发现其实它也就 那么回事。 一、为什么要分库分表 关系型数据库以MySQL为例,单机的存储能力、连接数是有限的,它自身就很容易会成为系统的瓶颈。当单表数据量在百万以里时,我们还可以通过添加从库、优化索引提升性能。一旦数据量朝着千万以上趋势增长,再怎么优化数据库,很多操作性能仍下降严重。为了减少数据库的负担,提升数据库响应速度,缩短查询时间,这时候就需要进行 分库分表 。 二、如何分库分表 分库分表就是要将大量数据分散到多个数据库中,使每个数据库中数据量小响应速度快,以此来提升数据库整体性能。核心理念就是对数据进行切分( Sharding ),以及切分后如何对数据的快速定位与整合。针对数据切分类型,大致可以分为:垂直(纵向)切分和水平(横向)切分两种。 1、垂直切分 垂直切分又细分为 垂直分库 和 垂直分表 垂直分库 垂直分库是基于业务分类的,和我们常听到的微服务治理观念很相似,每一个独立的服务都拥有自己的数据库,需要不同业务的数据需接口调用。而垂直分库也是按照业务分类进行划分,每个业务有独立数 据库,这个比较好理解。

解析源码找出 Springboot+ShardingJdbc 对数据库连接池调优属性配置的方式

拈花ヽ惹草 提交于 2020-02-26 10:58:21
问题描述 最近公司搭建springboot项目 由于之前都是使用的spring项目 对于boot的理解还是不深 通过找一些文档搭建好了shardingJdbc分库分表的配置 使用了properties方式 参考官网配置如下 我们项目数据源使用了HikariCP 由于要对于数据连接池进行配置 方便出现问题调优 网上翻遍了配置整合 都是只有springboot初始的Hikari配置 与sharding整合的配置没有涉及到 传统springboot单数据源数据源整合配置 由于使用了分库分表 数据源前缀不同 肯定不能使用之前的配置方式 自己依样画葫芦写了点配置 发现竟然生效了 sharding.jdbc.datasource.ds0.pool-name=Retail_HikariCP0 sharding.jdbc.datasource.ds0.maximum-pool-size = 20 控制台出现了新的cpName!! 这就让我燃起了希望 同时又找到了 https://www.cnblogs.com/aut-lory/p/10789573.html 这篇博主的文章 让我下定决心动手debug源码 查看我的配置是否生效 以及到底什么样的前缀配置才会被sharding发现并且注入 问题解决 数据源是spring初始化配置时加载的 很容易联想到spring-shardingjdbc

面试官系列,深入数据库分区分库分表

家住魔仙堡 提交于 2020-02-25 16:12:19
一、为什么要分库分表 软件时代,传统应用都有这样一个特点:访问量、数据量都比较小,单库单表都完全可以支撑整个业务。随着互联网的发展和用户规模的迅速扩大,对系统的要求也越来越高。因此传统的MySQL单库单表架构的性能问题就暴露出来了。而有下面几个因素会影响数据库性能: 数据量 MySQL单库数据量在5000万以内性能比较好,超过阈值后性能会随着数据量的增大而变弱。MySQL单表的数据量是500w-1000w之间性能比较好,超过1000w性能也会下降。 磁盘 因为单个服务的磁盘空间是有限制的,如果并发压力下,所有的请求都访问同一个节点,肯定会对磁盘IO造成非常大的影响。 数据库连接 数据库连接是非常稀少的资源,如果一个库里既有用户、商品、订单相关的数据,当海量用户同时操作时,数据库连接就很可能成为瓶颈。 为了提升性能,所以我们必须要解决上述几个问题,那就有必要引进分库分表,当然除了分库分表,还有别的解决方案,就是NoSQL和NewSQL,NoSQL主要是MongoDB等,NewSQL则以TiDB为代表。 二、分区分库分表的原理 1、什么是分区、分表、分库 (1)分区 就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的,分区实现比较简单,数据库mysql、oracle等很容易就可支持。 (2)分表

解析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

工具导航Map