Amazon QLDB の概要 - Amazon Quantum Ledger Database (Amazon QLDB)

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

Amazon QLDB の概要

以下のセクションでは、Amazon QLDB サービスコンポーネントと、コンポーネント間のやり取りの概要について説明します。

ジャーナルファースト

従来のデータベースアーキテクチャでは、通常、トランザクションの一部としてテーブルにデータを書き込みます。トランザクションログ (通常は内部実装) は、トランザクションと、それによるデータベースの変更をすべて記録します。トランザクションログは、データベースの重要なコンポーネントです。システム障害、災害復旧、またはデータレプリケーションが発生した場合に、トランザクションを再生するには、ログが必要です。ただし、データベーストランザクションログは変更不可能ではなく、ユーザーが直接簡単にアクセスできるようには設計されていません。

Amazon QLDB では、ジャーナルはデータベースの中核です。トランザクションログと似た構造のジャーナルは、アプリケーションデータと関連するメタデータを保存するイミュータブルな追加専用のデータ構造です。更新や削除を含むすべての書き込みトランザクションは、最初にジャーナルにコミットされます。

QLDB は、ジャーナルを使用して台帳データの現在の状態を確認する際に、データをクエリ可能なユーザー定義テーブルに具体化します。これらのテーブルには、ドキュメントのリビジョンやメタデータなど、すべてのトランザクションデータのアクセス可能な履歴も表示されます。ジャーナルはさらに、同時実行性、順序付け、暗号化検証、および台帳データの可用性を処理します。

QLDB ジャーナルのアーキテクチャを以下に図で示します。


                    QLDB というタイトルの図: ジャーナルはデータベースであり、ジャーナルのアーキテクチャには台帳に接続しジャーナルにトランザクションをコミットするアプリケーションがあり、ジャーナルはテーブルにマテリアライズされることが示されています。
  • この例では、アプリケーションが台帳に接続し、cars という名前のテーブルに対しドキュメントを挿入、更新、削除するトランザクションを実行します。

  • データは、まず順番にジャーナルに書き込まれます。

  • その後、データは組み込みビューを使用してテーブルにマテリアライズされます。これらのビューでは、各リビジョンにバージョン番号が割り当てられた状態で、自動車の現在の状態と完全な履歴の両方にクエリを実行できます。

  • ジャーナルから直接データをエクスポートまたはストリーミングすることもできます。

Immutable

QLDB ジャーナルは追加専用であるため、データに対するすべての変更の完全な記録が保持され、変更や上書きはできません。コミットされたデータを直接変更する API やその他の方法はありません。このジャーナルの構造により、台帳の全履歴にアクセスしてクエリを実行できます。

注記

QLDB がサポートする不変性の唯一の例外は、データの秘匿化です。この機能により、欧州連合の一般データ保護規則 (GDPR) やカリフォルニア州消費者プライバシー法 (CCPA) などの規制法令に準拠することができます。

QLDB にはテーブルの履歴にある使用頻度の低いドキュメントリビジョンを完全に削除することができる秘匿化オペレーションがあります。このオペレーションでは、指定したリビジョンのユーザーデータのみが削除され、ジャーナルシーケンスとドキュメントのメタデータは変更されません。これにより、台帳の全体的なデータの整合性が維持されます。詳細については、「ドキュメントのリビジョンを秘匿化する」を参照してください。

QLDB は、トランザクション内のジャーナルに 1 つのブロックを書き込みます。各ブロックには、挿入、更新、削除するドキュメントを表すエントリオブジェクトと、それらをコミットするために実行したステートメントが含まれます。これらのブロックは、データの整合性を保証するために順序付けおよびハッシュチェーンされています。

以下の図は、このジャーナルの構造を示したものです。


                    レコード変更不可というタイトルの図。QLDB のイミュータブルで追加専用のジャーナル構造を示します。各ハッシュチェーンされたジャーナルブロックにシーケンス番号があります。

この図は、トランザクションが、検証のためにハッシュチェーンされたブロックとしてジャーナルにコミットされていることを示しています。各ブロックには、そのアドレスを指定するシーケンス番号があります。

