Amazon QLDB のジャーナルコンテンツ - Amazon Quantum Ledger Database (Amazon QLDB)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon QLDB のジャーナルコンテンツ

Amazon QLDB では、ジャーナルは、データへのすべての変更の完全かつ検証可能な履歴を保存する不変のトランザクションログです。ジャーナルは追加専用であり、シーケンスおよびハッシュチェーンされたblocksには、コミットされたデータやその他のシステムメタデータが含まれます。QLDB は、トランザクション内のジャーナルに 1 つ以上の連鎖ブロックを書き込みます。

このセクションでは、サンプルデータを含むジャーナルブロックの例を示し、ブロックの内容について説明します。

ブロックの例

ジャーナルブロックには、トランザクションのメタデータ、トランザクションでコミットされたドキュメントリビジョンを表すエントリ、およびそれらをコミットした PartiQL ステートメントが含まれます。

以下に、サンプルデータを含むブロックの例を示します。

注記

このブロック例は、情報提供のみを目的としています。示しているハッシュは、実際に計算されたハッシュ値ではありません。

{
  blockAddress:{
    strandId:"JdxjkR9bSYB5jMHWcI464T",
    sequenceNo:1234
  },
  transactionId:"D35qctdJRU1L1N2VhxbwSn",
  blockTimestamp:2019-10-25T17:20:21.009Z,
  blockHash:{{WYLOfZClk0lYWT3lUsSr0ONXh+Pw8MxxB+9zvTgSvlQ=}},
  entriesHash:{{xN9X96atkMvhvF3nEy6jMSVQzKjHJfz1H3bsNeg8GMA=}},
  previousBlockHash:{{IAfZ0h22ZjvcuHPSBCDy/6XNQTsqEmeY3GW0gBae8mg=}},
  entriesHashList:[
      {{F7rQIKCNn0vXVWPexilGfJn5+MCrtsSQqqVdlQxXpS4=}},
      {{C+L8gRhkzVcxt3qRJpw8w6hVEqA5A6ImGne+E7iHizo=}}
  ],
  transactionInfo:{
    statements:[
      {
        statement:"CREATE TABLE VehicleRegistration",
        startTime:2019-10-25T17:20:20.496Z,
        statementDigest:{{3jeSdejOgp6spJ8huZxDRUtp2fRXRqpOMtG43V0nXg8=}}
      },
      {
        statement:"CREATE INDEX ON VehicleRegistration (VIN)",
        startTime:2019-10-25T17:20:20.549Z,
        statementDigest:{{099D+5ZWDgA7r+aWeNUrWhc8ebBTXjgscq+mZ2dVibI=}}
      },
      {
        statement:"CREATE INDEX ON VehicleRegistration (LicensePlateNumber)",
        startTime:2019-10-25T17:20:20.560Z,
        statementDigest:{{B73tVJzVyVXicnH4n96NzU2L2JFY8e9Tjg895suWMew=}}
      },
      {
        statement:"INSERT INTO VehicleRegistration ?",
        startTime:2019-10-25T17:20:20.595Z,
        statementDigest:{{ggpon5qCXLo95K578YVhAD8ix0A0M5CcBx/W40Ey/Tk=}}
      }
    ],
    documents:{
      '8F0TPCmdNQ6JTRpiLj2TmW':{
        tableName:"VehicleRegistration",
        tableId:"BPxNiDQXCIB5l5F68KZoOz",
        statements:[3]
      }
    }
  },
  revisions:[
    {
      hash:{{FR1IWcWew0yw1TnRklo2YMF/qtwb7ohsu5FD8A4DSVg=}}
    },
    {
      blockAddress:{
        strandId:"JdxjkR9bSYB5jMHWcI464T",
        sequenceNo:1234
      },
      hash:{{t8Hj6/VC4SBitxnvBqJbOmrGytF2XAA/1c0AoSq2NQY=}},
      data:{
        VIN:"1N4AL11D75C109151",
        LicensePlateNumber:"LEWISR261LL",
        State:"WA",
        City:"Seattle",
        PendingPenaltyTicketAmount:90.25,
        ValidFromDate:2017-08-21,
        ValidToDate:2020-05-11,
        Owners:{
          PrimaryOwner:{
            PersonId:"GddsXfIYfDlKCEprOLOwYt"
          },
          SecondaryOwners:[]
        }
      },
      metadata:{
        id:"8F0TPCmdNQ6JTRpiLj2TmW",
        version:0,
        txTime:2019-10-25T17:20:20.618Z,
        txId:"D35qctdJRU1L1N2VhxbwSn"
      }
    }
  ]
}

