遍历分类帐

时间:2018-10-15 14:02:54

标签: corda

我有一个cordapp设置,可在每次交易中上传附件。附件是与tx相关的唯一标识符列表的压缩文件。我正在尝试实现禁止相同的唯一标识符在后续事务中再次出现的逻辑。假设我有一个带有附件列表A,B,C,D,E的初始TX,并且它通过了。然后我有带有附件F,G,H的Tx 2a和带有附件C,F,G,H的Tx 2b。我希望2a被接受,但2b被拒绝。

我正在尝试找出存储和查询标识符历史记录的最佳方法。我知道附件将保存到tx历史记录中,但是随着我们的扩展,遍历分类帐并打开/读取所有附件以确保没有重复项显得非常耗时(附件更可能列出数千个唯一标识符,而不是5个)。

在db-甚至包括Vault的账本外部分-上创建一个表,该表仅包含已使用的所有ID,是否可行?负责检查冗余的节点可以读取传入的附件,查询表,检查冗余,对TX签名,然后将新的ID插入表中?还是我们可以做些更好的事情涉及实际遍历分类帐?

谢谢

1 个答案:

答案 0 :(得分:1)

假设没有数以百万计的标识符,并且如果您不介意过去的所有标识符都在该州的当前版本中,那么您可以在州内Set内累积它们吗? Set将确保没有重复。这种方法的好处是您可以在合同内执行检查逻辑。

如果您不在乎在合同中执行这些检查,则可以执行建议的一种方法:

  • “遍历分类帐”实际上只是执行一堆效率低下的数据库查询查询,正如您正确指出的那样
  • 您建议的另一种方法似乎是个好主意。保留带有标识符的分类帐外数据库表。当前正在使用一项功能,以使其变得更加容易。同时,您可以使用ServiceHub.jdbcConnection对数据库执行查询。

您选择的哪一个确实取决于用例的其他方面。

您可以尝试的一件事是在状态对象内维护一个Bloom过滤器。这样,您将获得空间高效的数据结构和快速设置成员资格检查。每次添加标识符时,您都必须更新过滤器。可能是要看的东西。

欢呼