MVCCの最適化
Hyperledger Fabricデータベースでは、複数バージョンの同時実行性制御(MVCC)を使用して、二重支出とデータの不整合を回避します。
同じ状態が更新されると、新しいバージョンのレコードによって古いバージョンが上書きされます。ブロック内の同じキーを更新する同時リクエストがある場合は、MVCC_READ_CONFLICTエラーが生成される可能性があります。
転送、ミント、バーンおよびホールド操作のMVCCエラーを減らすために、トークン・チェーンコードのMVCC最適化を有効にできます。この最適化は、Oracle Blockchain Platformでのみ機能します。デフォルトでは、最適化は無効です。最適化を有効にするには、該当する次のステップを完了します。
- CLI:
ochain init
コマンドでブール型-m
または--enable_mvcc_optimization
パラメータを指定します。デフォルトでは、パラメータはfalse
に設定されています。最適化を有効にするには、-m true
をochain init
コマンドラインに追加します。 - Visual Studio Code: チェーンコードを作成する場合は、「チェーンコードの作成」ウィンドウで「MVCC最適化の有効化」を選択します。
ブロックチェーン・アプリケーション・ビルダーの以前のバージョンで作成されたチェーンコードで最適化を使用するには、次のステップを実行します:
- ブロックチェーン・アプリケーション・ビルダーの最新バージョンをインストールした後、CLIでのチェーンコード・プロジェクトのアップグレードおよびVisual Studio Codeでのチェーンコード・プロジェクトのアップグレードの説明に従ってチェーンコードをアップグレードします。
- チェーンコードのルート・フォルダにある
.ochain.json
ファイルを編集して、enableMvccOptimization
をtrue
に設定します。 - チェーンコードを同期します。これにより、最適化が追加され、チェーンコードのルート・フォルダに2つの新しいフォルダ(
statedb
およびtokens
)が作成されます。同期の詳細は、「仕様ファイルの変更と生成されたソース・コードとの同期」および「仕様ファイルの変更と生成されたソース・コードとの同期」を参照してください。
MVCC_READ_CONFLICTエラーを回避する他の方法には、このエラーの生成時にクライアント・アプリケーションの再試行リクエストを指定したり、ブロックチェーン・ネットワークに送信される前にキューを使用してコンカレント・リクエストを取得したりなどがあります。詳細は、Hyperledger Fabricドキュメントの読取り/書込みセット・セマンティクスを参照してください。
ノート:
MVCC最適化は、Oracle Blockchain PlatformとHyperledger Fabricの両方のピアを含むハイブリッド・ネットワーク、またはローカルのHyperledger Fabricネットワークでのテストでは機能しません。ハイブリッドネットワーク上でMVCC最適化を有効にしないでください。これにより、ピア間の不整合が発生する可能性があります。