Back
Featured image of post Amazon QLDB (台帳DB)に関して簡単にまとめた

Amazon QLDB (台帳DB)に関して簡単にまとめた

AWSが提供する台帳DBであるQLDBについて簡単にですがまとめました。

はじめに

業務内でAmazon QLDBを利用する可能性があり触ってみたので、備忘録としてまとめます。

Amazon QLDB

Amazon QLDB (Quantum Ledger Database)はAWSが提供する台帳型データベースです。台帳というのは一般的に、財務活動や経済活動などの履歴を記録するために使用されます。

多くの場合、台帳アプリケーションはリレーショナルデータベースに作成されたカスタムの監査テーブルや監査証跡を使用して実装されます。Amazon QLDB は、台帳のようなアプリケーションを自分で構築するという複雑な開発作業を行う必要がありません。QLDBでは、データに対する変更の履歴は不変です。変更、更新、削除はできません。これを実施するには台帳自体を削除するしか方法はありません。また、暗号化を使用して、アプリケーションのデータに意図しない変更が行われていないことを簡単に確認できます。QLDBでは、イミュータブルなトランザクションログが使用されます。ジャーナルは追加専用であり、コミットされたデータを含む、一連のシーケンスおよびハッシュチェーンされたブロックで構成されます。

QLDBはサーバーレス

QLDBは、サーバーレースアーキテクチャです。 ユーザは、事前にインフラリソースをプロビジョニングする必要がなく、利用した分に応じた料金が課せられます。

QLDBでは他のDBサービスにはない独特のストレージ構造が存在します。 ストレージには、以下の2つがあります。

  • ジャーナルストレージ
    • データへのすべての変更に関する完全、不変、検証可能な履歴が保存されるストレージ領域
  • インデックス付きストレージ
    • 台帳のテーブル、インデックス、およびインデックス付き履歴で使用されるストレージ領域

RDBとQLDBの名称の違い

RDBで一般的に使用される用語がQLDBでは異なる点が多々あります。 以下がそれぞれに対応する名称です。

qldb_comp.png
qldb_comp.png

QLDBの操作感確認

QLDBにて台帳の作成

クエリを実行してみる

1. 台帳を選択し、台帳テーブルを作成

create table "sample_tb"

2. インデックスを追加

create index on "sample_tb" (id)

3. 適当にデータを挿入

insert into "sample_tb" <<{'id':'01', 'name':'Yuu', 'age':28}>>
insert into "sample_tb" <<{'id':'02', 'name':'Smith', 'age':20}>>
insert into "sample_tb" <<{'id':'03', 'name':'Adam', 'age':30}>>

4. 書き込んだ内容を読み込む

select * from "sample_tb"

# 絞り込む
select * from "sample_tb" where id='02'

5. Smithの歳を変更してみる

update "sample_tb" as st
set st.age = '40'
where st.id = '02'

# 更新確認
select * from  "sample_tb" where id = '02'

smith_age.png
smith_age.png

6. テーブルの変更履歴を見てみる

select * from history("sample_tb")

history_all.png
history_all.png

変更したジャーナルのメタデータがversion1になって追加されていることが確認できます。 この変更履歴は削除できないです。

select value h.metadata
from history("sample_tb") as h
where h.metadata.id = '96EivpHcx1O1Bm9Ft1m1g3'

20211130161946.png
20211130161946.png

QLDBの応用

AWSソリューションライブラリの一例にQLDBを利用した品質データの改ざん防止ソリューションがあります。これはQLDBの特性を生かし、データ変更の正確な履歴を維持することにより、攻撃者による品質データの改ざんを防止するシステムです。 Lambda関数はJavaScriptで書かれていますが、こういったことへの応用もできるようです。

quality-data-using-amazon-qldb.png
quality-data-using-amazon-qldb.png

(Amazon QLDB を活用した品質データの改ざん防止)

最後に

QLDB触ってみました。 思ったより簡単な操作感でした。また、合わせてSQL互換のPartiQLを触ってみましたが、レコードの中のオブジェクトまで指定して取得したりできるので便利だと感じました。

参考

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
yuu999
Built with Hugo
Theme Stack designed by Jimmy