Skip to main content

BlockDB 是什么

BlockDB 是一个逻辑数据库层。它底层管理和操作 MySQL 协议的 OLTP 物理数据库,上层通过两层表模型,把数据抽象为可编程的逻辑表,并为不同类型的逻辑表提供各自的读写 API。用户不与物理存储直接打交道,而是通过语义化接口操作逻辑表。

逻辑数据库层

BlockDB 的本质是一层”逻辑数据库”:
  • 底层:管理和操作 MySQL 协议的 OLTP 物理在线数据库。
  • 逻辑层:定义逻辑表、组织映射到物理表、屏蔽存储细节,向上提供统一的语义化接口。
用户无需直接书写 SQL 管理物理表。BlockDB 通过**元数据服务(Meta)**管理逻辑表及其列、索引定义,并将逻辑表落到实际的存储引擎上。

两层模型与三类逻辑表

BlockDB 用两层模型组织表,共提供三类逻辑表:

普通表(Table)

普通表直接映射到一张物理在线表(1:1),用于存储非链上的业务数据,或链上数据处理后的高价值数据,提供行级、语义化的读写与扫描 API。

业务抽象表(Block State / Block Event / Time 表)

业务抽象表本身不直接对应一张物理表。创建时,BlockDB 会在底层自动派生多张协作的物理表(影子表机制),用于维护最新值、历史快照与处理进度: 不同类型的业务抽象表,提供不同的链上语义 API(见下节)。

各类逻辑表的读写 API

BlockDB 针对不同类型的逻辑表,定义了各自的访问接口(来自 proto/blockdb/v1/): 此外,还有面向大批量数据的批量写入能力:通过 BatchWriteService(InitWriteJob / CommitWriteJob / CancelWriteJob)以 S3 中转实现大规模异步写入。具体架构与提交流程详见大批量写。

元数据管理

BlockDB 通过元数据服务(Meta)管理逻辑表的生命周期与定义,包含三个子服务: 每个逻辑表都带有**类型(type)**标记——state / event / time。BlockDB 据此判断它是一张普通表还是某种业务抽象表,以及如何映射到物理存储。Block 表还带有 chain_id 与起始高度等链上语义配置。

小结

  • BlockDB 是一个逻辑数据库层,管理 MySQL 协议数据库。
  • 通过两层模型提供三类逻辑表:普通表、Block State / Event 表、Time 表。
  • 每类逻辑表都有各自的读写 API,让用户按数据形态(行级 / 区块 / 时间)选择最合适的模型。
继续阅读: