ShardingSphere
1.简介
- 1.开源的分布式数据生态项目
ShardingSphere-JDBC:轻量级Java框架ShardingSphere-Proxy:数据库代理ShardingSphere-Sidecar(规划中):Kubernetes的云原生数据库代理- 2.使用版本:
ShardingSphere5.1.1
1.数据库集群架构
- 1.
出现原因:单个数据库服务器无法满足海量数据加海量用户的业务需求- 2.
解决方式:采用数据库集群架构提高应用程序的性能- 3.
具体实现
- 1.
读写分离- 2.
数据分片
1.读写分离
- 1.
原理:将数据库读写操作分散到不同的节点上,分散了数据库读写的压力- 2.
主机:负责事务性的增删改操作;从机:负责查询操作- 3.
读写分离机制建立在数据库主从复制的基础上- 4.
优点:通过读写分离可以有效避免数据更新导致的行锁,也可将查询负载均衡的分散到多个从机中,从而提高查询性能- 5.
问题
- 1.主机向从机复制数据的过程中会有时间的延迟,如果将数据写入主机,立即从从机读取数据,这时数据可能还未从主机完全复制到从机,所以会出现
数据不一致问题,即CAP定理- 2.
读写分离分散了数据库读写压力,但没有分散存储压力,为了业务数据存储的需求,需将存储分散到多台数据库服务器
1.CAP定理
- 1.
定义:分布式系统中,当涉及读写操作时,只能保证一致性(Consistence),可用性(Availability),分区容错性(Partition Tolerance)三者中的两个
- 1.
C:一致性,对某个指定的客户端,读操作保证能够返回最新的写操作结果,即读写结果一致- 2.
A:可用性,非故障的节点在合理的时间内返回合理的响应(非错误和超时的响应)- 3.
P:分区容错性,当出现网络分区(多个服务器数据交换)后,系统能够继续履行职责(继续执行,可返回超时或历史数据)- 2.
特点:实际设计过程中,每个系统不可能只处理一种数据,有的数据必须选择CP,有的数据必须选择AP,分布式系统理论上不可能选择CA- 3.
CAP理论中的C在实践中不可能完美实现,数据复制的过程中,节点N1和节点N2的数据并不一致(强一致性);即使无法做到强一致性,但应用可以采用合适的方式达到最终一致性
- 1.
基本可用(Basically Available):分布式系统在出现故障时,允许损失部分可用性,保证核心可用- 2.
软状态(Soft State):允许系统存在中间状态,该中间状态不会影响系统的整体可用性,这里的中间状态就是CAP理论中的数据不一致- 3.
最终一致性(Eventual Consisitency),系统中的所有数据副本经过一定时间后,最终能够达到一致的状态
1.CP
- 1.如图所示,为了保证
一致性,当发生分区现象(丢包)后,N1节点上数据已经更新到y,但由于N1和N2之间的复制通道中断,数据y无法同步到N2,N2节点上的数据还是x- 2.此时客户端
c访问N2时,N2需要返回Error,提示客户端C系统现在发生了错误,该处理方式违背了可用性的要求,此时CAP三者只能满足CP
2.AP
- 1.如图所示,为了保证
可用性,当发生分区现象后,N1节点上的数据已经更新到y,但由于N1和N2之间的复制通道中断,数据y无法同步到N2,N2节点上的数据还是x- 2.此时客户端
C访问N2时,N2将当前自己拥有的数据x返回给客户端C,而实际当前最新的数据是y,不满足一致性的要求,此时CAP只能满足AP.
2.数据分片
- 1.
读写分离问题:读写分离分散了数据库读写压力,从而缓解了单台服务器的访问压力,但没有分散存储压力,为了满足业务数据存储需求,需将存储分散到多台数据库服务器- 2.
数据分片定义:将存放在单一数据库或表中的数据分散地存放至多个数据库或表中,以达到提升性能瓶颈以及可用性的效果- 3.数据分片的
拆分方式
- 1.
垂直分片- 2.
水平分片- 4.
适用场景:《阿里开发手册》建议单表超过500万条记录或单表大小超过2GB需要考虑分库分表
1.垂直分片
- 1.
定义:按照业务拆分的方式称为垂直分片/纵向拆分- 2.
垂直分片可细分为
- 1.
垂直分库- 2.
垂直分表
1.垂直分库
- 1.
定义:核心理念是专库专用
- 1.
拆分之前:一个数据库由多个数据表构成,每个表对应着不同的业务- 2.
拆分之后:按照业务将表进行归类,分布到不同的专用数据库,从而将压力分散至不同的数据库- 2.
问题:垂直分库可以缓解数据库数据量和访问量的问题,但无法处理单表数据量过大问题,此时需要水平分片进一步处理
2.垂直分表
- 1.
定义:核心理念是专表专用
- 1.
拆分之前:一个数据表由多个字段构成,每个字段对应着不同的业务- 2.
拆分之后:按照业务将字段进行归类,分布到不同的专用数据表,从而将压力分散至不同的数据表- 2.
问题
- 1.垂直分表可以缓解数据表访问量和占用量的问题,但无法处理单表数据量过大问题,此时需要
水平分片进一步处理- 2.垂直分表会引入额外的复杂度,原来只要一次查询,现在需要两次查询
- 3.
适用范围:垂直分表适合将表中不常用的列或是占了大量空间的列拆分出去- 4.
注意:垂直分表对应的主键id应该保持一致
2.水平分片
- 1.
定义:通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中的方式称为水平分片/横向拆分- 2.
水平分片可细分为
- 1.
水平分库- 2.
水平分表
1.水平分库
- 1.
定义:相对于垂直分库,不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库中,每个数据库的分片仅包含数据的一分部(例:根据主键分片,偶数主键的记录放入0库,奇数主键的记录放入1库)- 2.单表进行切分后,是否将多个表分散在不同的数据库服务器中,可以根据实际的切分效果来确定
- 3.
适用场景:如果单表拆分为多表后,单台服务器依然无法满足性能要求,那就需要将多个表分散在不同的数据库服务器中
2.水平分表
- 1.
定义:相对于垂直分表,不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个表中,每个数据表的分片仅包含数据的一分部(例:根据主键分片,偶数主键的记录放入0表,奇数主键的记录放入1表)- 2.
适用范围:水平分表适合表行数特别大的表
- 3.
注意
- 1.单表切分为多表后,新的表即使在同一个数据库服务器中,也可能带来可观的性能提升;如果性能能够满足业务要求,可不拆分到多台数据库服务器,因为业务分库也会引入更多复杂性
- 2.将拆分的表引入多台数据库会更复杂(例:分布式事务,跨库关联,数据库成本)
3.读写分离和数据分片
- 1.上图展示将数据分片与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系
1.实现方式
- 1.读写分离和数据分片具体的实现方式一般有两种
- 1.
程序代码封装- 2.
中间件封装
1.程序代码封装
- 1.定义:指在代码中抽象一个
数据访问层(或中间层封装),对程序进行一个封装,让数据访问层直接去访问不同数据库集群中的数据源,实现读写分离操作和数据库服务器连接的管理
2.中间件封装
- 1.中间件封装是指的是独立一套系统出来提供数据访问层的功能,从而实现读写操作分离和数据库服务器连接的管理
- 2.对于程序服务器而言,访问中间件和访问数据库没有区别
- 3.常用的中间件有
ShardingSphere和MyCat,其中已经封装好了数据访问层供程序使用- 4.
Apache ShardingSphere既提供了程序级别也提供了中间件级别两种解决方案;MyCat只提供了中间件解决方案
2.ShardingSphere JDBC
1.简介
- 1.
ShardingSphere JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务,类似生成一个数据访问层,它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架- 使用与任何基于JDBC的ORM框架,如:JPA,Hibetnate,mybatis,Spring JDBC Template或直接使用JDBC
- 支持任何第三方的数据库连接池,如:DBCP,C3P0,BoneCP,HikariCP等
- 支持任意实现JDBC规范的数据库,目前支持MySQL,PostgreSQL,Oracle,SQLServer以及任何可使用JDBC访问的数据库
- 如果应用程序也是集群模式可以采用服务治理组件G… Center,例Zookeeper
ShardingSphere-Proxy
- 定位为透明化的数据库代理器,即只是一个中间件,提供了封装了数据库二进制协议的服务端版本,用于完成对异构语言(即非Java的项目)的支持,目前提供Mysql和PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client,MySQL Workbench,Navicat等)操作数据,对DBA更加友好
- 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用
- 适用于任何兼容MySQL/PostgreSQL协议的客户端
安装Docker
- Docker可以运行在Windows,Mac,CentOS,Ubuntu等操作系统上
- Docker支持以下的CentOS版本
- 1.CentOS7(64-bit)
- 2.CentOS6.5(64-bit)或更高的版本
- 目前,CentOS仅发行版本中的内核Docker
- Docker运行在CentOS7上,要求系统为64位,系统内核版本为3.10以上
- Docker运行在CentOS-6.5或更高的版本的CentOS上,要求系统为64位,系统内核版本为2.6.37或更高版本
- 2.查看系统内核
- uname命令用打印当前系统相关信息
- uanme -r
- 3.查看已安装的CentOs的版本信息
- cat /etc/redhat-release
3.CentOS7安装docker
- 1.安装需要的软件包
- yy -utils提供了yy-config-manager相关功能,device-mapper-persistent-data和lvm2是设备映射器驱动程序所需要的
- yum install -y yuim-utils \ device-mapper-persistent-data \ lvm2
- 2.设置docker下载镜像
- 推荐阿里云下载地址
- yum-config-manager --add-repo http://mirrors
- 3.更新yum软件包索引
- 我们在更新或配置yum源之后,通常都会使用yum makecache生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
- yum makecache fast
- 4.安装docker ce
- yum install -y docker -ce
- 5.启动docker
- systemctl start docker
- 6.版本验证
- docker version
- 7.设置开机启动
- 查看服务是否自动启动(enabled,是;disabled,否)
- systemctl list-unit-files | grep docker.service
- sysmctl enable docker
- systemctl deamon-reload
- systemctl diable docker
- systenctl deamin-reload
- 卸载
- systemctl stop docer
- yum remove -y docker -ce
- rm -rf /var/lib/docker
相关文章:
ShardingSphere
1.简介 1.开源的分布式数据生态项目 ShardingSphere-JDBC:轻量级Java框架ShardingSphere-Proxy:数据库代理ShardingSphere-Sidecar(规划中):Kubernetes的云原生数据库代理 2.使用版本:ShardingSphere5.1.1 1.数据库集群架构 1.出现…...
配置Maven
对于刚开始认识的Maven的初学者超级有用的哦!项目统一共享使用一套jar包,由maven统一管理。节省了jar空间,统一jar包版本首先将maven安装完毕测试有没有配置完成,在命令框里面打 mvn -version进行测试maven安装完,第一…...
赛宁网安“网络安全卓越中心”:立足科技创新 推动网安产业高质量发展
2月22日上午,网络安全卓越中心CPCOE——圆桌论坛活动在南京召开。本次论坛由南京未来科技城主办,南京赛宁信息技术有限公司承办。论坛上,江苏省科协副主席、南京理工大学教授李千目,江苏省互联网协会副理事长兼秘书长刘湘生&a…...
操作系统题目收录(十四)
1、 有些操作系统中将文件描述信息从目录项中分离出来,这样做的好处是()。 A:减少读文件时的I/O信息量B:减少写文件时的I/O信息量C:减少查找文件时的I/O信息量D:减少复制文件时的I/O信息量 解…...
Qt 第1课、Qt 的窗口组件和窗口类型
GUI 程序的开发原理: GUI 程序在运行的时候,操作系统会为它创造一个消息队列,消息队列用于存储操作系统发过来的系统消息。 用户使用操作系统的过程中,操作系统内核检测到用户的操作(鼠标,键盘)…...
【Jmeter】ForEach控制器
一、什么是ForEach控制器 ForEach控制器是遍历某个数组读取不同的变量值,来控制其下的采样器或控制器执行一次或多次。而这个数组可以是用户自定义变量,也可以是从前面接口请求中提取到需要的数据,然后进行遍历循环。 二、ForEach控制器相关…...
Julia 数据类型
在编程语言中,都有基本的数学运算和科学计算,它们常用的数据类型为整数和浮点数。 另外还有一个"字面量"的术语,字面量(literal)用于表达源代码中一个固定值的表示法(notation)&…...
01-基于SOA架构someip 开发-Linux开发环境搭建
前言:SOME/IP 是一个汽车的中间件解决方案,可用于控制消息。从一开始,它的设计就是为了完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR设备,以及头部单元或远程信息处理设备。同时还确保了S…...
历时半年!从外包到现在阿里网易25K,分享一下自己的涨薪经验
前言 首先自我介绍一下,本人普通一本毕业,年初被老东家裁员干掉了,之后一直住在朋友那混吃等死,转折是今年年后,二月初的时候和大佬吃了个饭,觉得自己不能这样下去了,拿着某大佬给我的面试资料…...
支付系统中的设计模式04:改进的策略与外观模式
随着业务越做越大,交易量大了,老板觉得可以用一些变相的方法增加一些收入了,同时也有利于用户,做到双赢。这很好理解,“往地上戳一棍子都能冒出油来”,谁能扛得住这种诱惑呢? 于是,老板就提了这样的需求: 支付系统需要根据不同的结算模式,返利给账户: 1、选择T+1结算…...
关于数据分析和数据指标,企业还需要做什么?
数据虽然已经成为了各行各业对未来的共识,也切实成为了各领域企业的重要资产。但真正谈到发挥数据的价值,就必须从规模庞大的数据中找出需求的数据,然后进行利用。这个过程光是想想就知道很麻烦,更别提很多数据都是经常会用到的&a…...
jvm之垃圾回收器
分类 按线程 串行并行工作模式 并发式独占式碎片处理方式 压缩式非压缩式工作内存空间 年轻代老年代 评估GC的性能指标 吞吐量:运行用户代码的时间占总运行时间的比例暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间内存占用: java堆区…...
【c++】类和对象7—继承
文章目录关于继承继承与非继承的对比继承方式继承中的对象模型继承中的构造和析构顺序继承同名成员处理方式继承同名静态成员处理方式多继承语法菱形继承关于继承 我们发现,定义一些类时,下级别的成员处理拥有上一级的共性,还有自己的特性。 …...
vue实现预览、下载和打印后端返回的pdf文件流
需求:后端返回pdf文件流,前端能够预览、下载打印。 后端返回的文件流部分截图 需要实现的效果图 前面第1步只是为了展示后台返回数据流,完成功能的时候,不需要调用接口的,只需要利用调用接口的url。 实现步骤&am…...
【Android视频号④ 问题总结】
这节坑比较多~ 差点没把我给整死!!! 环境介绍 首先我调试都是root过的真机,但是生产环境都是没有Root的云机,属于自己改的Rom框架也不是XP或LSP 是技术人员利用Xposed源码改的框架 问题&解决 模块源码更改 这…...
推荐算法—widedeep原理知识总结代码实现
wide&deep原理知识总结代码实现1. Wide&Deep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. Wide&Deep 模型的应用场景3. Wide&Deep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天,总结一个在业界有着巨大影响力的推荐模型,…...
PHP面向对象03:命名空间
PHP面向对象03:命名空间一、命名空间基础二、子空间三、命名空间访问1. 非限定名称2. 限定名称3. 完全限定名称四、全局空间五、命名空间应用六、命名空间引入一、命名空间基础 namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构…...
Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去
路由文件 当应用程序需要向 Elasticsearch 添加文档时,它们首先要知道目标索引是什么。在很多的应用案例中,特别是针对时序数据,我们想把每个月的数据写入到一个特定的索引中。一方面便于管理索引,另外一方面在将来搜索的时候可以…...
前端开发常用的18个JavaScript框架和库
JavaScript 可以说是最流行的编程语言之一,也是Web 开发人员必须学习的 3 种语言之一,JavaScript 几乎可以做任何事情,更可以在包括物联网在内的多个平台和设备上运行。在WebGL库和SVG/Canvas元素的支持下,JavaScript变得惊人的强…...
理解、总结重点知识
一、常见的数据结构 1、数组结构 数组结构: 存储区间连续、内存占用严重、空间复杂度大 优点:随机读取和修改效率高,原因是数组是连续的(随机访问性强,查找速度快)缺点:插入和删除数据效率低&a…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...












