0

作为运行时升级的一部分,我试图提出一些实际的限制,即一个人有时间在一个块中完成多少存储迁移。

所以假设

  • 在 Substrate 设置中有 N 个验证器运行当前的共识系统,而不是作为平行链
  • 节点在体面的民用工作站上运行
  • 迁移代码主要是执行数据库读/写对的序列,以及正常的关联编码/解码逻辑
  • 每个读/写对中的数据大小相当稳定,平均为 M 字节

令 f(N, M) 为当没有其他外部处理时,您将能够在单个块中安全地执行的读取、写入对的数量。

对 f(N,M) 的样子有什么好的猜测?只是对 N(例如 40)和 M(例如 32、1024)的流行值的一些不错的答案。

我问,因为围绕此的约束必须告知如何构建模块。

4

1 回答 1

1

首先,为什么 N 在这里相关?迁移可能发生在特定的区块中,并且约束是能够在区块时间内适应它。

为此,我建议进行一些微基准测试(在 WASM 中)并估算每个操作的成本。把它放在你想要的阻塞时间旁边,你应该有一个很好的数字。我会进一步减少它以确保安全。

请注意,数据迁移的类型在这里很重要;如果您要存储值,这相当容易,我认为您应该没问题,因为瓶颈可能是解码,而不是散列。如果您的值(例如,一个大的 vec)已经大到无法在一个块中读取+写入一次,那么您将遇到更大的问题。使用地图,您必须考虑到您将进行更多的状态查找,因此整个过程有所不同。

于 2020-01-31T15:54:39.307 回答