開源分布式Key/Value數據庫
今天,介紹一個分布式數據庫——https://github.com/hoorayman/popple。

Popple是一個基于Raft協議的分布式鍵值數據庫,采用Golang編寫。它具有高性能、高可用性和數據一致性等特點。Popple的日志采用了mmap順序寫入方式,支持事務,并且代碼清晰簡單,易于維護。
Raft協議是一種分布式一致性協議,它將集群中的所有節點分為三類:Leader、Follower和Candidate。Leader節點負責接收客戶端請求并將其復制到所有Follower節點。當Leader節點失效時,通過選舉機制選出新的Leader節點。Popple采用Raft協議來實現數據的復制和一致性。
Popple的數據存儲采用了鍵值對的方式,其中鍵和值都是字符串類型。在Popple中,每個節點都可以讀取和寫入數據,如果數據寫入到了非Leader節點,則該節點將數據轉發給Leader節點,Leader節點將該數據寫入自己的日志中,并將數據復制到其他Follower節點。因此,Popple實現了高可用性和數據一致性。
Popple的日志采用了mmap順序寫入方式,這種方式可以顯著提高寫入性能。Popple的日志文件分為兩部分:索引和數據。索引用于記錄數據在日志文件中的位置,數據用于記錄寫入的具體內容。當Popple啟動時,它會加載最后一個日志文件,并從中恢復出當前的狀態。當有新的數據需要寫入時,Popple會將數據追加到日志文件的末尾,并更新索引。Popple支持事務,事務是指一組操作被當作一個整體進行提交或回滾。在Popple中,事務的實現基于Raft協議和日志,每個事務都會被記錄到日志中,并且只有當該事務被復制到大多數節點后才會被提交。
總的來說,Popple是一個高性能、高可用性、具有數據一致性的分布式鍵值數據庫,它采用了Raft協議來實現數據的復制和一致性,采用mmap順序寫入方式來提高寫入性能,支持事務,并且代碼清晰簡單,易于維護。


























