如何寫一個輕量級分散式資料庫?

看過一些資料後,對於寫一個資料庫,只是淺顯的知道,需要解決SQL語句解析,存儲過程,解決一致性問題以及資料庫之間的通信,但是對於如何寫一個這樣的資料庫步驟和流程不是太清晰,在此輕量級表現在在於數據規模和支持操作複雜度上。


這位老師 goroutine的微博 用go實現了一個分散式的資料庫系統,質量很高,或許他的經驗能給你啟發。可以關注一下。


先把MongoDB精通。

然後利用Java + Thrift構建一個單入口節點 + 雙數據節點 + 基於節點ID進行負載均衡的簡單分散式資料庫原型。


題主可以從寫一個分散式鍵值資料庫入手。

架構可以考慮master-slave模式,master node上用consistent hashing做partition,data node隨便寫一個key-value存儲引擎,然後協議參考memcached protocol。能跑了之後,再加上replication, failure recovery 等功能。

實現細節上可以參考douban的beansdb和beanseye。 我以前就曾經把beanseye改成了一個滿足上述功能的分散式資料庫(JWZH/caskdb · GitHub), 題主也可以作為參考。


連consistency都要考慮就不能算輕量級了

真的叫輕量級 先滿足能讀能寫吧 其它balance concurrency recovery replication都不考慮

讀:誰管理meta data 誰存儲exact data 如何利用meta data定位到slave 獲取data後如何返回

寫:寫在哪個slave 如何更新meta

夠簡單吧 然而夠你練了

涉及

架構設計 主從還是點到點

角色服務設計 主負責什麼 從負責什麼(主從模式的話)

數據存儲模型(memory和disk的合理使用和管理

集群溝通和協調(coordination

機器間的數據傳輸(rpc

嫌少?加replication好了 如何不影響正常讀寫的情況下 asyn更新到各台機器

學生而已吧?不知道滿不滿足你胃口


題主上來的命題就太宏大了,可以先看看資料庫包含哪些部分,如存儲引擎部分,數據索引,SQL語句對應的物理計劃和邏輯計劃生成,並發控制,事務模型,故障恢復等等。建議題主可以先從簡單入手,如實現一個單機存儲引擎(如leveldb),然後再一步步實現分散式存儲引擎,實現SQL解析等等,從小處入手,不斷地添加功能,而不是上來就求一個大而全的方案。


推薦閱讀:

資料庫主從複製,讀寫分離,負載均衡,分庫分表分別表達的什麼概念?
NoSQL 能終結關係資料庫嗎?
mysql開發資料庫命名規範問題?
解釋一下關係資料庫的第一第二第三範式?

TAG:資料庫 | 分散式存儲 | 資料庫設計 | 資料庫技術 | 分散式事務 |