暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

KingbaseES 的数据到底存在哪?揭秘国产数据库的存储底层逻辑

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者比较重要的内容,希望大家能够喜欢,不足之处请大家多宝贵地意见,我们一起提升,守住自己的饭碗。

关注公众号,技术道路不迷路

 

数据库存储结构是数据持久化与高效管理的核心基础,KingbaseES数据库采用“物理存储为载体、逻辑存储为组织”的双层架构,通过明确的映射关系实现数据的可靠存储、高效访问与灵活管理。物理存储结构定义数据在磁盘上的实际文件形态,逻辑存储结构则从数据库层面优化数据组织方式,二者协同保障数据库的稳定运行。

一、物理存储结构

KingbaseES数据库初始化时会创建一个数据库实例,自动生成security、template0、template1和kingbase四个默认数据库,实例管理的所有数据均以操作系统文件形式存储于磁盘,其结构可在操作系统级别直接查看。数据库集簇的配置文件、数据文件等核心资源通常集中存储在名为data的目录中,不同实例的数据集簇可在同一主机共存,实现资源隔离。

1.1 data目录核心构成

data目录是物理存储的核心载体,包含必要子目录、控制文件、配置文件等,部分文件支持自定义存储路径,具体可分为必要内容与可选内容两类。

必要内容

此类文件/目录是数据库实例正常运行的基础,缺一不可,核心包括:

  • • sys_version:记录KingbaseES主版本号的标识文件;
  • • base:存储各数据库对应子目录的核心数据目录,子目录名称为数据库在sys_database中的OID,目录内包含对应数据库的持久化数据、临时数据及系统目录;
  • • global:存储集簇级表(如sys_database)及关键控制文件sys_control,sys_control记录数据集簇标识符、版本、检查点信息、块大小等核心参数;
  • • 日志相关目录:包括存储预写日志(WAL)的sys_wal、事务提交状态数据的sys_xact、多事务状态数据(共享行锁)的sys_multixact,以及sys_commit_ts(提交时间戳)、sys_csnlog(提交序列号)、sys_notify(LISTEN/NOTIFY状态)、sys_serial(可序列化事务信息)、sys_twophase(预备事务状态)等子目录,均为数据一致性与事务恢复的关键;
  • • 控制与辅助文件:current_logfiles(记录当前写入的日志文件)、kingbase.auto.conf(存储ALTER SYSTEM设置的配置参数)、kingbase.opts(记录服务器末次启动的命令行参数)、kingbase.pid(锁文件,存储进程ID、数据目录路径、启动时间戳等信息,服务器关闭后自动删除);
  • • 其他辅助目录:sys_dynshmem(动态共享内存文件)、sys_logical(逻辑复制状态数据)、sys_replslot(复制槽数据)、sys_snapshots(导出快照)、sys_stat(统计信息永久文件)、sys_stat_tmp(统计信息临时文件)、sys_tblspc(指向表空间目录的符号链接)。

可选内容

此类文件用于配置管理与日志存储,支持自定义存储路径,核心包括:

  • • kingbase.conf:用户自定义配置参数的核心文件;
  • • sys_hba.conf:配置客户端认证方式的关键文件;
  • • sys_ident.conf:配置客户端认证所需用户名映射的文件;
  • • sys_log:存储数据库在线日志文件的子目录,默认存储用户SQL操作及数据库运行事件。

1.2 核心物理文件类型

数据文件

数据文件以数据块(又称页面)为基本组织单元,默认大小为8KB,所有I/O操作均以数据块为单位执行,存储表、索引、存储过程、视图等数据库对象。每个表和索引对应独立的数据文件,普通关系文件以filenode号命名(可在sys_class.relfilenode中查询),临时关系文件以“tBBB_FFF”格式命名(BBB为后台会话ID,FFF为文件节点号)。