暗号的に検証可能

ジャーナルブロックは、ブロックチェーンと同様に、暗号ハッシュ技術とともに順序付けされ、チェーンされます。QLDB はジャーナルのハッシュチェーンを使用し、暗号化検証方法を使用して、トランザクションデータの整合性を提供します。ダイジェスト (ある時点でのジャーナルの完全なハッシュチェーンを表すハッシュ値) と Merkle 監査証明 (バイナリハッシュツリー内のノードの妥当性を証明するメカニズム) を使用すると、データに対する意図しない変更がないことをいつでも確認できます。

次の図は、ある時点でのジャーナルの完全なハッシュチェーンをカバーするダイジェストを示しています。


                    SHA-256 を使用したハッシュチェーンというタイトルの図。ジャーナルのハッシュチェーン全体を対象とするダイジェストと、Ion ドキュメント、PartiQL ステートメント、およびメタデータを表すエントリを含むジャーナルブロックの構造を示します。

この図では、ジャーナルブロックは SHA-256 暗号化ハッシュ関数を使用してハッシュ化され、後続のブロックに順次チェーンされています。各ブロックには、データドキュメント、メタデータ、およびトランザクションで実行された PartiQL ステートメントを含むエントリがあります。

詳細については、「Amazon QLDB でのデータ検証」を参照してください。

SQL のようにドキュメントを柔軟に操作可能

QLDB は PartiQL をクエリ言語として使用し、Amazon Ion をドキュメント指向のデータモデルとして使用します。PartiQL は、Ion で動作するように拡張されたオープンソースの SQL 互換のクエリ言語です。PartiQL を使用すると、使い慣れた SQL 演算子を使用してデータを挿入、クエリ、および管理できます。フラットドキュメントにクエリを実行する場合、構文は SQL を使用してリレーショナルテーブルをクエリするのと同じです。PartiQL の QLDB での実装については、「Amazon QLDB の PartiQL リファレンス」を参照してください。

Amazon Ion は JSON のスーパーセットです。Ion はオープンソースのドキュメントベースのデータ形式であり、構造化データ、半構造化データ、およびネストされたデータを柔軟に保存および処理できます。QLDB の詳細については、「Amazon QLDB の Amazon Ion データ形式リファレンス」を参照してください。

従来のリレーショナルデータベースと QLDB についての、コアコンポーネントと機能の概要の比較については、「リレーショナルから台帳へ」を参照してください。

オープンソースの開発者ツール

アプリケーション開発を簡素化するために、QLDB では、さまざまなプログラミング言語でオープンソースドライバーを提供しています。これらのドライバーを使用して、台帳で PartiQL ステートメントを実行し、それらのステートメントの結果を処理することで、トランザクションデータ API を操作できます。現在サポートされているドライバー言語に関する情報とチュートリアルについては、「Amazon QLDB ドライバーの開始方法」を参照してください。

Amazon Ion には、Ion データを処理するクライアントライブラリも用意されています。Ion データの処理に関するデベロッパーガイドおよびコード例については、GitHub の Amazon Ion ドキュメントを参照してください。

サーバーレスでかつ高可用性

QLDB は、フルマネージド、サーバーレスであり、高可用性も備えています。このサービスは、アプリケーションの需要に応じて自動的にスケールされるため、インスタンスや容量をプロビジョニングする必要はありません。データの複数のコピーが 1 つの AWS リージョン の 1 つのアベイラビリティーゾーン内および複数のアベイラビリティーゾーン間でレプリケートされます。

エンタープライズグレード

QLDB トランザクションはアトミック性、整合性、分離、耐久性 (ACID) の各特性に完全に準拠しています。QLDB はオプティミスティック同時実行制御 (OCC、Optimistic Concurrency Control) を使用し、トランザクションは完全な直列化可能性 (最高レベルの分離性) で動作します。つまり、ファントムリード、ダーティリード、書き込みスキューなどの並行性の問題が発生するリスクはありません。詳細については、「Amazon QLDB 同時実行モデル」を参照してください。