浅析分布式数据库中间件DDM
前言
DDM是什么?这是华为云Paas推出的分布式数据库中间件,DDM(Distributed Database Middleware)是一个实现了Mysql协议栈的服务器,前端用户可以把它看做一个数据库代理,用Mysql客户端工具和命令行访问,而DDM后端连接一到多个Mysql Server。因此,DDM本身并不存储数据,数据是在后端连接的Mysql Server上存储的。简单来说,DDM就是Mysql的最佳伴侣,一定程度上让Mysql拥有了跟Oracle PK的能力。这样听起来DDM好像是Mysql的辅助大神,这里有必要对八卦下DDM发展背景,了解下DDM的前世历程。
NoSQL与SQL之争
目前,互联网常有海量数据高并发和存储的场景,对于数据的存储,目前有基于SQL (Structured Query Language)的关系型数据库和NoSQL(Not Only SQL)的非关系型数据库。SQL数据存在特定结构的表中;而NoSQL则更加灵活和可扩展,存储方式可以是JSON文档、哈希表或者其他方式,比如键值存储(redis,ROMA,Memcached)数据库应用在排行更新,会话保存,面向文档的数据库(mongoDB、couchDB)应用在日志记录,面向列的数据库(Cassandra、HBase)在博客中的应用。而且速度极高。
虽然在云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库只能在特定场景下有奇效,只能作为传统数据的补充而不能将其替代。
关系型数据库性能瓶颈
目前绝大多数数据库不具备自动扩展,自动迁移的能力,对于单库单表性能瓶颈明显,当单表超过1000W数据量,性能会出现比较明显的下降。为了解决该难题,常见的做法就是进行分库分表来规避。
垂直分库:可按照业务模块进行划分,把数据分在不同的库中。

水平分库:我们发现某些表的数据量已经超过1000W,QPS显著下降,这里可以对这种表进行进一步水平拆分,做成多个分片表。大多数电商企业会按照日期分片,但又衍生出来一些问题,在固定时段中对某个分片压力很大,其他分片此时处于空闲状态,在电商企业高并发的场景下,会产生大量数据,此时又产生短时间内单库QPS瓶颈的问题。

拆分规则优化:可以根据拆分字段,进行取模的方式来做到数据大致平均分布到多个分片上。可以保证整体系统的QPS得到提升,但又衍生出来一些问题:分片数量不够需要扩容的问题,跨分片事务一致性无法保证的问题。
数据库中间件
为了减少对应用的侵入性,并且要将压力打在中间件上,该中间件负责和上层应用打交道,对应用可表现为一个独立的数据库,而屏蔽底层复杂的系统细节。分布式数据库中间件除了基本的分表分库功能,还可以丰富一下,比如讲读写分离或者水平扩容功能集成在一起,或者比如读写分离本身也可以作为一个独立的中间件。(DDM,Cobar,MyCAT, TDDL等)。
上述提到的分片数量不够的扩容以及分布式事务一致性的问题,在华为云的DDM已经得到解决,并且中间件的功能在不断丰富,已经成为高并发应用的绝对利器。
浅析分布式数据库中间件DDM的更多相关文章
- 分布式数据库中间件DDM的实现原理
随着数据量不断增大,传统的架构模式难以解决业务量不断增长所带来的问题,特别是在业务成线性.甚至指数级上升的情况.此时我们不得不通过水平扩展,把数据库放到不同服务器上来解决问题,也就是我们说的数据库中间 ...
- 华为云分布式数据库中间件DDM和开源MyCAT对比
前言 华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离.弹性扩容等能力,应对海量 ...
- 对话DDM:分布式数据库中间件全解析
进入云计算时代,传统的数据库在性能和容量等方面已无法满足企业的要求,随着数据量的不断骤增,易于扩展.拆分的数据库解决方案对于企业的云化转型更是显得尤为重要.为使企业应用上云更简单,分布式数据库中间件D ...
- 开源分布式数据库中间件MyCat源码分析系列
MyCat是当下很火的开源分布式数据库中间件,特意花费了一些精力研究其实现方式与内部机制,在此针对某些较为重要的源码进行粗浅的分析,希望与感兴趣的朋友交流探讨. 本源码分析系列主要针对代码实现,配置. ...
- 分布式数据库中间件TDDL、Amoeba、Cobar、MyCAT架构比较分
比较了业界流行的MySQL分布式数据库中间件,关于每个产品的介绍,网上的资料比较多,本文只是对几款产品的架构进行比较,从中可以看出中间件发展和演进路线 框架比较 TDDL Amoeba Cobar M ...
- 分布式数据库中间件–(3) Cobar对简单select命令的处理过程
友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/284 在 ...
- 分布式数据库中间件–(2) Cobar与client握手身份验证
Cobar启动完毕,监听特定端口.整个认证的流程图: NIOAcceptor类继承自Thread类,该类的对象会以线程的方式执行,进行连接的监听. NIOAcceptor启动的初始化步骤例如以下: 1 ...
- 分布式数据库中间件Mycat百亿级数据存储(转)
此文转自: https://www.jianshu.com/p/9f1347ef75dd 2013年阿里的Cobar在社区使用过程中发现存在一些比较严重的问题,如高并发下的假死,心跳连接的故障,只实现 ...
- 分布式数据库中间件–(1) Cobar初始化过程
Cobar-Server的源代码地址:GitHub 欢迎Fork. 官方文档描写叙述Cobar的网络通信模块见下图. Cobar使用了Java的NIO进行处理读写.NIO是Java中的IO复用.而不须 ...
随机推荐
- CAD参数绘制实心圆弧填充(网页版)
js中实现代码说明: function DrawPathToHatch1() { //把路径的开始位置移动指定的点 //参数一为点的X坐标 ,参数二为点的Y坐标,参数三为该点处开始宽度,对Polyli ...
- fast rcnn,faster rcnn使用cudann加速问题
之前在fast rcnn,faster rcnn编译过程中USE_CUDNN := 1这一项一直是注释掉的(即不使用cudnn加速),编译会报错: 之所以会这样,是因为fast rcnn,faster ...
- Codeforces Round #569 题解
Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...
- Android获取屏幕的大小与密度的代码
Android项目开发中很多时候需要获取手机屏幕的宽高以及屏幕密度来进行动态布局,这里总结了三种获取屏幕大小和屏幕密度的方法 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- LeetCode136,137寻找只出现一次的数
1.题目意思:在数组中,只有一个数字只出现了一次 其他的都出现了两次.找出那个只出现一次的数字. //利用位运算 异或 两个相同的数字异或为0 public int singleNumber(int[ ...
- 原生javascript实现call、apply和bind的方法
var context = {id: 12}; function fun (name, age) { console.log(this.id, name, age) } bind bind() 方法会 ...
- asp.net:Parser Error & HTTP 错误 500.21 - Internal Server Error
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABEcAAAF8CAIAAACiwUIQAAAgAElEQVR4nO2dyZHzOpZGaVEaADNkBB ...
- private关键字
Student.java /* * 学生类 * * 通过对象直接访问成员变量,会存在数据安全问题 * 这个时候,我们就想能不能不让外界对象直接访问成员变量呢? * 答案:能 * 如何实现呢? * pr ...
- 【codeforces 1109B】Sasha and One More Name
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 如果这个回文串的左半部分,字母全是一样的. 那么显然不可能再分出来了,因为不管怎么分怎么排列,最后肯定都只能和原串一样. 所以无解 其他情况下 ...
- Light oj-1002 - Country Roads,迪杰斯特拉变形,不错不错~~
1002 - Co ...