sequoiadb 資料庫引擎處理查詢語句流程

2021-06-27 23:11:27 字數 2326 閱讀 4061

按照它官網上的技術文件,在pc機上安裝並成功部署乙個集群,文件還算詳細,也沒遇到什麼問題。接著嘗試在本地命令列上,連線資料庫,建立資料庫,建立**,插入資料,查詢資料,玩法基本與mongodb沒啥大的區別,感覺還行。

然後再看了下它的基礎架構,從官方文件上得知,乙個集群主要由三個部分組成,協調節點,編目節點,資料節點。其中這裡的協調節點主要接收使用者的請求,並**這些請求到相應的資料節點上。而編目結點,類似集群裡的metadata的功能吧,記錄了這個集群的資料節點分布,資料庫,**等相關資訊。而資料節點,應該就是最終儲存真實資料的地方。

在了解了它的基本架構後,便開始檢視它的源**實現,主要看了c驅動和它的引擎入口函式那塊的功能實現,**寫得比較精簡,但是注釋不夠詳細,有些部分看得不太懂。

然後就開始想著圍繞命令列的幾條命令,來分析下它的命令執行流程和具體的處理過程。

接著開啟乙個命令列視窗,輸入var db = new sdb(『localhost』,11810); 然後看了下協調節點的日誌,發現確實打了幾條日誌,內容就是與11810 這個埠建立連線成功。但是它的日誌level為warning,這個日誌級別應該是可以更改的,於是為了想獲取更多的日誌資訊,我檢視了下它的配置資訊文件,然後把這個級別修改為debug級別,但是修改了後,好像沒有生效,有點納悶。最後發現,修改了配置檔案後,需要重啟這個節點,配置才會生效。

然後就重新執行了一遍 var db = new sdb(『localhost』,11810); db.test.test.find() 這兩條命令,根據這兩條命令的產生的日誌,來分析資料庫內部的處理流程。

首先,經過閱讀源**發現,在命令列中執行db = new sdb(『locahost』,11810)之類的命令時,在後台實際上都會通過js的函式對映,對映到c驅動的某個函式上,c驅動的原始碼主要在client.c這個檔案上。通過閱讀c驅動**,connetction(ip,svc_name,user,passwd) 實際上就是在本地封裝了乙個socket並建立到db協調節點的連線。而db.test.test.find(),則會對映為對應的函式,並通過這個建立好的socket把相應的請求資料,傳送到db的協調節點上,db那邊經過處理後,把響應的資料返回給客戶端的socket上。例如,執行乙個find操作,db向客戶端返回的是乙個cursor,這個cursor實際上是db返回給客戶端的一串指定結構的長字串,而cursor僅僅指向了這段字串的指標。通過cursor.next() 函式,讓cursor指向下一條資料。當cursor指向最一條資料時,再通過socket傳送get more指令(包含cursor的offset)到db上,db再返回這個offset開始的後面的資料。其中可以看出,db返回的資料是查詢結果的部分資料,不是全部資料。

下面再來看看後台的協調節點是如何處理客戶端發來的請求的,下面是協調節點的debug日誌

從上面的日誌,可以發現監聽socket連線是乙個叫pmdagententrypoint的函式,通過在原始碼中查詢「receivedpacket size」可以確定,接收客戶端報文確實是這個函式。這個函式主要的作用就是根據不同的節點型別來處理不同的請求。

進入到pmdprocessagentrequest這個函式中繼續跟蹤下去,並查詢下一句日誌內容的在源**的列印處。可以發現,會進入到乙個語句操作型別的判斷中,判斷這個操作是query還是get more操作

接著進入到rtncoordoperator.cpp檔案中,通過與編目節點的資料互動,獲得處理query中需要用到的group和node,還有node的ip資訊,並生成乙個包含所有groupid的list,在這裡使用乙個map(grouplist)來存放groupid,grouplist[groupid] = groupid ;

接著進入到rtncoordquery.cpp中,在得到了所需要的group和node資訊後,通過querytodatanodegroup這個函式,把資料請求傳送到對應的資料節點組上,資料結點組選取其中乙個資料節點進行資料的請求,並把查詢到的結果通過socket返回給協調節點,協調節點再把資料返回給客戶端。

後台資料庫引擎處理資料報文的過程比較複雜,涉及到的函式與檔案數量比較多,上面只是我對這個處理過程的乙個濃縮,可能會存在一些錯誤的地方,如果給其它開源愛好者帶來一些誤導的話,請見諒,哈哈。希望這篇文章能給大家帶來幫助。

SequoiaDB 巨杉資料庫 資料庫引擎解除安裝

資料庫引擎解除安裝 當使用者不再需要 sequoiadb 巨杉資料庫的時候,可以選擇解除安裝。解除安裝前的檢查 確保 sequoiadb 未處於使用狀態且不再使用 解除安裝過程需要使用 root 使用者許可權 資料備份 如果需要保留資料則對資料進行備份,如果不需要則徹底刪除。解除安裝步驟 下列解除安...

SequoiaDB 巨杉資料庫 資料庫引數配置

引數配置 sequoiadb 支援命令列方式及配置檔案方式進行引數配置。命令列方式配置 在啟動 sequoiadb 時傳入配置引數值 sequoiadb businessname yyy catalogaddr ubuntu wjm 30003,ubuntu wjm 30013,ubuntu wjm...

SequoiaDB巨杉資料庫C API

此部分是 c api 相關文件。注意 version 2.10 新增收集資料統計資訊介面 新增修改介面 version 1.10 新增獲取查詢訪問計畫的介面 新增用於大物件 lob 操作的介面 version 1.8 新新增介面 version 1.6 使用 sdbnodehandle 來取代原來的...