读写数据
BlockDB 的 Python SDK 把三类逻辑表封装成对应的类:普通表Table、Block 表 BlockTable、Time 表 TimeTable。每个类都是薄封装,方法最终委托到底层 gRPC,查询方法返回 Python dict 或 list[dict],写入方法返回 job_id。
三类表模型与选型
选择哪种表模型,取决于你的数据形态:普通表处理行级数据,Block 表处理随区块高度的状态与事件,Time 表处理随物理时间变化的指标。详见数据模型。
普通表(Table)
针对行级数据,按主键读写与全表扫描:大表检索请用
scan_iter(流式逐行),避免 list(scan_iter(...)) 一次性吃光内存。传入的 SQL 以流式方式执行,可处理百万级结果集。Block 表(BlockTable)
针对区块维度的状态与事件,按区块锚点读写:get_state / get_event 会以 current_block 为锚点,自动注入 height ≤ 目标高度,返回最近一次不超过该高度的快照。当前区块高度需不超过表的共识高度才能读到正确结果,详见Block State 与 Block Event 表。
Time 表(TimeTable)
针对随物理时间变化的指标,按时间桶读写:TimeTable 在 SDK 层自动完成 60 秒时间桶对齐:17:04:35 对齐到 17:05:00,读写口径一致。详见Time 表。
进阶写入
-
条件更新:普通表
upsert_rows支持condition=(列名, "if_smaller"/"if_larger"),仅当新值更小/更大时才更新,适合余额、高度等单调值: -
批量写:百万行级别的回填走 S3 中转的批量写接口,返回
job_id,可查询状态或取消。详见写入架构。