本指南旨在帮助数据组同学在 3 分钟内掌握
blockdb-py SDK 的核心使用方法。通过本 SDK,你可以直接在 Notebook 或本地脚本中以纯 Python 原生对象操作 BlockDB,平台全域只暴露 SDK API,不暴露原始 SQL。
3 分钟极速热身
在 Chaintable 中,无论是普通在线表(L1)还是区块链特化表(L2),其核心开发范式均为:「通过构造器传入表名创建实例 -> 调用语义化方法」。所有查询方法均返回标准的 Pythondict 或 list[dict],可直接无缝喂给 pandas.DataFrame。
核心数据业务场景 Cookbook
场景 1 — 全表扫描与大规模条件检索 (L1 表)
日常分析中,当你需要从一张大规模 L1 在线表中捞取特定条件的数据时,SDK 提供了两套依据数据量级分流的精准”姿势”:- 最佳实践:大表(>10万行)检索必须走
scan_iter。另外,传入的 SQL 字符串**结尾绝不能带有分号;**,系统不支持多条 SQL 拼接执行。
场景 2 — 物理时序状态查询与级联写入 (TimeTable)
针对随物理挂钟时间(而非区块高度)动态变化的指标(如:代币分钟喂价、每分钟 TVL 快照),BlockDB 提供了特化的TimeTable,其时间桶固定为 60 秒。
核心特性:向后取整,秒归零
不管你传入的业务时间是17:04:35 还是 17:04:59,SDK 内部在读写时都会自动将其进位并归到 17:05:00 这个固定的分钟桶。这确保了分布式计算下,所有端到端的读写口径天然对齐。
- 手动回填后门:如果需要补录大量的历史时序数据,可以通过 L1 普通表的
upsert_rows接口直接灌入物理底层,TimeTable 的后台引擎会自动触发异步计算,将历史快照重算并刷新到latest视图中。
高阶参数与性能调优白皮书
1. 写入权衡:sync=True vs sync=False
所有写入方法(upsert_rows, delete_rows 等)均支持 sync 参数控制行为:
sync=True(默认):等待 BlockDB 服务端物理落盘并确认后再返回。慢,但具备强一致性。 适用于单测、交互式分析、或下一步紧接着要读取该结果的依赖任务。sync=False:Fire-and-forget(触发即忘),提交完立刻拿job_id返回,由后台异步处理。极快,吞吐量爆炸。 适用于大规模历史区块清洗和百万级批回填。
2. 读写黄金定律
- 杜绝 For 循环点查:需要查询 个主键时,**永远使用
batch_get_rows([...])**,严禁在for循环中重复调用get_row()。一次批量 RPC 与 次独立 RPC 的时延差距可达数个数量级。
沙箱 Debug 模式(写入意图预演)
为了防止处于联调期的实验脚本往生产环境脏写数据,SDK 内置了只影响写入操作的Debug 熔断开关。
如何开启
可以通过配置系统环境变量(推荐,支持 GitOps 统一管控)或在代码运行时强行切换:行为特征
开启后,任何写入函数均不会对 BlockDB 的实际物理数据产生任何修改。- 读操作(如
get_row,scan)照常执行,读取真实生产数据。 - 所有写入操作全部被拦截,并固定返回
job_id = "debug-job"。 - 写入的真实内容(操作表名、行数、前 10 行样例)会被序列化为标准 JSON,转发给平台的日志展示系统。允许你在正式跑数前,肉眼自检”我究竟会往数据库里写进什么”。