Amazon Aurora DSQL のドキュメント翻訳(特徴、主要コンポーネント、互換性)
この記事では、Amazon Aurora DSQLの特徴、主要コンポーネント、互換性について翻訳してみました。
特に互換性の サポートしていないPostgreSQL機能 は目を通しておいた方が良いと思います。
※ 英語得意じゃないので、AIに頼っている部分があるのでご了承ください。
Aurora DSQL について
出典: https://docs.aws.amazon.com/aurora-dsql/latest/userguide/what-is-aurora-dsql.html
特徴
Amazon Aurora DSQLは、無制限のスケーラビリティ、高可用性、インフラ管理不要のサーバーレス分散型SQLデータベース
アクティブ-アクティブの高可用性を提供し、単一リージョンで99.99%、マルチリージョンで99.999%の可用性を実現
ワークロードのニーズに応じて自動的にインフラを管理しスケーリング
プロビジョニング、パッチ適用、インフラアップグレードに関連するメンテナンスダウンタイムの心配が不要
ACIDトランザクションとリレーショナルデータモデルを活用するトランザクションワークロードに最適化
マイクロサービス、サーバーレス、イベント駆動アーキテクチャに適している
PostgreSQL互換で、馴染みのあるドライバー、ORM、フレームワーク、SQL機能が使用可能
コンピュート、I/O、ストレージを自動的にスケーリング
アクティブ-アクティブのサーバーレス設計により、障害復旧を自動化
マルチAZおよびマルチリージョンの可用性を提供し、結果整合性や障害切り替えによるデータ損失の心配が不要
あらゆるスケールで常に利用可能なアプリケーションの構築と維持をサポート
Amazon Aurora DSQLの主要コンポーネント
出典: https://docs.aws.amazon.com/aurora-dsql/latest/userguide/what-is-core-components.html
分散アーキテクチャ
4つのマルチテナントコンポーネントで構成:
リレーと接続性
コンピュートとデータベース
トランザクションログ、同時実行制御、分離
ユーザーストレージ
コントロールプレーンがこれらを調整
各コンポーネントは3つのアベイラビリティーゾーン(AZ)で冗長化
自動クラスタースケーリングと自己修復機能を持つ
Aurora DSQLクラスター
単一リージョンクラスター
データを同期的にレプリケーション、ラグを除去
データベースのフェイルオーバーを防止
複数のアベイラビリティーゾーン(AZ)またはリージョン間でデータの一貫性を確保
インフラ障害時に手動作業なしで自動的に正常なインフラにリクエストをルーティング
ACID(原子性、一貫性、分離性、耐久性)トランザクションを提供
マルチリージョンリンククラスター
単一リージョンクラスターと同じ復元力と接続性を提供
可用性を向上
各リージョンに1つずつ、2つのリージョナルエンドポイントを提供
両エンドポイントが単一の論理データベースを表現
同時読み取りおよび書き込み操作が可能
強いデータ一貫性を提供
複数のリージョンで同時に実行されるアプリケーションの構築が可能
パフォーマンスと復元力の向上
Readerは常に同じデータを参照可能
PostgreSQLデータベース
現行のPostgreSQLメジャーバージョンに基づく分散データベース層
馴染みのあるPostgreSQLドライバーやツールで接続可能
現在PostgreSQL 16と互換性があり、PostgreSQL機能のサブセットをサポート
PostgreSQLの互換性
基本的な互換性
ほとんどのサポート機能で同一の動作を提供
すべてのSQL機能で同一のクエリ結果を提供
多くの一般的なPostgreSQLドライバーとツールをサポート(軽微な設定変更で利用可能)
サポートしているSQL expressionsについて
同一の結果を返すもの
ソート順 、数値演算のスケールと精度、文字列操作の等価性
例外(同一結果を保証できないもの)
同期レプリケーション、ロックなし同時実行制御、非同期DDL実行など
サポートされるPostgreSQL機能
ACIDトランザクション、セカンダリインデックス、結合、挿入、更新など
詳細はSupported PostgreSQL features in Aurora DSQL - Amazon Aurora DSQL
サポートしていないPostgreSQL機能
サポートされないオブジェクト
データベース(現在、クラスターごとに1つのデータベースのみサポート)、ビュー
サポートされないオブジェクト:
データベース(現在、クラスターごとに1つのデータベースのみサポート)
ビュー
一時テーブル
トリガー
カスタム型
テーブルスペース
UDF / SQL言語以外の関数
シーケンス
サポートされない制約:
外部キー
排他制約
サポートされない操作:
ALTER SYSTEM
TRUNCATE
VACUUM
SAVEPOINT
サポートされない拡張機能:
PL/pgSQL
PostGIS
PGVector
PGAudit
Postgres_FDW
PGCron
pg_stat_statements
サポートされないSQL表現:
CREATE VIEW
CREATE INDEX(ASC、DESC、データがある場合)
ALTER SYSTEM(すべてブロック)
CREATE TABLE(COLLATE、AS SELECT、INHERITS、PARTITION)
CREATE FUNCTION(LANGUAGE plpgsql)
CREATE TEMPORARY TABLES
CREATE EXTENSION
CREATE SEQUENCE
CREATE MATERIALIZED VIEW
CREATE TABLESPACE
CREATE TRIGGER
CREATE TYPE
CREATE DATABASE
制限事項:
CREATE DATABASE:単一のUTF-8データベース(postgres)のみサポート
トランザクション分離レベル:変更不可(Repeatable Readに相当)
トランザクション内でDDLとDMLの混在不可
トランザクションあたりのDDLステートメントは1つまで
トランザクションあたりの修正行数上限:10,000行
セカンダリインデックスがある列を更新すると、インデックスエントリも更新されるため、変更行数としてカウントされる
例: 5列のテーブルがあり、1列目が主キー、5列目にセカンダリインデックスがある
すべての列を更新する場合
実際のデータ行の更新:1行
セカンダリインデックスの更新:1行
合計変更行数:2行
接続時間の上限:1時間
自動VACUUM:Aurora DSQLでは不要
ツールとドライバーのサポート
標準的なPostgreSQLドライバーを使用
一般的なPostgreSQL互換ツールをサポート(一部設定変更が必要)
ユーティリティ、ツール、サンプルコードは Utilities, tools, and sample code.
リンク先のGitはまだ404になる
Aurora DSQLでのプログラミングについては Programming with Aurora DSQL.
感想
個人的に嬉しいこと
サーバレスであること
パラメータ周りの設定からの解放
スケーリングを意識したアプリケーションにしなくて良いこと
アップグレード・パッチを行うサーバがない
アップグレードに関する調整や検証をしなくて良いこと
パフォーマンス影響もないこと
PostgreSQL 互換であること
ドライバ等は基本的にそのままで良いこと
気になっていること
マルチリージョンで1つのエンドポイント用意できないかな
障害時にエンドポイントを切り替える運用をやりたくない
結局切り替えることになると、その間のデータどうするとかの話になるから
こちらでRoute53を用意するのも面倒
あくまでも分散型のデータベースで一般的なRDBではないことは意識したほうがよさそう
データベースが1クラスタ1つしかサポートサポートされていない
データベースを分けているところは1クラスタ毎に分けた方がいい
データベース跨いでクエリしているものはDB移行を考えた方がいいかも
外部キーは利用できない
あくまでマネージドが想定している一貫性に依存することになり、PostgreSQL側の機能での制約はできないのが辛い
そのほかView、一時テーブルなども対応していない
制約事項を考慮した設計は必要