MVCCの最適化

Hyperledger Fabricデータベースでは、複数バージョンの同時実行性制御(MVCC)を使用して、二重支出とデータの不整合を回避します。

同じ状態が更新されると、新しいバージョンのレコードによって古いバージョンが上書きされます。ブロック内の同じキーを更新する同時リクエストがある場合は、MVCC_READ_CONFLICTエラーが生成される可能性があります。

転送、ミント、バーンおよびホールド操作のMVCCエラーを減らすために、トークン・チェーンコードのMVCC最適化を有効にできます。この最適化は、Oracle Blockchain Platformでのみ機能します。デフォルトでは、最適化は無効です。最適化を有効にするには、該当する次のステップを完了します。

  • CLI: ochain initコマンドでブール型-mまたは--enable_mvcc_optimizationパラメータを指定します。デフォルトでは、パラメータはfalseに設定されています。最適化を有効にするには、-m trueochain initコマンドラインに追加します。
  • Visual Studio Code: チェーンコードを作成する場合は、「チェーンコードの作成」ウィンドウで「MVCC最適化の有効化」を選択します。

ブロックチェーン・アプリケーション・ビルダーの以前のバージョンで作成されたチェーンコードで最適化を使用するには、次のステップを実行します:

  1. ブロックチェーン・アプリケーション・ビルダーの最新バージョンをインストールした後、CLIでのチェーンコード・プロジェクトのアップグレードおよびVisual Studio Codeでのチェーンコード・プロジェクトのアップグレードの説明に従ってチェーンコードをアップグレードします。
  2. チェーンコードのルート・フォルダにある.ochain.jsonファイルを編集して、enableMvccOptimizationtrueに設定します。
  3. チェーンコードを同期します。これにより、最適化が追加され、チェーンコードのルート・フォルダに2つの新しいフォルダ(statedbおよびtokens)が作成されます。同期の詳細は、「仕様ファイルの変更と生成されたソース・コードとの同期」および「仕様ファイルの変更と生成されたソース・コードとの同期」を参照してください。

MVCC_READ_CONFLICTエラーを回避する他の方法には、このエラーの生成時にクライアント・アプリケーションの再試行リクエストを指定したり、ブロックチェーン・ネットワークに送信される前にキューを使用してコンカレント・リクエストを取得したりなどがあります。詳細は、Hyperledger Fabricドキュメントの読取り/書込みセット・セマンティクスを参照してください。

ノート:

MVCC最適化は、Oracle Blockchain PlatformとHyperledger Fabricの両方のピアを含むハイブリッド・ネットワーク、またはローカルのHyperledger Fabricネットワークでのテストでは機能しません。ハイブリッドネットワーク上でMVCC最適化を有効にしないでください。これにより、ピア間の不整合が発生する可能性があります。