sequoiadb 巨杉資料庫是一款金融級分布式關係型資料庫,堅持從零開始打造分布式開源資料庫引擎。「核心筆記系列」旨在分享交流 sequoiadb 巨杉資料庫引擎的設計思路和**解析,幫助社群使用者深入理解 sequoiadb 的實現原理,共建開源開放的資料庫技術生態。
01 基本概念
會話與連線是兩個容易混淆的概念。會話(session) 指是通訊雙方從開始通訊到通訊結束期間的乙個上下文(context)。這個上下文是一段位於伺服器端的記憶體,記錄了本次連線的客戶端機器,通過哪個應用程式和哪個使用者登入等資訊。而連線是指從客戶端到資料庫例項的一條物理路徑。連線可以在網路上建立,也可以在本機通過ipc機制建立。通常會在客戶端程序與乙個專用伺服器或乙個排程器之間建立連線。
02 sequoiadb 中的會話設計
分布式資料庫 sequoiadb 的集群通常由資料節點、協調節點和編目節點組成,集群內的不同節點間存在多種型別的連線。因此 sequoiadb 中存在多種會話,且不同的會話對應不同的服務。會話的主要任務是處理通訊的對端發來的請求。
集群中典型的會話結構如下圖。
從圖中可以看到,本地會話、增量/全量同步會話、複製會話等,都是繼承自同乙個基類 _isession。下面將會結合組網對其中幾個關鍵的會話進行介紹,主要是會話建立/銷毀的時機、會話的結構、操作等。
本地會話對應資料結構是類 _pmdlocalsession,執行緒的主函式是 _pmdlocalsession::run(),會話執行緒啟動後,就在這個函式裡迴圈,接收及處理訊息,直到會話需要結束時退出該迴圈。
本地會話能繫結不同的 processor 以執行不同的處理流程。對於協調節點,繫結的是 _pmdcoordprocessor。對於編目節點和資料節點,繫結的是 _pmddataprocessor。對於協調節點,會先呼叫 _pmdcoordprocessor 的介面進行訊息處理,在無法識別請求型別時,則會再次呼叫 _pmddataprocessor 的介面進行處理。
05 同步(或複製)會話 repl session
分割槽組內的節點之間,通過同步動作來保證資料的一致性。同步分為兩種,一種是正常執行狀態下的增量同步,一種是異常情況下的全量同步。同步是通過對應的同步會話與同步執行緒來處理的,它涉及到兩個節點,在資料生產方稱為源端,在資料消費方稱為目標端。由於只有資料節點和編目節點上會進行資料複製,所以只有在這兩種型別的節點上,才存在同步會話。
1)增量同步會話
增量同步會話分為增量同步源端會話和目標端會話,且存在於複製組正常執行期間。在資料節點和編目節點的啟動過程中,主節點或從節點都會開啟增量同步的監聽。同時,它也會主動啟動乙個增量複製目標端會話,並向它選定的源端傳送同步請求。源端節點上會被動建立乙個增量同步源端會話,這兩個會話後續會開始進行互動,以完成資料同步。
SequoiaDB巨杉資料庫 當前會話列表
sdb list sessions current 當前會話列表列出當前使用者的會話。如果在協調節點上,返回協調節點連線編目節點和資料節點的會話 如果在編目節點或者資料節點上,返回當前會話。欄位名型別 描述nodename 字串節點名 主機名 服務名 sessionid 長整型會話 id tid整型...
SequoiaDB巨杉資料庫 當前會話快照
sdb snap sessions current 當前會話快照列出當前使用者的會話。note 如果連線協調節點查詢快照,返回的是當前會話通過協調節點連線編目節點和資料節點的會話。欄位名 型別描述 nodename 字串節點名 主機名 服務名 sessionid 長整型會話 id tid整型 該會話...
如何理解巨杉資料庫SequoiaDB核心概念?
由於採用 pc 伺服器內建物理盤,當前大部分分布式資料庫無法在硬體裝置出現故障時保證單一裝置中資料的可靠性與永續性。因此 sequoiadb 巨杉資料庫採用資料多副本存放的機制,將編目節點與資料節點所存放的資料以節點為單位進行複製,多個擁有相同資料拷貝的節點被稱為資料複製組。一般來說,複製組 資料分...