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