revisions フィールドには、hash 値のみを含み、その他の属性を含まないリビジョンオブジェクトもあります。これらは、ユーザーデータを含まない内部のみのシステムリビジョンです。これらのリビジョンのハッシュは、ジャーナルの完全なハッシュチェーンの一部であり、暗号検証に必要です。

ブロックの内容

ジャーナルブロックには、次のフィールドがあります。

blockAddress

ジャーナル内のブロックの位置。アドレスとは、Amazon Ion構造体には、次の 2 つのフィールドがあります。strandIdおよびsequenceNo

次に例を示します。{strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}

transactionId

ブロックをコミットしたトランザクションの一意の ID。

blockTimestamp

ブロックがジャーナルにコミットされた時刻を示すタイムスタンプ。

blockHash

ブロックを一意に表す 256 ビットのハッシュ値。これは、entriesHashpreviousBlockHash の連結のハッシュです。

entriesHash

ブロック内のすべてのエントリ (内部専用のシステムエントリを含む) を表すハッシュ。これは、Merkle ツリーのルートハッシュです。このツリーのリーフノードは、entriesHashList のすべてのハッシュで構成されます。

previousBlockHash

ジャーナル内の 1 つ前のチェーンされたブロックのハッシュ。

entriesHashList

ブロック内の各エントリを表すハッシュのリスト。このリストには、次のエントリハッシュが含まれます。

  • Ion ハッシュtransactionInfo。この値は、全体をハッシュすることによって計算されます。transactionInfoIon 構造。

  • リーフノードが revisions のすべてのハッシュで構成される Merkle ツリーのルートハッシュ。

  • 内部専用のシステムメタデータを表すハッシュ。これらのハッシュは、すべてのブロックに存在するとは限りません。

transactionInfo

ブロックをコミットしたトランザクション内のステートメントに関する情報を含む Amazon Ion 構造。この構造には次のフィールドがあります。

  • statements— PartiQL ステートメントとstartTime彼らは実行を開始したとき。各ステートメントには、transactionInfo 構造のハッシュを計算するために必要な statementDigest ハッシュがあります。

  • documents— ステートメントによって更新されたドキュメント ID。各ドキュメントには、そのドキュメントが所属する先の tableNametableId、およびそのドキュメントを更新したステートメントのインデックスが含まれます。

revisions

ブロック内でコミットされたドキュメントリビジョンのリスト。各リビジョン構造には、実行済みビューrevision の.

これには、ジャーナルのハッシュチェーン全体の一部を構成する内部専用のシステムリビジョンを表すハッシュも含まれます。

サンプルアプリケーション

エクスポートされたデータを使用してジャーナルのハッシュチェーンを検証する Java コード例については、GitHub リポジトリaws-samples/amazon-qldb-dmv-sample。このサンプルアプリケーションには、次のクラスファイルが含まれています。

  • ValidateQldbHashChain.java-台帳からジャーナルブロックをエクスポートし、エクスポートされたデータを使用してブロック間のハッシュチェーンを検証するチュートリアルコードが含まれます。

  • JournalBlock.java— という名前のメソッドを含むverifyBlockHash()を使用して、ブロック内の各ハッシュコンポーネントを計算する方法を示します。このメソッドは、チュートリアルのコードによって呼び出されますValidateQldbHashChain.java

この完全なサンプルアプリケーションをダウンロードしてインストールする方法については、「Amazon QLDB Java サンプルアプリケーションのインストール」を参照してください。チュートリアルコードを実行する前に、手順 1 ~ 3 に従っていることを確認します。Java チュートリアルを使用してサンプル元帳を設定し、サンプルデータをロードします。

以下の資料も参照してください。

QLDB のジャーナルの詳細については、次のトピックを参照してください。