写点什么

YashanDB 数据库如何支持多种数据类型的存储

作者:数据库砖家
  • 2025-08-30
    广东
  • 本文字数:3349 字

    阅读完需:约 11 分钟

在现代数据库系统中,支持多种数据类型的存储是实现数据多样化管理与高效访问的基础能力。随着业务需求日益复杂,数据库需有效地存储和处理文本、数值、时序、二进制对象等多种类型数据,同时保证性能、数据一致性及可扩展性。YashanDB 作为一款面向多样化场景的关系型数据库,集成了丰富的数据类型支持和多样化存储引擎,满足不同应用场景的需求。本文将详细解析 YashanDB 如何通过其存储架构与数据类型设计,实现对多种数据类型的高效存储与访问。本文适合数据库研发人员、架构师及技术管理者参考。

1. 数据类型支持原理与分类

YashanDB 数据库原生支持多类别的数据类型,这些数据类型可大致分类为字符型、数值型、日期时间型、大对象型(LOB)以及复杂类型。具体如下:

 

字符型:包括定长字符(CHAR)、变长字符(VARCHAR)、以及支持多语言的 NCHAR 和 NVARCHAR,支持明确指定字符长度和编码,优势在于适应不同语言环境与字符长度需求。

数值型:包含多种数值类型,包括多精度的 NUMBER 类型(支持定点与浮点),原生整数类型(如 BINARY_INTEGER)和原生浮点类型(BINARY_FLOAT、BINARY_DOUBLE),实现高精度计算和高运算性能。

日期时间型:支持 DATE、TIME、TIMESTAMP 等多种类型,便于时序数据的存储和运算,并支持时间间隔类型(INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND)进行日期间距计算。

大对象型(LOB):包含 CLOB、BLOB 和 NCLOB 三种,支持超大文本和二进制数据的存储。通过长度自动分离技术,最大程度降低对表结构访问的影响。

自定义类型(UDT):支持用户定义复杂数据类型,如对象类型(OBJECT)、可变数组(VARRAY)、嵌套表(NESTED TABLE),便于对现实业务实体建模。

 

YashanDB 采用严格的数据类型定义,系统在数据写入时会对数据类型、长度、精度进行校验和转换,从而保证数据的有效性和一致性。

2. 存储引擎与数据组织结构

为实现多样数据类型的高效存储,YashanDB 设计了多种存储引擎及数据组织方式,主要包括:

 

HEAP 存储结构:用于行存表(Row Store),所有列数据按行顺序存储,支持变长字段(如 VARCHAR、LOB 等)按列声明顺序排列。此结构允许快速的插入更新,适用于在线事务处理(OLTP)场景。

BTREE 存储结构:作为索引存储结构,采用 B-Link Tree 实现有序存储,提供高效的索引查找能力。索引中存储对应表列的值和 RowId,支持唯一索引和非唯一索引。

MCOL(可变列式存储):为面向在线事务与分析混合处理(HTAP)的列存表提供支持。数据采用段页式管理,列数据连续存储,支持原地更新和字典编码,提升了查询和更新性能。

SCOL(稳态列式存储):针对海量稳态数据的列存表设计。采用切片(Slice)方式组织数据,每个切片按列数据连续存储,支持压缩、编码和稀疏索引,极大优化了分析型查询性能。

 

不同的数据类型在不同存储结构中有专门的编码和管理方案。例如,LOB 在行存表中超过一定长度时,存储位置分离,行内仅存指针;MCOL 对变长列采用列转行混合技术;SCOL 通过切片文件及对象式管理优化大容量存储。

3. 多数据类型存储支持的关键技术

3.1. 变长数据与自动存储分离机制

YashanDB 支持变长列(如 VARCHAR、LOB 等)的动态存储管理。对较短的变长数据,采用纯列式存储;较长的变长列,采用行号与堆式存储结合的方式,即行内存储变长字段位置元数据,实际数据存储于独立的堆表区。

此机制解决了大对象占用过多行内空间,导致行迁移和查询效率下降的问题,并且通过 RowId 逻辑映射确保行列映射的高效事务批处理能力。同时,支持列字段长度变更时的原地更新,避免了数据空间的碎片和膨胀。

3.2. 多版本并发控制(MVCC)与数据逻辑隔离

多版本并发控制是支持并发读写、多事务隔离的基础。YashanDB 为每个事务分配唯一 ID 及 SCN,以时间版本为单位管理数据的可见性。数据修改不会覆盖旧版本,而是生成 UNDO 记录以支撑一致性读。

读取一个数据页时,系统根据查询 SCN 利用 UNDO 数据恢复到查询时点的一致版本,确保事务隔离性和读写性能。多数据类型在存储引擎层均支持 MVCC 机制,保障高并发环境下的数据一致性和吞吐量。

3.3. 数据压缩与编码优化

