如何寫一個輕量級分散式資料庫?
12-29
看過一些資料後,對於寫一個資料庫,只是淺顯的知道,需要解決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開發資料庫命名規範問題?
※解釋一下關係資料庫的第一第二第三範式?