Blockchain 将100万行从平面文件放入区块链

Blockchain 将100万行从平面文件放入区块链,blockchain,ethereum,hyperledger,Blockchain,Ethereum,Hyperledger,我有一个平面文件,每行都包含 AX101 12345 PQR 101 AX102 18390 XYZ 091 AX101 81249 PQR 871 我的设置有几个机器与vagrant和docker在Hyperledger的网络中连接 测试1 对于这个测试,我只运行一个验证对等机,它应该读取包含超过百万行的平面文件,并将每一行作为一个新块。目的是测试这样做的速度。实现这一目标的最佳方式是什么 方法1:代码可能位于智能合约内的GoLang中 方法2:另一种语言的独立“阅读器”,通过API将数据发

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

AX101 12345 PQR 101
AX102 18390 XYZ 091
AX101 81249 PQR 871
我的设置有几个机器与vagrant和docker在Hyperledger的网络中连接

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

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


测试2
一旦(希望如此)当所有数据都在区块链上时,我需要解析所有条目,比如说AX101,速度在这里不是一个问题,但拾取所有条目是一个问题


任何指点都会有帮助

此答案假设您正在谈论Hyperledger结构:

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


要访问数据,您需要为链码创建一个查询方法。您可以通过存储数据的方式来控制测试2中解析的速度。这里有链码可用的数据库API的Godoc文档:

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

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

可能的选择1: 您可以尝试使用“范围\查询\状态”-仅当您尝试按字符串“AX101…”的第一部分运行搜索时,它才会起作用

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

谢谢你,谢尔盖。我同意这种方法完全破坏了区块链的概念,但我正在一个安全的环境中测试这一点,其中平面文件是通过可信机制生成的。主要的想法是测试目前的性能。关于测试2,比特币网络不是这样做的吗。。分析某个公共广播的分类账信息,并找出可用余额?@bitxor你应该对此有点不同;Hyperledger使用区块链记录其交易,旁边是RoxDB,一个键值存储,用于保存更复杂的数据结构,您可以通过“调用交易”将其放入其中。可用余额的措辞让我想到了加密货币,这是Hyperledger的一个可能用途,但非常小。在这种情况下,您可以按照Sergey在选项2中的建议,将公共标识符存储为键,将余额存储为值。是的,现在可以在Hyperledger中尝试,但在以太坊中也可以实现这一点。我会尝试你的建议并向你汇报。