Sharding-JDBC

永辉彩食鲜架构概述

大兔子大兔子 提交于 2019-12-24 10:16:49
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 背景 满足整个永辉彩食鲜大B业务从线上到供应链的全线业务系统的研发和维护,保证整个系统的稳定性和性能。 架构思考 大B业务不同于小B业务,它没有常见的业务高并发的场景,所以更多是对业务数据的一致性(业务数据基本都跟财务相关),系统的稳定性和常规故障自动恢复能力有更高期盼和要求。同时伴随业务的及数据增长,整体系统性能要保证的稳定。 总体架构图 架构演进历程 项目基础设施搭建 -> 运维自动化 ->数据库运维构建 -> 分布式基础设施搭建 -> 分布式监控体系构建 -> 分布式框架自研 -> 业务基础服务构建 -> 技术分享 -> 开源社区构建 (大致的推进重新历程如上,实际场景下不分严格先后顺序。) 项目基础设施的建设 涉及 gitlab, svn, jenkins , nesus, sonar, 禅道, 知识库;剥离出永辉自身的研发基础设施,减少频繁的沟通成本,获取系统的管理员权限便于打通研发和运维自动化。 运维自动化 1. 钉钉自动化报警/通知 涉及jenkins,gitlab,禅道,sonar,知识库等自动化集成。 2. jenkins 一键发布 涉及jenkins的一键滚动发布,自动回滚,异常自动重启,便于运维快速发布,避免手工发布的出错。 3. docker 容器集群化

分库分表就能无限扩容吗?

眉间皱痕 提交于 2019-12-24 10:03:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 作者:莫那·鲁道 https://www.cnblogs.com/stateis0/p/10275217.html 像我这样的菜鸟,总会有各种疑问,刚开始是对JDK API的疑问,对NIO的疑问,对JVM的疑问,当工作几年后,对服务的可用性,可扩展性也有了新的疑问,什么疑问呢?其实是老生常谈的话题:服务的扩容问题。 一、正常情况下的服务演化之路 让我们从最初开始。 单体应用 每个创业公司基本都是从类似SSM和SSH这种架构起来的,没什么好讲的,基本每个程序员都经历过。 RPC应用 当业务越来越大,我们需要对服务进行水平扩容,扩容很简单,只要保证服务是无状态的就可以了,如下图: 当业务又越来越大,我们的服务关系错综复杂,同时,有很多服务访问都是不需要连接DB的,只需要连接缓存即可,那么就可以做成分离的,减少DB宝贵的连接。如下图: 我相信大部分公司都是在这个阶段。Dubbo就是为了解决这个问题而生的。 分库分表 如果你的公司产品很受欢迎,业务继续高速发展,数据越来越多,SQL操作越来越慢,那么数据库就会成为瓶颈,那么你肯定会想到分库分表,不论通过ID hash或者range的方式都可以。如下图: 这下应该没问题了吧。任凭你用户再多,并发再高,我只要无限扩容数据库,无限扩容应用,就可以了。 这也是本文的标题

分库分表之第二篇

拈花ヽ惹草 提交于 2019-12-22 14:10:35
分库分表之第二篇 2. Sharding-JDBC快速入门 2.1需求说明 2.2. 环境建设 2.2.1环境说明 2.2.2创建数据库 2.2.3约会maven依赖 2.3 编写程序 2.3.1 分片规则配置 2.3.2 数据操作 2.3.3 测试 2.4. 流程分析 2.5 其他集成方式 2. Sharding-JDBC快速入门 2.1需求说明 使用Sharding-JDBC完成对订单表的水平分表,通过快速入门程序的开发,快速体验Sharding-JDBC的使用。人工创建两张表,t_order_1和t_order_2,这张表是订单表替换后的表,通过Shading-JDBC向订单表插入数据,按照一定的分片规则,主键为偶数的尽入t_order_1,另一部分数据进入t_order_2,通过Shading-Jdbc查询数据,根据SQL语句的内容从t_order_1或order_2查询数据。 2.2. 环境建设 2.2.1环境说明 操作系统:Win10数据库:MySQL-5.7.25 JDK:64位jdk1.8.0_201应用框架:spring-boot-2.1.3.RELEASE,Mybatis3.5.0 Sharding-JDBC:sharding-jdbc-spring-boot-starter-4.0 .0-RC1 2.2.2创建数据库 创建订单表 CREATE DATABASE

分库分表之第一篇

空扰寡人 提交于 2019-12-19 01:05:37
分库分表之第一篇 1.概述 1.1.分库分表是什么 1.2.分库分表的方式 1.2.1.垂直分表 1.2.2.垂直分库 1.2.3.水平分库 1.2.4.水平分表 1.2.5 小结 1.3.分库分表带来的问题 1.3.1.事务一致性问题 1.3.2.跨节点关联查询 1.3.3.跨节点分页、排序函数 1.3.4.主键避重 1.3.5.公共表 1.4 Sharding-JDBC介绍 1.4.1 Sharding-JDBC介绍 1.4.2 与jdbc性能对比 1.概述 1.1.分库分表是什么 小明是一家初创电商平台的开发人员,他负责卖家模块的功能开发,其中涉及了店铺、商品的相关业务,设计如下数据库 : 通过以下SQL能够获取到商品相关的店铺信息、地理区域信息 : SELECT p . * , r . [ 地理区域名称 ] , s . [ 店铺名称 ] , s . [ 信誉 ] FROM [ 商品信息 ] p LEFT JOIN [ 地理区域 ] r ON p . [ 产地 ] = r . [ 地理区域编码 ] LEFT JOIN [ 店铺信息 ] s ON p . id = s . [ 所属店铺 ] WHERE p . id = ? 形成类似以下列表展示 : 随着公司业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析一下问题出现在哪儿 呢?

