将一百万行从平面文件放入区块链



我有一个平面文件,每行都包含记录,如

AX101 12345 PQR 101
AX102 18390 XYZ 091
AX101 81249 PQR 871

我的设置在Hyperledger上的网络中连接了一些机器,其中包括流浪者和码头工人。

测试1
对于此测试,我只运行一个验证对等方,该对等方应读取包含超过一百万行的平面文件,并将每一行作为一个新块。其目的是测试这样做的速度。实现这一目标的最佳方法是什么?

方法1:代码可能在GoLang中,位于智能合约中
方法2:另一种语言的独立"阅读器",通过API将数据发送到验证对等方(我认为会更慢)


测试2
一旦(希望)所有数据都在区块链上,我需要解析所有条目,比如AX1001,速度不是问题,但拾取所有条目是问题。

任何指针都会有帮助!

这个答案假设您谈论的是Hyperledger结构:

无法避免编写链代码(智能合约)将数据添加到数据库中。区块链中的所有数据都归创建它的链代码所有,只能由创建它的链路代码访问。没有共享数据的概念,也没有简单地将数据写入区块链的概念。因此,您需要执行方法2,并通过其"添加新记录"方法(您将创建该方法)将数据发送到链代码。

要访问数据,您需要为链代码创建一个查询方法。在测试2中,您可以通过存储数据的方式来控制解析的速度。这里有链代码可用的数据库API的Godoc文档:https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim

测试1
方法1不是最佳解决方案的原因有几个。首先,如果您将尝试从智能合约在GoLang中运行初始导入,则此导入将作为单个事务执行
无论在哪里启动此导入(在链代码的"Init"或"Invoke"方法中),在这两种情况下,您都会遇到"超时"问题
第二,这种方法破坏了区块链的理念。智能合约不应该从外部源(文件)中提取数据,因为任何人都可以修改它们,结果整个链将进入不一致状态。

测试2
Hyperledger不是为数据库而设计的,"解析所有条目,例如AX1001"并不是它的主要目标。所提供的描述非常有限,但是对于如何"模仿"这种行为有几个想法:

可能的选项1:您可以尝试使用"RANGE_QUERY_STATE"-只有当您尝试通过字符串"AX1001…."的第一部分运行搜索时,它才会起作用

可能的选项2:使用"AX1001"作为键,使用{"12345 PQR 101"、"81249 PQR 871"}作为值。这样的数据结构可以在导入时构建。仅当您不打算使用字符串的其他部分运行查询时才有效。

最新更新