前言html
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之爭redis
目前,互聯網常有海量數據高併發和存儲的場景,對於數據的存儲,目前有基於SQL (Structured Query Language)的關係型數據庫和NoSQL(Not Only SQL)的非關係型數據庫。SQL數據存在特定結構的表中;而NoSQL則更加靈活和可擴展,存儲方式能夠是JSON文檔、哈希表或者其餘方式,好比鍵值存儲(redis,ROMA,Memcached)數據庫應用在排行更新,會話保存,面向文檔的數據庫(mongoDB、couchDB)應用在日誌記錄,面向列的數據庫(Cassandra、HBase)在博客中的應用。並且速度極高。sql
雖然在雲計算時代,傳統數據庫存在着先天性的弊端,可是NoSQL數據庫只能在特定場景下有奇效,只能做爲傳統數據的補充而不能將其替代。數據庫
關係型數據庫性能瓶頸後端
目前絕大多數數據庫不具有自動擴展,自動遷移的能力,對於單庫單表性能瓶頸明顯,當單表超過1000W數據量,性能會出現比較明顯的降低。爲了解決該難題,常見的作法就是進行分庫分表來規避。服務器
垂直分庫:可按照業務模塊進行劃分,把數據分在不一樣的庫中。併發
水平分庫:咱們發現某些表的數據量已經超過1000W,QPS顯著降低,這裏能夠對這種表進行進一步水平拆分,作成多個分片表。大多數電商企業會按照日期分片,但又衍生出來一些問題,在固定時段中對某個分片壓力很大,其餘分片此時處於空閒狀態,在電商企業高併發的場景下,會產生大量數據,此時又產生短期內單庫QPS瓶頸的問題。分佈式
拆分規則優化:能夠根據拆分字段,進行取模的方式來作到數據大體平均分佈到多個分片上。能夠保證總體系統的QPS獲得提高,但又衍生出來一些問題:分片數量不夠須要擴容的問題,跨分片事務一致性沒法保證的問題。高併發
數據庫中間件
爲了減小對應用的侵入性,而且要將壓力打在中間件上,該中間件負責和上層應用打交道,對應用可表現爲一個獨立的數據庫,而屏蔽底層複雜的系統細節。分佈式數據庫中間件除了基本的分表分庫功能,還能夠豐富一下,好比講讀寫分離或者水平擴容功能集成在一塊兒,或者好比讀寫分離自己也能夠做爲一個獨立的中間件。(DDM,Cobar,MyCAT, TDDL等)。
上述提到的分片數量不夠的擴容以及分佈式事務一致性的問題,在華爲雲的DDM已經獲得解決,而且中間件的功能在不斷豐富,已經成爲高併發應用的絕對利器。