国产集中式数据库对象评测 — 表
日前,针对国产集中式数据库的 SQL 能力,做了一系列的评测工作,通过多篇文章分享,受到了业内的广泛关注。这里紧接着上一话题重新开辟一个系列,从另一个维度-对象,来评估下各厂商产品针对数据对象的支持能力如何。此系列的选择数据库及版本,均参照之前的说明。本篇是此系列的第一篇,谈谈最为常见的对象-表。
1. 对象(表)能力概述
先来看看各家数据库产品在表能力的大致表现如何。限于宽度,这里拆分为两个表格。
1.png
2.png
2. 对象(表)能力详解
1)存储管理在存储管理上,上述数据库均采用了段页式的管理方式。通过将逻辑与物理管理的拆分,兼具了灵活性和管理成本。
3.png
以金仓数据库为例,KingbaseES数据库中管理和组织数据的逻辑结构单元有数据块、段和表空间。在每一个数据库内部存在着若干个表空间,所有的数据库内部对象分别存放在这些表空间中。每个表空间中的关系又被划分为若干个段,每个段中有若干个数据块存储实际的数据。KingbaseES中表或索引等对象都被记录在表空间中,并被拆分成若干个段存储。一个段对应了一个物理文件,并只存储一个关系的部分数据。段内部会被划分为若干个数据块进行数据的管理和组织。KingbaseES中管理数据的最小单元叫做数据块,或者也可以称为页面。一个数据块是最小的IO单元,即每次读入或写出数据只能以数据块做为单位。数据库中一个数据块的大小通常是8KB,并可以在初始化数据库实例时被指定。该大小需要是操作系统数据块大小的整数倍。
4.png
上述数据库均支持了行存方式,为了满足分析类需求,一般也都提供了列存选择;但在产品设计上还是采取独立方式,对用户来说存在一个成本;甚至有的厂商就是在不同产品层面实现,用户使用成本更高些。此外,部分厂商为应对列存先天带来的不足,也采用了“混合”设计的方式,提供多种选择。Oracle 的方式相对优雅,通过内存的方式,由系统自动完成维护的方式;类似也有分布式数据库产品提供行、列式存储副本的方式来解决。
5.png
下面以 YashanDB 为例,YashanDB 支持行式和列式两种不同的数据存储格式,对应段页式和切片式两种不同格式的数据存储文件,分别为数据文件(DataFile)和切片文件(SliceFile)。针对行存与列存,也提供不同表类型与之对应。
6.png
在组织形式上,各家产品的策略不同,一般都提供了对堆表、簇表的支持,但不同在于默认形式不同。也有的数据库产品提供了其他的组织形式。下图简单对比下堆表与簇表的差异
7.png
下面以达梦数据库为例,默认提供的普通表是簇表结构,同时也提供了堆表的选择。此外,针对分析需求则提供了Huge表。Huge File System(简称 HFS)是达梦数据库实现的,针对海量数据进行分析的一种高效、简单的列存储机制。列存储表(也称为 HUGE 表)就是建立在 HFS 存储机制上的一种表。
8.png
厂商针对分区表的支持,各有不同,但都支持了典型的范围、列表、哈希及复合的数据拆分能力。此外,针对分区常见的创建、删除、截断、分裂、合并等分区操作也大多支持。
5)临时表各家产品对临时表,也都支持。以金仓数据库为例,临时表用于存放只存在于事务或会话期间的数据。临时表中的数据对会话是私有的,每个会话只能看到和修改自己的数据。您可以创建全局(GLOBAL)临时表或本地(LOCAL)临时表。 临时表对于必须临时缓存结果集的应用程序很有用。创建临时表使用CREATE TEMPORARY/TEMP TABLE语句。将 GLOBAL 或 LOCAL 写在 TEMPORARY 或 TEMP 的前面,指定全局临时表或本地临时表。创建临时表时若不指定GLOBAL或LOCAL,则默认值为LOCAL。
9.png
除了上面通常意义的表外,针对特殊场景,有些产品还提供特殊表类型来支持。这一功能各家产品差异较大,当用户有特殊诉求时,可寻找更为合适的产品。这里MySQL凭借了灵活的插件能力支持了非常多的特殊表类型。此外,常见的外部表也被大多数数据库所支持。
7)安全安全能力覆盖范围很广泛,这里抽取了与表有相关性的加密、脱敏、审计、防火墙、访问控制等几个来对比。以加密为例,各家产品的实现差异是比较大的。有的产品支持了灵活的加密粒度(库、表、列)、多种加密算法(AES、国密等)、甚至多级密钥管理都是支持的;有些产品则较为简单,提供加密包用户自行实现。但针对加密功能,从文档上看普遍缺少对实用性的描述,例如如何做密钥轮转、加密后性能衰减如何等,看来还是有待于进一步增强。除加密外,其他安全能力各家差异更大,如脱敏的支持等等。比较有意思的是海量的 Vastbase,还通过标签能力提供类似分类分级的功能,比较有特色。Vastbase中敏感标记由等级分类和非等级类别两部分组成,针对不同等级分类,可采取不同控制策略。
10.png
表的运维场景也很多,这里选择场景的备份恢复、导入导出、压缩、闪回等。针对上述能力,各家产品大多已支持,差异在于实现程度各有不同。例如,针对压缩功能,有的产品是可以灵活选择压缩算法,有的产品则当数据填充量达到一定阈值就自动启用压缩等。