國產集中式數據庫對象評測 — 表
原創日前,針對國產集中式數據庫的 SQL 能力,做了一系列的評測工作,通過多篇文章分享,受到了業內的廣泛關注。這里緊接著上一話題重新開辟一個系列,從另一個維度-對象,來評估下各廠商產品針對數據對象的支持能力如何。此系列的選擇數據庫及版本,均參照之前的說明。本篇是此系列的第一篇,談談最為常見的對象-表。
1. 對象(表)能力概述
先來看看各家數據庫產品在表能力的大致表現如何。限于寬度,這里拆分為兩個表格。
1.png
2.png
2. 對象(表)能力詳解
1)存儲管理
在存儲管理上,上述數據庫均采用了段頁式的管理方式。通過將邏輯與物理管理的拆分,兼具了靈活性和管理成本。
3.png
以金倉數據庫為例,KingbaseES數據庫中管理和組織數據的邏輯結構單元有數據塊、段和表空間。在每一個數據庫內部存在著若干個表空間,所有的數據庫內部對象分別存放在這些表空間中。每個表空間中的關系又被劃分為若干個段,每個段中有若干個數據塊存儲實際的數據。KingbaseES中表或索引等對象都被記錄在表空間中,并被拆分成若干個段存儲。一個段對應了一個物理文件,并只存儲一個關系的部分數據。段內部會被劃分為若干個數據塊進行數據的管理和組織。KingbaseES中管理數據的最小單元叫做數據塊,或者也可以稱為頁面。一個數據塊是最小的IO單元,即每次讀入或寫出數據只能以數據塊做為單位。數據庫中一個數據塊的大小通常是8KB,并可以在初始化數據庫實例時被指定。該大小需要是操作系統數據塊大小的整數倍。
4.png
2)存儲方式
上述數據庫均支持了行存方式,為了滿足分析類需求,一般也都提供了列存選擇;但在產品設計上還是采取獨立方式,對用戶來說存在一個成本;甚至有的廠商就是在不同產品層面實現,用戶使用成本更高些。此外,部分廠商為應對列存先天帶來的不足,也采用了“混合”設計的方式,提供多種選擇。Oracle 的方式相對優雅,通過內存的方式,由系統自動完成維護的方式;類似也有分布式數據庫產品提供行、列式存儲副本的方式來解決。
5.png
下面以 YashanDB 為例,YashanDB 支持行式和列式兩種不同的數據存儲格式,對應段頁式和切片式兩種不同格式的數據存儲文件,分別為數據文件(DataFile)和切片文件(SliceFile)。針對行存與列存,也提供不同表類型與之對應。
6.png
3)組織形式
在組織形式上,各家產品的策略不同,一般都提供了對堆表、簇表的支持,但不同在于默認形式不同。也有的數據庫產品提供了其他的組織形式。下圖簡單對比下堆表與簇表的差異
7.png
下面以達夢數據庫為例,默認提供的普通表是簇表結構,同時也提供了堆表的選擇。此外,針對分析需求則提供了Huge表。Huge File System(簡稱 HFS)是達夢數據庫實現的,針對海量數據進行分析的一種高效、簡單的列存儲機制。列存儲表(也稱為 HUGE 表)就是建立在 HFS 存儲機制上的一種表。
8.png
4)分區表
廠商針對分區表的支持,各有不同,但都支持了典型的范圍、列表、哈希及復合的數據拆分能力。此外,針對分區常見的創建、刪除、截斷、分裂、合并等分區操作也大多支持。
5)臨時表
各家產品對臨時表,也都支持。以金倉數據庫為例,臨時表用于存放只存在于事務或會話期間的數據。臨時表中的數據對會話是私有的,每個會話只能看到和修改自己的數據。您可以創建全局(GLOBAL)臨時表或本地(LOCAL)臨時表。 臨時表對于必須臨時緩存結果集的應用程序很有用。創建臨時表使用CREATE TEMPORARY/TEMP TABLE語句。將 GLOBAL 或 LOCAL 寫在 TEMPORARY 或 TEMP 的前面,指定全局臨時表或本地臨時表。創建臨時表時若不指定GLOBAL或LOCAL,則默認值為LOCAL。
9.png
6)特殊表
除了上面通常意義的表外,針對特殊場景,有些產品還提供特殊表類型來支持。這一功能各家產品差異較大,當用戶有特殊訴求時,可尋找更為合適的產品。這里MySQL憑借了靈活的插件能力支持了非常多的特殊表類型。此外,常見的外部表也被大多數數據庫所支持。
7)安全
安全能力覆蓋范圍很廣泛,這里抽取了與表有相關性的加密、脫敏、審計、防火墻、訪問控制等幾個來對比。以加密為例,各家產品的實現差異是比較大的。有的產品支持了靈活的加密粒度(庫、表、列)、多種加密算法(AES、國密等)、甚至多級密鑰管理都是支持的;有些產品則較為簡單,提供加密包用戶自行實現。但針對加密功能,從文檔上看普遍缺少對實用性的描述,例如如何做密鑰輪轉、加密后性能衰減如何等,看來還是有待于進一步增強。除加密外,其他安全能力各家差異更大,如脫敏的支持等等。比較有意思的是海量的 Vastbase,還通過標簽能力提供類似分類分級的功能,比較有特色。Vastbase中敏感標記由等級分類和非等級類別兩部分組成,針對不同等級分類,可采取不同控制策略。
10.png
8)運維
表的運維場景也很多,這里選擇場景的備份恢復、導入導出、壓縮、閃回等。針對上述能力,各家產品大多已支持,差異在于實現程度各有不同。例如,針對壓縮功能,有的產品是可以靈活選擇壓縮算法,有的產品則當數據填充量達到一定閾值就自動啟用壓縮等。