BlockDB 是什么
BlockDB 是一个逻辑数据库层。它底层管理和操作 MySQL 协议的 OLTP 物理数据库,上层通过两层表模型,把数据抽象为可编程的逻辑表,并为不同类型的逻辑表提供各自的读写 API。用户不与物理存储直接打交道,而是通过语义化接口操作逻辑表。逻辑数据库层
BlockDB 的本质是一层”逻辑数据库”:- 底层:管理和操作 MySQL 协议的 OLTP 物理在线数据库。
- 逻辑层:定义逻辑表、组织映射到物理表、屏蔽存储细节,向上提供统一的语义化接口。
两层模型与三类逻辑表
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,让用户按数据形态(行级 / 区块 / 时间)选择最合适的模型。
- 数据模型:Table / BlockTable / TimeTable 与影子表机制。
- Block State 与 Block Event 表:两种链上语义表模型。
- 写入与事件订阅:实时写 / 批量写与订阅。
- API 总览:完整服务与方法。
- 架构介绍:代码层面的组件与实现。