今天早些时候 @heliuslabs 推出了一个新的 RPC 方法,getTransactionsForAddress (gTFA) 让我们来谈谈它的工作原理 Solana 交易通常引用 6-10 个账户(最多可达 ~256 个) 当你查询 "给我账户 X 的历史记录" 时,你是在请求 RPC 扫描交易并找到那些在其账户列表中包含 X 的交易 这本质上是在大海捞针 你不能简单地在 "accounts" 数组上添加一个标准索引,因为数据库在索引可变长度数组时会遇到困难 解决方案:我们构建了自己的索引,每个唯一的 (transaction, account) 对都有一个条目 这可不是一件小事——目前大约有 ~4930 亿笔交易(还在增长) 我们的索引目前持有超过 2.3 万亿 (!) 行 尽管规模庞大,P50 查找时间在生产负载下约为 ~8 毫秒 我们还有许多其他索引来支持按槽、时间、状态等进行查找 所有这些都运行在专门构建的裸金属主机上,配备了数PB的顶级 NVMEs,分布在多个区域 总结一下——我们受苦是为了让你不必受苦 享受吧