3

次のようなレコードを含む各行のフラット ファイルがあります。

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

私のセットアップには、vagrant と docker を使用して Hyperledger 上のネットワークに接続されたいくつかのマシンがあります。

テスト 1
このテストでは、100 万を超える行を含むフラット ファイルを読み取り、各行を新しいブロックとして配置する検証ピアを 1 つだけ実行しています。その意図は、そうするための速度をテストすることです。これを達成するための最良の方法は何ですか?

アプローチ1:コードはスマートコントラクト内にあるGoLangにある可能性があります
アプローチ2:APIを介してデータを検証ピアに送信する別の言語の別の「リーダー」(遅いと思います)


テスト 2
(できれば) すべてのデータがブロックチェーン上にある場合、たとえば AX101 のすべてのエントリを解析する必要があります。ここでは速度は問題ではありませんが、すべてのエントリを取得することは重要です。

どんなポインタも役に立ちます!

4

2 に答える 2

1

テスト 1
アプローチ 1 が最適なソリューションではない理由はいくつかあります。まず、スマート コントラクトから GoLang で初期インポートを実行しようとすると、このインポートは 1 つのトランザクションとして実行されます。
このインポートが開始される場所 (チェーンコードの「Init」または「Invoke」メソッド) は関係ありません。どちらの場合も、「タイムアウト」の問題に遭遇します。
2 つ目 - このアプローチは、ブロックチェーンのアイデアを台無しにします。誰でも変更できるため、スマート コントラクトは外部ソース (ファイル) からデータを取得しないでください。その結果、チェーン全体が一貫性のない状態になります。

テスト 2
Hyperledger はデータベースとして設計されておらず、「たとえば AX101 のすべてのエントリを解析する」ことが主な目標ではありません。提供される説明は非常に限られていますが、この動作を「エミュレート」する方法についていくつかのアイデアがあります。

可能なオプション 1: 「RANGE_QUERY_STATE」を使用してみてください。これは、文字列「AX101…」の最初の部分で検索を実行しようとした場合にのみ機能します。</p>

可能なオプション 2: キーとして "AX101" を使用し、値として {"12345 PQR 101", "81249 PQR 871"} を使用します。このようなデータ構造は、インポート時に構築できます。文字列の他の部分を使用してクエリを実行しない場合にのみ機能します。

于 2016-05-27T19:54:19.200 に答える
1

この回答は、Hyperledger ファブリックについて話していることを前提としています。

データベースにデータを追加するためのチェーンコード (スマート コントラクト) の記述を回避する方法はありません。ブロックチェーン内のすべてのデータは、それを作成したチェーンコードによって所有され、それを作成したチェーンコードによってのみアクセスできます。データを共有したり、単にデータをブロックチェーンに書き込むという概念はありません。したがって、アプローチ 2 を実行し、「新しいレコードを追加」メソッド (作成する) を介してデータをチェーンコードに送信する必要があります。

データにアクセスするには、チェーンコードのクエリ メソッドを作成します。テスト 2 では、データの格納方法によって解析速度を制御できます。チェーンコードで使用できるデータベース API の Godoc ドキュメントは、https ://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim にあります。

于 2016-05-27T19:20:13.677 に答える