数据存储问题2

/data/1/cluster_name/sstable/block_file,请详细讲解下block_file文件的使用、文件格式、数据如何组织存储等信息

1 个赞

@论坛小助手

根据文档库中的信息,以下是关于 block_file 文件的详细讲解:

1. Block File 的使用

  • 在 OceanBase 数据库中,block_file 是用于存储数据的文件。它位于 /OBServer 节点安装目录/store/sstable 目录下,并在 OBServer 节点启动后创建。
  • block_file 文件的大小由配置项 datafile_sizedatafile_disk_percentage 控制(参考:OBServer 节点安装目录结构 → 数据文件目录)。

2. Block File 的文件格式

  • 具体的文件格式未在文档中明确提及,但可以推测其内部以宏块(Macro Block)为单位组织数据,每个宏块大小为 2 MB。
  • 宏块内部又划分出很多个 16 KB(压缩前的大小)大小的微块(Micro Block),而每个微块里面包含多个行(Row)。

3. 数据如何组织存储

  • 宏块与微块:OceanBase 数据库的数据文件以宏块(Macro Block)为单位组织数据。每个宏块占用 2 MB 空间,宏块内包含一个或者多个微块,每个微块内包含一行或者多行数据(参考:表存储)。
  • 聚集索引表模型:OceanBase 数据库中使用聚集索引表模型来组织数据,即存储时按照表的主键顺序来存储数据。当往表中插入一行数据时,会按照其主键的顺序插入到表中(参考:表的组织形式)。
  • 列存储顺序:每行存储的列顺序是一样的。OceanBase 数据库通常是按照建表时的列顺序来存储,新加的列都放在最后一列存储(参考:表的组织形式)。

4. 动态扩容机制

  • 对于 V4.2.0 之前的版本,系统主要采用预分配的方式,将一部分磁盘空间预留给数据文件,这种方式虽然保证了数据文件占有一段尽可能连续的磁盘空间,但也导致了磁盘空间的浪费。
  • 从 V4.2.0 版本开始,OceanBase 数据库引入了数据文件渐进式使用磁盘空间的用户配置选项,即系统先预分配一个合理的磁盘大小给数据文件,再根据磁盘的实际使用情况和用户的配置进行自动扩容(参考:配置磁盘数据文件的动态扩容 → 背景信息)。

综上所述,block_file 文件是 OceanBase 数据库中用于存储数据的核心文件,其内部以宏块和微块的形式组织数据,并且支持动态扩容以优化磁盘空间的使用。

检索到的文档如下:

  1. 配置磁盘数据文件的动态扩容
  2. 集群管理 FAQ
  3. 表存储
  4. 通用语法
  5. OBServer 节点安装目录结构
  6. 数据库对象存储
  7. oceanbase.DBA_OB_ZONE_STORAGE
  8. 关于表
  9. 使用 MySQL 租户做常见数据库开发
2 个赞