這篇文章從分析mysql x這個外掛程式的協議層, 包括兩方面內容:protobuf訊息的具體定義,及這些訊息到sql語句的對映。
mysql x簡介
mysql x 是mysql 5.7發布時自帶的乙個外掛程式,啟用後,即可通過 x protocol 協議提供乙個非常類似mongodb的服務。在unix/linux環境下,載入這個外掛程式的命令是:
install plugin mysqlx soname 'mysqlx.so';
後續的配置,可以參考這裡。
服務端的這個外掛程式在收到請求之後,會將其翻譯為對應的sql語句,然後轉交給mysql主服務執行,並將結果集返回給客戶端。
訊息協議
訊息協議定義在 mysql 5.7 原始碼樹的rapid/plugin/x/protocol目錄下,包括連線管理、會話管理、crud等各種型別。需要注意的是,這些檔案中定義了多個不同名的包,因此在golang中,是無法使用的,還需要做一些包括建立子目錄、更改包名等在內的微小處理。訊息本身的文件在這裡。
然而文件並不涵蓋所有的細節,因此,我們寫乙個抓包並列印訊息內容的工具,來幫助我們除錯這個協議。專案在這裡。
訊息對映到sql
管理員命令 ,在rapid/plugin/x/src/中。
ping,直接返回ok訊息;
list_clients,返回4個column metadata,分別為client_id, user, host, sql_session;
kill_client
create_collection
drop_collection
ensure_collection
create_collection_index
drop_collection_index
list_objects
enable_notices
disable_notices
list_notices
驗證相關的命令 ,在同目錄下的auth_mysql41.h和auth_mysql41.cc檔案中。由三個函式,分別對應start,continue和done三個階段。
crud類操作 ,通過crud_cmd_handler.h中定義的crud_command_handler類的7個介面實現,這7個介面分別負責增刪改查記錄,及建立、修改、銷毀檢視。
insert_statement_builder類將文件的插入操作改寫為sql的insert語句;
update_statement_builder類將文件的更新操作改寫為update語句;
對應的,還有delete_statement_builder和find_statement_builder類。
還有一些 notice 相關的內容,暫略。
TCP IP分族協議
tcp ip協議族分層 4層 應用層,傳輸層,網路層,資料鏈路層 1.應用層 決定了向使用者提 用服務時的通訊服務 2.傳輸層 提供處於網路連線中的兩台計算機之間的資料傳輸 3.網路層 處理網路上流動的資料報 資料報是資料傳輸的最小資料單位 該層規定了傳輸路線,在總多的路線中選擇一條路徑 客戶端在應...
五 分類和協議
分類和協議 有時候在處理類定義的時候,可能想要為其新增一些新方法,但是由不想通過新建很多子類來繼承並且增加新方法,這個時候分類就有了用處。相當於在使用的時候只要註明是哪個分類。下面用例子來說明 import fraction.h inte ce fraction tests void printft...
五分鐘讀懂TCP 協議 TCP協議簡介
tcp 是網際網路核心協議之一,本文介紹它的基礎知識。一 tcp 協議的作用 網際網路由一整套協議構成。tcp 只是其中的一層,有著自己的分工。這裡寫描述 說明 tcp 是乙太網協議和 ip 協議的上層協議,也是應用層協議的下層協議。最底層的乙太網協議 ethernet 規定了電子訊號如何組成資料報...