浅析分布式数据库中间件DDM
前言
DDM是什么?這是華為云Paas推出的分布式數(shù)據(jù)庫中間件,DDM(Distributed Database Middleware)是一個實現(xiàn)了Mysql協(xié)議棧的服務(wù)器,前端用戶可以把它看做一個數(shù)據(jù)庫代理,用Mysql客戶端工具和命令行訪問,而DDM后端連接一到多個Mysql Server。因此,DDM本身并不存儲數(shù)據(jù),數(shù)據(jù)是在后端連接的Mysql Server上存儲的。簡單來說,DDM就是Mysql的最佳伴侶,一定程度上讓Mysql擁有了跟Oracle PK的能力。這樣聽起來DDM好像是Mysql的輔助大神,這里有必要對八卦下DDM發(fā)展背景,了解下DDM的前世歷程。
?
NoSQL與SQL之爭
目前,互聯(lián)網(wǎng)常有海量數(shù)據(jù)高并發(fā)和存儲的場景,對于數(shù)據(jù)的存儲,目前有基于SQL (Structured Query Language)的關(guān)系型數(shù)據(jù)庫和NoSQL(Not Only SQL)的非關(guān)系型數(shù)據(jù)庫。SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴(kuò)展,存儲方式可以是JSON文檔、哈希表或者其他方式,比如鍵值存儲(redis,ROMA,Memcached)數(shù)據(jù)庫應(yīng)用在排行更新,會話保存,面向文檔的數(shù)據(jù)庫(mongoDB、couchDB)應(yīng)用在日志記錄,面向列的數(shù)據(jù)庫(Cassandra、HBase)在博客中的應(yīng)用。而且速度極高。
?
雖然在云計算時代,傳統(tǒng)數(shù)據(jù)庫存在著先天性的弊端,但是NoSQL數(shù)據(jù)庫只能在特定場景下有奇效,只能作為傳統(tǒng)數(shù)據(jù)的補(bǔ)充而不能將其替代。
?
關(guān)系型數(shù)據(jù)庫性能瓶頸
目前絕大多數(shù)數(shù)據(jù)庫不具備自動擴(kuò)展,自動遷移的能力,對于單庫單表性能瓶頸明顯,當(dāng)單表超過1000W數(shù)據(jù)量,性能會出現(xiàn)比較明顯的下降。為了解決該難題,常見的做法就是進(jìn)行分庫分表來規(guī)避。
?
垂直分庫:可按照業(yè)務(wù)模塊進(jìn)行劃分,把數(shù)據(jù)分在不同的庫中。
?
水平分庫:我們發(fā)現(xiàn)某些表的數(shù)據(jù)量已經(jīng)超過1000W,QPS顯著下降,這里可以對這種表進(jìn)行進(jìn)一步水平拆分,做成多個分片表。大多數(shù)電商企業(yè)會按照日期分片,但又衍生出來一些問題,在固定時段中對某個分片壓力很大,其他分片此時處于空閑狀態(tài),在電商企業(yè)高并發(fā)的場景下,會產(chǎn)生大量數(shù)據(jù),此時又產(chǎn)生短時間內(nèi)單庫QPS瓶頸的問題。
?
拆分規(guī)則優(yōu)化:可以根據(jù)拆分字段,進(jìn)行取模的方式來做到數(shù)據(jù)大致平均分布到多個分片上。可以保證整體系統(tǒng)的QPS得到提升,但又衍生出來一些問題:分片數(shù)量不夠需要擴(kuò)容的問題,跨分片事務(wù)一致性無法保證的問題。
?
數(shù)據(jù)庫中間件
為了減少對應(yīng)用的侵入性,并且要將壓力打在中間件上,該中間件負(fù)責(zé)和上層應(yīng)用打交道,對應(yīng)用可表現(xiàn)為一個獨立的數(shù)據(jù)庫,而屏蔽底層復(fù)雜的系統(tǒng)細(xì)節(jié)。分布式數(shù)據(jù)庫中間件除了基本的分表分庫功能,還可以豐富一下,比如講讀寫分離或者水平擴(kuò)容功能集成在一起,或者比如讀寫分離本身也可以作為一個獨立的中間件。(DDM,Cobar,MyCAT, TDDL等)。
?
上述提到的分片數(shù)量不夠的擴(kuò)容以及分布式事務(wù)一致性的問題,在華為云的DDM已經(jīng)得到解決,并且中間件的功能在不斷豐富,已經(jīng)成為高并發(fā)應(yīng)用的絕對利器。
?
轉(zhuǎn)載于:https://www.cnblogs.com/middleware/p/9891125.html
總結(jié)
以上是生活随笔為你收集整理的浅析分布式数据库中间件DDM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git for Windows之推送本地
- 下一篇: 偶尔用得上的MySQL操作