列式存储尤其关注数据压缩和编码效率。YashanDB 通过字典编码、区间编码、稀疏索引等技术实现高压缩比,减少存储空间和 IO 压力。SCOL 采用对象存储对列数据进行压缩及排序加工,并通过切片合并及标记删除机制实现数据的自动维护与释放。

压缩策略依赖数据类型及业务特性动态调整,适应不同数据冷热管理策略(活跃切片使用 MCOL 格式,稳态切片使用 SCOL 格式),确保冷热数据访问性能和存储效率的平衡。

3.4. 自定义类型支持与复杂数据建模

YashanDB 支持用户自定义复杂类型,如 OBJECT 类型的嵌套属性。系统通过隐藏列实现复杂类型内部结构的存储与访问隔离,用户操作仍以对象整体形式呈现。自定义类型支持允许基于内置基础类型构建更贴合业务的实体模型,提升业务层数据表达力。

自定义类型与 PL(过程语言)集成,支持方法调用和存储过程中对复杂对象的访问,增强了业务逻辑实现的灵活性和封装性。

3.5. 多语言字符与 Unicode 支持

为支持国际化业务需求,YashanDB 提供 NCHAR 和 NVARCHAR 类型,支持基于 UNICODE 字符集的定长及变长字符串存储。该支持使得数据库能够保障多语言文本的准确存储和高效检索,满足全球化应用的需求。

字符串类型的数据存储长度定义均可明确为字符数或字节数,设计上考虑了多字节字符环境对存储和性能的影响。

4. 数据类型的存储与访问优化

YashanDB 针对不同类型数据设计了一系列访问优化策略:

 

行存表:采用 HEAP 存储实现数据的快速入库和更新。心理预留(PCT FREE)策略避免数据更新引发频繁的行迁移,通过行链接突破单页存储限制。

列存表:通过 MCOL 和 SCOL 分别处理变动和稳态数据,列存表支持基于投影的快速扫描,减少不必要的数据访问。采用切片存储基于列分块预加载,利用向量化计算实现批量运算和查询加速。

索引:采用高效的 B-Tree 结构支持唯一和非唯一索引。支持多种索引扫描方式,包括全索引扫描、快速全扫描、范围扫描、唯一扫描及跳跃扫描,提升不同查询条件下性能表现。同时支持函数索引,直接对表达式计算结果进行索引,增强查询效率。

 

访问过程中,YashanDB 利用缓存机制(如数据缓存、内存共享池)减少物理 IO,结合同步刷盘和后台检查点任务保障数据持久性和一致性。

5. 面向多部署形态的数据类型适配

YashanDB 支持单机部署、分布式集群和共享集群部署,不同部署形态下数据类型存储和访问有所区别:

 

单机部署:主要利用段页式存储结构,适用于 OLTP 场景,数据类型支持完备,事务 ACID 特性保证。

分布式部署:引入了元数据节点协调执行计划生成,数据节点负责实际存储,保证跨节点数据一致性。数据类型支持基于存储引擎对接物理数据,多版本并发和事务隔离跨节点透明。

共享集群部署:基于共享存储和共享缓存技术,实现多个实例对同一份底层数据的强一致访问。对于多数据类型的支持,采用全局资源管理(GRC, GCS, GLS)协调各实例对数据的并发访问,确保不同数据类型存储格式下的数据访问一致和同步。

 

6. 技术建议

 

合理选择表组织方式。针对事务频繁更新的业务首选行存表(HEAP),面向大规模分析的历史稳定数据使用列存表(LSC)提升查询性能。

管理变长和大对象列,控制变长字段长度,合理使用 LOB 分离存储以优化存储和查询效率。

根据数据访问特性,配置合适的存储块大小和表空间类型,结合 PCT FREE 和段空间管理减少存储空间碎片和行迁移。

设计完善索引策略,合理利用 BTree 索引扫描方式及函数索引,提升多样查询场景下的数据访问性能。

开启和维护统计信息,基于数据类型分布统计调整优化器,提高执行计划的选择合理性,适配多数据类型查询优化。

利用分区技术减小大数据量操作的范围,结合数据类型特性优化存储和访问热数据与冷数据的分布。

在分布式和共享集群部署中,合理配置实例和节点类型,保障不同数据类型的一致性读写和高可用。

 

结论

YashanDB 通过丰富完备的数据类型支持、高度模块化的存储引擎设计和多种数据存储结构,提供了多样化、高性能的数据类型存储能力。其基于多版本并发控制、压缩编码优化及分布式事务管理等技术,实现了对复杂和多样化业务场景的支持。随着数据规模的持续增长和业务对数据实时性与一致性的更高要求,YashanDB 将持续优化其数据类型存储与访问技术,提升数据库底层能力,为多场景数据管理提供坚实基础,推动企业数字化转型与创新。

用户头像

还未添加个人签名 2025-04-09 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB数据库如何支持多种数据类型的存储_数据库砖家_InfoQ写作社区