分布式数据库中间件介绍
分布式数据库中间件
在分布式情况下随着用户量的增加,Mysql数据库表逐渐庞大随之而来的问题就是导致数据库性能的下降,当数据量超过500W行那么就可以考虑分库分表了
分库分表概述
什么是分库分表
分库分表,相信大家在编写Web项目的时都会使用到关系型数据库,通常在传统的Web项目中我们一个项目只会对应一个数据库,当对于类似电商这些用户量与数据量大的项目通常使用单个数据库是无法支撑的,所以就有了分库分表,即把项目中的表按不同的业务分别存放到不同的数据库中、或把一张表数据拆分到不同的数据库中
为什么要分库分表
分库分表是当前关系型数据库最后的优化手段了,简称杀手锏,所以在分库分表前必定会经历一些数据库优化过程,大概演变如下
单表数据超出数据库支持的容量=>更换数据库+缓存=>SQL优化、索引优化、字段优化=>读写分离=>分库分表
分库分表的常见方法
分库分表常见方法分2种:垂直拆分,水平拆分
垂直拆分
垂直拆分,即将数据库中的多个表分别拆分到不同的数据库中,或者将字段较多的单个表拆分为2个表分别存放到不同的库中
垂直拆分特点
垂直拆分也叫字段拆分,即将表按字段拆分成多个表,所以垂直拆分有以下特点
- 拆分后表行数并未得到改变,表列数会有所减少
- 拆分后业务清晰,专库专用
- 实现动静态分析,冷热数据分离,说明:冷数据(很少修的数据):如你发的朋友圈内容,热数据(改动频繁数据):如你朋友圈的评论
- 数据库性能受业务影响,如订单表的数据库性能在双11情况用户大量操作订单会扛不住,然而会员表数据库性能则可以保存一个良好的状态
- 由于业务分布在不同的数据库下,对于一些跨业务关联join查询无法使用sql语句实现,只能通过java程序接口调用组合完成
水平拆分
垂直拆分,即将数据库中一个表的数据分别拆分到不同的数据库中
水平拆分特点
水平拆分也叫横向拆分,即负责多个相同结构的表,使用某种算法让数据平均分布在这些表中
- 拆分后表结构未得到改变,单表行数会得到相应的减少,有助于性能的提示
- 由于数据都被分散到多个表中,提高系统的稳定性和负载能力
- 拆分规则很难抽象,如所以需要使用某种算法使得同一个用户的数据只会一直被保存到同一个库中
- 数据扩容难度大,由于增加库于表后会导致原有的拆分规则有变动
- 分片事务的一致性的问题,部分业务也是关联join查询无法使用sql语句实现,只能通过java程序接口调用组合完成
垂直+水平拆分
上面已经介绍了垂直拆分于水平拆分了,那么在实际开发过程中使用那种是最好的呢,小孩子才做选择好吧在实际开发过程中2种结合一起使用
- 首先在数据库设计阶段是就要考虑垂直分库和垂直分表
- 随着数据库数据量的增加,不要立马考虑做水平切分,首先考虑缓存处理、读写分离,使用索引的方式尝试优化数据库,如果这些方式不能解决根本问题,再考虑做水平分库和水平分表
分库分表后带来的问题
- 读写分离引发的主从同步,数据一致性,网络延迟问题
- 多数据库多表导致维护成本的增加
- 分布式事务
- 跨库jion查询
- 分布式全局唯一ID(雪花算法)
- 多数据源管理问题
分库分表常见算法
分库分表算法常用于水平拆分,即按照一定规则使得某一个用户有史至终只会对同一个表进行操作
取模(Hash):通过userid进行取模运算,使得数据分散均衡,当然如果需要扩容后所有的数据都需要进行重新Hash,一致性Hash可以缓解该问题,但不能完全解决
范围分区(range):按日期、按地区去拆分数据
预定义(list):对数据量预估,并且创建好相应的数据于库
分库分表解决方案
经过对分库分表后,可以发现分库分表将会带来很多的问题那么该如何解决呢
通常有2种实现方案:Proxy代理与Jdbc直连
Proxy代理
Proxy代理,顾名思义即Web应用将所有的增删改查sql发送到给一个代理服务,代理服务去数据库完成相应的操作后再返回给Web应用
Jdbc直连
Jdbc直连,增强JDBC包,对所有的数据库操作语句按照特定的要求分发到不同的库中
ShardingSphere
Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
模式区别
ShardingSphere同时提供了3种分布式数据库中间件解决方案:JDBC、Proxy、Sidecar(占不成熟)
快速上手
Sharding-JDBC实战(水平分表、水平分库、垂直分表、公共表、读写分离)
水平分库、垂直分表、公共表、读写分离)](https://blog.csdn.net/weixin_44642403/article/details/119988003?spm=1001.2014.3001.5501)
Sharding-Proxy实战(水平分表、水平分库、垂直分表、读写分离)
分布式数据库中间件介绍相关推荐
- 分布式数据库中间件Mycat介绍
从Cobar到Mycat,从闭源到开源,作为一个开源的分布式数据库中间件,Mycat已经被众多开源项目使用.本文简要介绍下Mycat的特性.基本架构以及分库分表和读写分离的配置. 1.Mycat基本介 ...
- 分布式数据库中间件Sharding-JDBC介绍
前文中介绍了分布式数据库中间件Mycat的一些特性,作为对比本文简要介绍Sharding-JDBC的一些特性以及分片的实现原理,进行对比分析以了解. 1.ShardingSphere介绍 Shardi ...
- 分布式数据库中间件的实现原理介绍一:分库分表【转】
声明:本文并非原创,转自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍. 分片是解决数据库存储容量限制的直接途径.分片包括垂直分片与水平分片两种方式. 垂直分片 垂直分片又叫纵向分割,即以 ...
- 分布式数据库中间件的实现原理介绍四:平滑扩容
声明:本文并非原创,转自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍. 随着业务增长,逻辑库存储空间不足,并发压力较大,此时可对DDM实例逻辑库进行平滑扩容,通过增加RDS实例来提高数据 ...
- 分布式数据库中间件的实现原理介绍三:读写分离
声明:本文并非原创,转自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍. 数据库中对计算和缓存资源消耗较多的往往是密集或复杂的SQL查询.当系统资源被查询语句消耗,反过来会影响数据写入操作 ...
- (转载)MyCat:开源分布式数据库中间件
发现MyCat这个东西,觉得还是有很多应用场合,之前为了mysql读写分离.分布等伤透脑筋,没想到有现成的中间件工具,看来很多有经验的公司是受到过折磨,才整出好工具.方法和工具的发明,总是因为问题的存 ...
- docker安装mycat_分布式数据库中间件 MyCat 搞起来!
关于 MyCat 的铺垫文章已经写了三篇了: MySQL 只能做小项目?松哥要说几句公道话! 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下! What?Tomcat 竟然也算中间件? ...
- 分布式数据库中间件使用经验分享
最近公司新项目使用了华为云的DDM分布式数据库中间件服务,通过一段的时间的使用感觉还不错.近段时间发现有许多小伙伴也准备去使用这个服务,所以为大家分享一下使用 创建DDM服务的经验,帮助小伙伴们少走弯 ...
- 分布式数据库中间件 MyCat 安装及使用
分布式数据库中间件 MyCat 安装及使用 关于 MyCat 的铺垫文章已经写了三篇了: MySQL 只能做小项目?松哥要说几句公道话! 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下! ...
最新文章
- 睡眠不足,记忆力还有救吗?Nature:饿着
- Android Studio 单刷《第一行代码》系列 04 —— Activity 相关
- 干掉 if 语句,一个不留的那种!
- ITK:添加点和边到网格
- 静态代理和动态的本质区别
- C/C++——C风格的字符串的指针指向的内存位置问题(易错)
- spark学习-JavaRDD注册成表然后用SparkSQL查询
- SQL内置函数日期函数
- C语言—班级学生管理系统
- 嵌入式linux之yocto(六)devtool往返开发
- 如何更换戴尔 燃7000 Dell Inspiron 7460的电池
- Flume跨服务器采集数据
- JavaBean 是什么?JavaBeans 概念介绍
- 知名互联网公司需要什么样的人才
- Ubuntu18.4设置永久DNS
- 总投资460亿!陈十一院士任校长,东方理工大学年薪40-60万招人
- 十二.作业难点(有IT大牛路过的可以帮我解答我的疑问?万分感谢)--转行的苦逼人...
- 手机计算机两用u盘,手机电脑两用u盘_手机电脑两用u盘弊端
- 计算机网络可以分为( ),按照逻辑功能,计算机网络可以分为( )和( )。
- http的无连接和无状态
热门文章
- vb.net 教程 3-3 窗体编程 消息对话框
- java 某会员本月购物5次_Java基础循环练习题
- 关于cad使用cuiload加载菜单文件cui
- 佐客牛排机器人餐厅_这家无人餐厅告诉你:机器人餐厅已经太low了!
- 零基础如何学好python爬虫?python爬取B站小视频
- NIFI Site to Site 安全模式资料学习整合(均来自官网翻译)
- 【整理】数字通信中的同步技术:帧同步、载波同步、位同步
- 判断二维数组是否为空的条件语句
- 旧电脑装html5,老式电脑安装Win10还是Win7系统流畅?
- CreateFile函数解释