① 如何編寫一個分布式資料庫
某種程度上看來,資料庫作為整個系統的核心,這句話其實並不誇張,資料庫的選型關繫到上層業務代碼實現的方方面面,現在比較流行的架構方案是上層業務邏輯微服務化,並且結合分布式緩存,這套框架已經基本能做到上層業務的彈性擴展,但是最底層的數據存儲還是很難去中心化(除非整個技術棧中去除關系型資料庫(RDBMS), 全部採用 NoSQL)。所以,經常是 RDBMS 成為整個系統的瓶頸。
在長期的斗爭中,大家總結出了很多方式來擴展最底層的關系型資料庫:
1. 主從,一主多從,雙寫,通過隊列暫存請求... 這些方案其實並沒有解決問題,寫入仍然是單點,而且對於 DBA 的挑戰比較大,今天我們暫時就不討論了。
2. 通過中間件 Sharding,常見的開源方案有: Cobar, TDDL, Vitess, Kingshard, MyCat 等,這些方案的思路是攔截 SQL 的請求通過 sharding key 和一定規則,將請求轉發/廣播到不同的 MySQL 實例上,從而實現水平擴展的效果,這個方案基本解決了單點寫入的問題,對於業務來說整體的吞吐也上來了,看上去不錯,這個方案是大多數業務遇到性能瓶頸的解決方案,但是缺點也是有的:
1)大多中間件都沒有解決動態擴容的問題,多採用了靜態的路由策略,擴容一般還處於人工 x2 的狀態,對 DBA 要求比較高。
2)從一定程度上來說都放棄了事務,這是由於一條語句有可能會涉及到多個資料庫實例,實現分布式 事務是一個比較難的事情,我們後面會詳細的介紹。
3)對業務不透明,需要指定 sharding key, 心智負擔較大
② 如何在海量數據環境下,搭建分布式資料庫系統
如果做分布式的話,首先需要對數據做個有效的劃分, 可以通過地區屬性或者其他類似屬性做水平擴展,把不同地域的數據放在不同資料庫上。 但是這種水平分割應當盡量避免跨區的訪問。或者設計一個數據中心,把各個區中和報表相關的匯總數據抽取到倉庫裡面去,提供報表。
這樣的做法在聯機游戲中非常常見,比如魔獸世界,fifa on line等
或者做垂直分割,根據時間或者類似屬性把數據分割到不同資料庫上去,基本架構是一台在用伺服器支持讀寫操作,幾台歷史伺服器提供數據查詢,一些轉儲腳本定期把數據從在用伺服器遷移到歷史伺服器上去...
③ 如何編寫一個分布式資料庫
基於hadoop的分布式資料庫有hbase。安裝hbase除了要安裝hadoop外,還要安裝Zookeeper。
分布式hbase安裝和分布式hadoop安裝方法差不多,hbase要有master和regionserver,regionserver相當於slave,你可以在maser上面安裝好hbase,然後把它拷貝到其它slave伺服器,再修改一些配置.
④ 如何編寫一個分布式資料庫
分布式資料庫系統通常使用較小的計算機系統,每台計算機可單獨放在一個地方,每台計算機中都可能有DBMS的一份完整拷貝副本,或者部分拷貝副本,並具有自己局部的資料庫,位於不同地點的許多計算機通過網路互相連接,共同組成一個完整的、全局的邏輯上集中、物理上分布的大型資料庫。
體系結構
根據我國制定的《分布式資料庫系統標准》,分布式資料庫系統抽象為4層的結構模式。這種結構模式得到了國內外的支持和認同。
4層模式劃分為全局外層、全局概念層、局部概念層和局部內層,在各層間還有相應的層間映射。這種4層模式適用於同構型分布式資料庫系統,也適用於異構型分布式資料庫系統。