開源資料庫OceanBase原始碼解讀(九):tableAPI和OB多模型
作者簡介:竹翁,畢業於北京大學, OceanBase 核心研發總監。
原名楊志豐,花名竹翁。近十年來一直在阿里巴巴/螞蟻金服自主研發分散式系統和資料庫的從事研發工作。
致力於設計出先進的 HTAP 資料庫系統,打造技術業內標杆、商業取得成功的核心基礎設施。在 OceanBase 系統中,他先後負責 OceanBase 的 SQL 引擎,分散式主控模組,多模資料庫方向等,負責過 OceanBase 的資料庫平臺產品研發,近期在負責核心創新研發工作。且竹翁對 C++ 、分散式系統原理、 SQL 查詢處理、事務處理、編譯技術、工程效率等方面也有著濃厚的興趣。
在剛剛釋出的 OceanBase社群版 3.1.1 中,OceanBase 開放了一組新的 API 叫做 Table API ,hbase -> HBase 。本文作為原始碼解讀系列的第九篇,將介紹 Table API ,hbase -> HBase 和 OceanBase 多模型,以及 tableAPI 相關程式碼。
Table API ,hbase -> HBase 以 API 而非 SQL 的方式提供了一種新的訪問 OceanBase 資料的介面。熟悉 MySQL 的同學,可以把它類比為 MySQL 的 sockethandler 。不過 Table API ,hbase -> HBase 提供的能力更強大,它把OceanBase 可靠和可擴充套件的分散式儲存層能力直接提供給應用程式,提供了靈活(非關係模型)和輕量的資料訪問介面(無連線狀態),應用程式可以把 Table API ,hbase -> HBase 當做 key-value , table-store , hbase(我們提供了相容 hbase 的 API 和驅動)等多種資料模型的資料庫來使用。在簡單讀寫場景下, Table API ,hbase -> HBase 比 SQL 也有一定的效能優勢(響應延時)。
這是 OceanBase 開放生態的重要舉措,第三方系統可以相對容易的在 OceanBase 的 Table API ,hbase -> HBase 服務之上封裝增值的資料服務。例如,我們在螞蟻集團內部廣泛部署的時序資料庫 CeresDB 就是這麼做的。
下面介紹一下 Table API ,hbase -> HBase 相關程式碼。
Table API ,hbase -> HBase 模組通過 obrpc 協議提供資料服務,他的服務埠和 observer 的 rpc 埠一樣。服務端的主體程式碼位於 src / observer / table /。
上面檔案中,叫做 xxx_processor 的,主要都是協議層的處理。
execute_processor 是單行操作的處理函式, batch_execute_processor 是批量多行操作的處理函式,query_processor 是掃描操作的處理函式。
主體的邏輯在 ob_table_service.h/cpp 中。通過學習 Table API ,hbase -> HBase 的程式碼,可以快速學習 OceanBase 儲存層、事務層對 SQL 層提供的介面。
Table API ,hbase -> HBase 的 rpc 請求和結果的資料結構,定義在 src/share/table 中。從 OceanBaseTableOperation 類的定義中,可以看到 Table API ,hbase -> HBase 提供了單行的 insert, delete, insert or update(無索引時即put), replace, retrieve(get), increment, append 以及他們任意組合的批量操作。通過 OceanBaseTableQuery 介面,提供了範圍掃描操作。
Table API ,hbase -> HBase 當前有 Java 和 Rust 兩種語言的驅動,對某個分割槽的查詢由客戶端傳送到 leader 副本所在的 OceanBaseserver 上。如果發生了主備切換,需要驅動實現重試邏輯。
歡迎大家在 Table API ,hbase -> HBase 之上擴充套件更多應用。
附錄:前八篇原始碼解讀文章可供參考
8、 OceanBase 原始碼解讀(八)OB高效能執行引擎
參與更多技術交流,請至 OceanBase 社群版 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69909943/viewspace-2842781/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OceanBase 原始碼解讀(七):一文讀懂資料庫索引實現原理原始碼資料庫索引
- OceanBase 原始碼解讀(九):儲存層程式碼解讀之「巨集塊儲存格式」原始碼
- OceanBase 原始碼解讀(八):事務日誌的提交和回放原始碼
- Gitee Premium完成與OceanBase開源資料庫適配GiteeREM資料庫
- 初探oceanbase和newsql資料庫SQL資料庫
- 位元組開源RPC框架Kitex的日誌庫klog原始碼解讀RPC框架原始碼
- OceanBase 原始碼解讀(十二):宏塊的垃圾回收和壞塊檢查原始碼
- 【OB小藍科創館】3分鐘揭祕 OceanBase 資料庫特性——高可用!資料庫
- OceanBase 原始碼解讀(五):租戶的一生原始碼
- OceanBase 原始碼解讀(三):分割槽的一生原始碼
- OB有問必答 | OceanBase如何保證資料可靠性?
- 一起玩轉開源資料庫!OceanBase DevCon 之開源生態全景解析資料庫dev
- zxing開源庫工作流程原始碼詳解原始碼
- PostgreSQL 原始碼解讀(7)- 插入資料#6(ExecProcNode和ExecPro...SQL原始碼
- PostgreSQL 原始碼解讀(9)- 插入資料#8(ExecutorRun和standard...SQL原始碼
- PostgreSQL 原始碼解讀(11)- 插入資料#10(PortalRunMulti和Por...SQL原始碼
- 漫談OB | OceanBase 在海量資料和高併發下的應用實踐
- 原始碼閱讀:SDWebImage(九)——SDWebImageCodersManager原始碼Web
- 原始碼閱讀:AFNetworking(九)——AFImageDownloader原始碼
- 螞蟻集團自研資料庫 OceanBase 宣佈正式開源 併成立開源社群資料庫
- OceanBase CTO楊傳輝:萬字解讀,打造開發者友好的分散式資料庫分散式資料庫
- PostgreSQL 原始碼解讀(1)- 插入資料#1SQL原始碼
- 國產資料庫與開原始碼資料庫原始碼
- PostgreSQL 原始碼解讀(2)- 插入資料#2(RelationPutHeapTuple)SQL原始碼APT
- PostgreSQL 原始碼解讀(5)- 插入資料#4(ExecInsert)SQL原始碼
- PostgreSQL 原始碼解讀(6)- 插入資料#5(ExecModifyTable)SQL原始碼
- PostgreSQL 原始碼解讀(8)- 插入資料#7(ExecutePlan)SQL原始碼
- PostgreSQL 原始碼解讀(10)- 插入資料#9(ProcessQuery)SQL原始碼
- PostgreSQL 原始碼解讀(13)- 插入資料#12(PostgresMain)SQL原始碼AI
- Vue3資料驅動原始碼解讀Vue原始碼
- 資料庫技術解讀之細粒度資源管控資料庫
- oceanbase資料庫簡介資料庫
- Android 解讀開源專案UniversalMusicPlayer(資料管理)Android
- 一文讀懂 OceanBase 資料庫的SLog日誌資料庫
- JDK proxy 和cglib 原始碼解讀JDKCGLib原始碼
- LLaMA 3 原始碼解讀-大語言模型5原始碼模型
- 技術解讀資料庫如何實現“多租戶”?資料庫
- OkHttp 開源庫使用與原始碼解析HTTP原始碼