从零开始学习 YashanDB 数据库架构与功能实现
随着数据规模和业务复杂性的不断提升,数据库系统面临着性能瓶颈、数据一致性保障和高可用性实现等多重挑战。YashanDB 作为一款具有多样部署架构和丰富功能模块的现代数据库产品,提供了灵活的解决方案以应对上述挑战。本文旨在系统性地解析 YashanDB 的核心架构设计和关键功能实现,帮助技术人员全面理解其内在机制并应用于实际业务场景。内容涵盖系统部署架构、存储结构、事务与并发控制、SQL 引擎、PL 引擎、高可用、备份恢复及安全管理等方面。
YashanDB 部署架构
YashanDB 支持三种部署形态:单机部署、分布式集群部署和共享集群部署,以满足不同规模和需求的应用。
单机部署
单机部署版式中,通常两台服务器分别承载主实例及备实例,主备复制机制确保数据同步和故障自动切换。此形态适合大多数普通业务场景,具备易用性和高可用性。
分布式集群部署
分布式部署通过多角色划分(MN、CN、DN 节点)实现数据与计算分片,采用 Shared-Nothing 架构以线性扩展处理能力。MN 节点负责元数据和分布式事务;CN 节点承担 SQL 请求协调与执行计划生成;DN 节点存储数据并执行 SQL 计划。该模式适用于海量数据分析和高并发场景。
共享集群部署
共享集群在硬件层依赖共享存储,结合 YashanDB 聚合内存技术,实现多实例多写的强一致性访问。核心组件包括 Yashan 集群内核(YCK)、集群服务(YCS)和崖山文件系统(YFS)。共享集群适合高端核心交易场景,提供高可用、高性能和强扩展能力。
存储引擎设计
存储引擎是 YashanDB 的核心组成部分,支持多种存储结构以匹配不同业务需求,保障事务处理性能与实时分析能力。
存储结构种类
HEAP:无序行存储,适合高速写入操作。
BTREE:基于 B 树的数据结构,支持有序索引。
MCOL(可变列式存储):利用段页式管理,支持原地更新和字典编码,实现在线事务与分析处理(HTAP)。
SCOL(稳态列式存储):采用切片式存储,具备压缩和列编码,优化海量冷数据的分析性能。
表类型
行存表采用 HEAP 存储,针对联机事务处理(OLTP)优化。
TAC 表采用 MCOL 存储,支持混合事务与分析处理。
LSC 表利用 MCOL 与 SCOL 结构存储热冷数据,针对联机分析处理(OLAP)场景。
表空间与空间管理
表空间作为逻辑存储单元,通过段页式或对象式管理进行空间分配和回收。段页式表空间中包含数据段、索引段和回滚段,采用水位线和三层空闲度管理以提升空间利用及写入并发。
事务机制与并发控制
YashanDB 支持 ACID 事务特性及多版本并发控制(MVCC),保证数据一致性、事务隔离及并发性能优化。
多版本并发控制(MVCC)
基于 SCN(系统变更编号)实现语句级与事务级读一致性,使用 Undo 表空间保存历史版本,读写操作互不阻塞,能实时生成对查询一致的版本快照。
事务隔离级别
读已提交(Read Committed)为默认隔离级别,避免脏读,允许不可重复读。
可串行化(Serializable)支持快照级串行化,避免脏读、不可重复读和幻读,含写冲突检测。
锁机制与死锁管理
行锁采用基于数据页的事务槽位登记机制,仅支持排他锁。表锁分为共享锁与排他锁,同时支持死锁检测与自动解除,保障并发执行稳定。
SQL 引擎与执行优化
SQL 引擎包含解析器、优化器与执行器三大组件,提供丰富的 SQL 语法支持与高效执行能力。
SQL 执行流程
解析:完成词法、语法及语义分析,生成抽象语法树。
校验:权限校验及语义合理性验证。
静态重写:基于关系代数规则进行等价变换。
优化:成本基优化器(CBO)运用统计信息进行代价计算,生成最优执行计划。
动态重写:基于运行时环境进一步转换计划。
执行:执行算子迭代处理数据,支持并行与向量化计算。
执行算子及优化策略
支持多种算子包括扫描、连接、排序、聚集,同时利用 Hint 提示、统计信息和并行度配置提升性能。SQL 执行基于火山和向量化引擎,批量处理提高吞吐量。
PL 引擎与程序化支持
PL 引擎为用户提供数据库内存储过程、函数、触发器、包等开发平台,支持复合编程结构与流程控制,提高开发效率与性能监控能力。
PL 对象类型
匿名块:即时执行,无持久化。
存储过程:具名可调用的程序单元。
自定义函数:返回值函数,可在 SQL 中调用。
外置函数:通过 C/Java 动态库扩展功能。
程序包:相关过程和变量集合,支持封装。
触发器:事件驱动自动执行的程序单元。
自定义类型:支持面向对象的数据建模。
定时任务:支持周期性后台执行。
高可用与备份恢复体系
为保障业务连续性,YashanDB 设计了全方位的高可用和备份恢复机制。
主备复制与切换
基于 redo 日志传输实现主库与备库数据同步,支持同步复制及异步复制三种保护模式。主备切换包括计划内切换(Switchover)与故障切换(Failover)。自动选主机制基于 Raft 和仲裁算法,支持多备库和一主一备场景。
备份恢复
支持全库备份、增量备份及归档备份。备份集整合控制文件、数据文件、Redo 日志和切片数据,支持物理恢复及基于时间点的恢复(PITR),保障灾难恢复能力。
安全管理架构
安全性涵盖用户身份认证、访问权限控制、数据加密、审计及反入侵措施。
用户与权限体系
采用基于角色的访问控制(RBAC),支持管理系统特权和对象访问权限,实现三权分立管理模式。支持密码策略、资源限制及账户安全。
认证机制
支持数据库本地认证和操作系统认证,包含密码复杂度、锁定策略及加密认证技术。
数据加密
支持表空间级和表级透明数据加密(TDE),以及备份集加密和网络传输加密,保障数据在存储及传输过程的机密性。
审计功能
支持系统权限、行为操作和角色审计,审计数据存储丰富,支持异步审计减低系统开销,实现安全追溯。
反入侵机制
机制包括 IP 黑白名单限制、连接监听与日志记录、保留连接资源保全管理权限。
技术建议
根据业务需求选择合适的部署架构,单机部署适用于中小规模应用,分布式部署支持海量数据处理,共享集群满足高性能及强一致性需求。
合理设计表空间和存储结构,结合 HEAP、MCOL 和 SCOL 的特性优化数据读写性能。
充分利用 MVCC 和事务隔离机制,保障数据一致性与并发性能平衡。
通过统计信息和 Hint 优化 SQL 性能,利用向量化计算提升批量处理效率。
集成 PL 语言编程方便封装复杂业务逻辑,提升数据库端处理能力。
实施主备复制和自动选主策略,实现业务高可用和快速故障恢复。
建立规范的备份恢复机制,确保数据安全,支持快照及时间点恢复。
构建全面安全管理体系,包括基于角色的授权、数据加密及细粒度审计。
结论
本文系统阐述了 YashanDB 数据库的架构设计和功能实现,包括多样化的部署形态、灵活高效的存储引擎、完备的事务控制机制、优化的 SQL 引擎以及强大的 PL 支持。通过科学的高可用架构及丰富安全管理功能,YashanDB 为现代业务提供了可靠且高性能的数据支撑。技术人员应结合具体业务需求,充分运用本文介绍的数据库原理和最佳实践,实现系统的持续稳定发展。推动数据库索引优化、事务并发调优及安全加固,是提升整体业务能力的关键。
评论