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の互換性

出典: https://docs.aws.amazon.com/aurora-dsql/latest/userguide/working-with-postgresql-compatibility-supported-sql-features.html

基本的な互換性

  • ほとんどのサポート機能で同一の動作を提供

  • すべてのSQL機能で同一のクエリ結果を提供

  • 多くの一般的なPostgreSQLドライバーとツールをサポート(軽微な設定変更で利用可能)

サポートしているSQL expressionsについて

同一の結果を返すもの

  • ソート順 、数値演算のスケールと精度、文字列操作の等価性

例外(同一結果を保証できないもの)

  • 同期レプリケーション、ロックなし同時実行制御、非同期DDL実行など

サポートされるPostgreSQL機能

サポートしていない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、一時テーブルなども対応していない

    • 制約事項を考慮した設計は必要

いいなと思ったら応援しよう!