数据文件存在多分支扩展:空闲空间映射分支(后缀_fsm,记录可用空间信息)、可见性映射分支(后缀_vm,跟踪含非死亡元组的页面),非日志记录表/索引还包含初始化分支(后缀_init)。当表或索引超过1GB时,会自动分割为1GB大小的段文件,命名格式为filenode、filenode.1、filenode.2等,段尺寸可通过编译时配置选项调整。需注意,文件节点号与表OID未必一致,TRUNCATE、REINDEX等操作可能修改文件节点号,部分系统目录的实际文件节点号需通过sys_relation_filenode()函数获取。

控制文件

控制文件记录数据库实例运行的核心控制信息,分散于data目录及子目录中,除前文提及的sys_control、current_logfiles、kingbase.opts、kingbase.pid外,sys_logical(逻辑复制状态)也属于控制类目录,其内容直接影响数据库启动、事务恢复及复制功能的正常运行。

日志文件

日志文件记录数据库历史操作与状态信息,是数据恢复、故障排查的核心依据,主要分为三类:

  • • WAL日志:存储于sys_wal目录,采用预写式日志机制,确保数据修改先写入日志再更新数据文件,可减少磁盘写次数、保证数据页完整性,同时支持在线备份与任意时间点恢复,其配置通过kingbase.conf文件相关参数调整;
  • • 事务日志:包括sys_xact、sys_csnlog、sys_multixact等目录,记录事务状态、提交序列号、共享行锁等信息,是保障数据一致性的关键;
  • • 在线日志:默认存储于sys_log目录,以文本形式记录用户SQL操作及数据库运行事件,用于状态监控与异常分析。

配置文件

核心配置文件用于数据库实例与客户端认证管理:kingbase.conf存储用户自定义参数,kingbase.auto.conf自动记录ALTER SYSTEM修改的配置参数,sys_hba.conf与sys_ident.conf分别用于配置客户端认证方式与用户名映射。

二、逻辑存储结构

逻辑存储结构从数据库层面组织与管理对象,通过表空间、段、数据块的层级结构,将逻辑对象映射至物理文件,实现数据存储的灵活优化与空间管理。其核心逻辑单元从大到小依次为表空间、段、数据块,与物理存储形成明确对应关系。

2.1 表空间

表空间定义数据库对象在文件系统中的存储位置,是逻辑存储与物理存储的桥梁。创建数据库时会自动生成系统表空间与默认表空间,用户可通过CREATE TABLESPACE语句创建自定义表空间,通过DROP TABLESPACE语句删除,创建对象时可通过TABLESPACE子句指定存储位置,未指定则使用默认表空间。

表空间具备两大核心价值:一是空间扩展,当初始化集簇所在分区空间不足时,可在其他分区创建表空间缓解存储压力;二是性能优化,可将高频访问的索引存储于高速存储设备(如固态硬盘),将归档数据存储于低成本低速设备。需注意,表空间依赖主数据目录的元数据,属于数据集簇的一部分,无法单独备份或附加至其他集簇,丢失表空间可能导致集簇不可读或无法启动。

2.2 段

段是表、索引等逻辑对象的存储载体,一个段对应一个物理文件,仅存储单个关系的部分数据。表空间中的每个关系(表、索引)会被拆分为多个段,段内部再划分为若干数据块,实现数据的分块管理与高效访问。

2.3 数据块

数据块是逻辑存储的最小管理单元,与物理存储中的页面完全对应,默认大小8KB,可在实例初始化时指定,且需为操作系统数据块大小的整数倍。数据库的所有数据读写操作均以数据块为单位,是连接逻辑对象与物理文件的最小载体。

三、存储结构的协同关系

KingbaseES的物理与逻辑存储结构形成紧密协同:逻辑层面,表空间规划存储位置,段拆分关系数据,数据块作为最小IO单元;物理层面,表空间对应sys_tblspc中的符号链接指向的目录,段对应具体的数据文件,数据块对应物理文件中的8KB页面。这种架构既保证了数据在磁盘上的可靠存储,又通过逻辑组织实现了存储资源的灵活分配与性能优化,为数据库的稳定运行与高效访问提供了核心支撑。

 



END
往期文章回顾

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流AI、数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。



文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论