一次分表踩坑实践的探讨

最后都变了- 提交于 2019-12-18 09:51:03
前言 之前不少人问我“能否分享一些分库分表相关的实践”,其实不是我不分享,而是真的经验不多🤣;和大部分人一样都是停留在理论阶段。 不过这次多少有些可以说道了。 先谈谈背景,我们生产数据库随着业务发展量也逐渐起来;好几张单表已经突破 亿级 数据,并且保持每天 200+W 的数据量增加。 而我们有些业务需要进行关联查询、或者是报表统计;在这样的背景下大表的问题更加突出(比如一个查询功能需要跑好几分钟)。 可能很多人会说:为啥单表都过亿了才想方案解决?其实不是不想,而是由于历史原因加上错误预估了数据增长才导致这个局面。总之原因比较复杂,也不是本次讨论的重点。 临时方案 由于需求紧、人手缺的情况下,整个处理的过程分为几个阶段。 第一阶段应该是去年底,当时运维反应 MySQL 所在的主机内存占用很高,整体负载也居高不下,导致整个 MySQL 的吞吐量明显降低(写入、查询数据都明显减慢)。 为此我们找出了数据量最大的几张表,发现大部分数据量在7/8000W 左右,少数的已经突破一亿。 通过业务层面进行分析发现,这些数据多数都是用户产生的一些 日志型数据 ,而且这些数据在业务上并不是强相关的,甚至两三个月前的数据其实已经不需要实时查询了。 因为接近年底,尽可能的不想去动应用,考虑是否可以在运维层面缓解压力;主要的目的就是把单表的数据量降低。 原本是想把两个月之前的数据直接迁移出来放到备份表中

Sharding-JDBC 学习资料

你说的曾经没有我的故事 提交于 2019-12-09 16:27:21
学习资料 网站 官网 https://shardingsphere.apache.org/document/current/cn/manual/sharding-jdbc/ Sharding-JDBC教程:Mysql数据库主从搭建 https://www.fangzhipeng.com/db/2019/06/25/mysql-install-ms.html Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离 https://www.fangzhipeng.com/db/2019/06/26/shardingjdbc-master-slave.html Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现数据分表+读写分离 https://www.fangzhipeng.com/db/2019/06/30/sharding-jdbc-tables-ms.html Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现分库分表+读写分离 https://www.fangzhipeng.com/db/2019/07/01/shardingjdbc-dbs-tbls-ms.html 来源: https://www.cnblogs.com/cag2050/p/12011612

sharding-jdbc4.0使用方式

自古美人都是妖i 提交于 2019-12-09 13:29:07
Sharding-jdbc 简介 Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。 内部结构 使用流程 初始化流程 配置Configuration对象。 通过Factory对象将Configuration对象转化为Rule对象。 通过Factory对象将Rule对象与DataSource对象装配。 Sharding-JDBC使用DataSource对象进行分库。 版本依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId

sharding-jdbc4.0使用方式

可紊 提交于 2019-12-07 15:32:27
Sharding-jdbc 简介 Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。 内部结构 使用流程 初始化流程 配置Configuration对象。 通过Factory对象将Configuration对象转化为Rule对象。 通过Factory对象将Rule对象与DataSource对象装配。 Sharding-JDBC使用DataSource对象进行分库。 版本依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId

存储-海量数据(ShardingSphere核心概念剖析和实战)

元气小坏坏 提交于 2019-12-07 12:09:11
目标 Ø 掌握数据库的大数据处理方案和HA Ø 掌握为什么需要数据库中间件,何为数据库中间件 Ø 掌握不同场景所需的数据库中间件特性 Ø 掌握数据库中间件设计要点 Sharding-JDBC用途、使用场景、架构 认识ShardingSphere ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、 Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化 的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等 各种多样化的应用场景。 当前版本:3.0 官网地址:https://shardingsphere.apache.org/index_zh.html 官方文档:https://shardingsphere.apache.org/document/current/cn/overview/ Sharding-JDBC: 定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直 连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全 兼容JDBC和各种ORM框架。 Ø 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring

存储-海量数据(ShardingSphere核心概念剖析和实战)

余生颓废 提交于 2019-12-06 20:31:25
目标 Ø 掌握数据库的大数据处理方案和HA Ø 掌握为什么需要数据库中间件,何为数据库中间件 Ø 掌握不同场景所需的数据库中间件特性 Ø 掌握数据库中间件设计要点 Sharding-JDBC用途、使用场景、架构 认识ShardingSphere ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、 Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化 的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等 各种多样化的应用场景。 当前版本:3.0 官网地址:https://shardingsphere.apache.org/index_zh.html 官方文档:https://shardingsphere.apache.org/document/current/cn/overview/ Sharding-JDBC: 定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直 连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全 兼容JDBC和各种ORM框架。 Ø 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring