Amazon Aurora、Amazon DocumentDB、Amazon Neptuneの比較表(違い、共通点のまとめ) ~Comparison Table, difference between Amazon Aurora, Amazon DocumentDB, Amazon Neptune~

3月 31, 2021Aurora,AWS,DocumentDB,Neptune

AWSのデータベースサービスにはAmazon Aurora、Amazon DocumentDB、Amazon DynamoDB、Amazon ElastiCache、Amazon Keyspaces、Amazon Neptune、Amazon QLDB、Amazon RDS、Amazon Redshift、Amazon Timestreamなど様々なサービスがあります。
その中でもAmazon Auroraおよびそれ以降に登場したAmazon DocumentDBやAmazon Neptuneといったデータベースサービスではクォーラムモデルというデータレプリケーションが採用されています。

クォーラムモデルは簡潔に言うと、複数のデータコピーのうち一定数に書き込みまたは読み込みできた場合にその処理を完了とし、それ以外のデータコピーは非同期で整合性をとるというものです。
このクォーラムモデルの特徴は従来の同期レプリケーションの遅延や非同期レプリケーションの障害耐性の問題などを解決するアプローチとなっています。

クォーラムモデルの詳細な概念の理解には以下が役立ちます。
Quorum – Wikipedia
Amazon Aurora under the hood: クオーラムと障害 | Amazon Web Services ブログ

このクォーラムモデルを採用したAmazon Aurora、Amazon DocumentDB、Amazon NeptuneはAWSドキュメントやAWSクラウドサービス活用資料集の内容を確認すると特にクラスターの構成やストレージの仕組みが非常に似ています。
ただ、2021年3月現在にAWSからこれらのデータベース基盤の仕組みが同一のものであるという公式のアナウンスは出ていないようです。
そのため、これらのデータベースサービスの理解を効率よく深めるために2021年3月現在における共通点、相違点を比較表にまとめてみました。
以下の比較表はAWSドキュメントAWSサービス別資料(AWS Black Belt Online Seminar資料)を情報源にして、ドキュメントと実際の動きの差異などを個人的にAWSサポートに確認しながらまとめたものです。
あくまで個人としてまとめたものなので不備等がある可能性を認識の上で参考にしていただければと思います。

Amazon Aurora、Amazon DocumentDB、Amazon Neptuneの主な機能の共通点、相違点の比較表

比較項目 Amazon Aurora Amazon DocumentDB Amazon Neptune
概要 リレーショナルデータベース MongoDB互換データベース グラフデータベース
サポートデータベース MySQL, PostgreSQL MongoDB Gremlin, SPARQL
ストレージ拡張 10GB毎に最大128TiBまで自動拡張 10GB毎に最大64TiBまで自動拡張 10GB毎に最大64TiBまで自動拡張
ストレージ可用性 3AZに6個コピー自動作成。6個中4個の書込クォーラム、6個中3個読込クォーラムで最大3個のコピー損失でも読込影響無し、最大2個のコピー損失でも書込影響無し。 3AZに6個コピー自動作成。6個中4個の書込クォーラム、6個中3個読込クォーラムで最大3個のコピー損失でも読込影響無し、最大2個のコピー損失でも書込影響無し。 3AZに6個コピー自動作成。6個中4個の書込クォーラム、6個中3個読込クォーラムで最大3個のコピー損失でも読込影響無し、最大2個のコピー損失でも書込影響無し。
クラスター構成 1つのプライマリDBインスタンス、
0個~15個のリードレプリカDBインスタンス
1つのプライマリDBインスタンス、
0個~15個のリードレプリカDBインスタンス
1つのプライマリDBインスタンス、
0個~15個のリードレプリカDBインスタンス
フェイルオーバー優先順位 レプリカの昇格階層は0(最も高い)から15(最も低い)で指定。以下の順番で昇格。
1. 指定した優先度が高い(より0に近い)リードレプリカ
2. 優先度が同じ場合はサイズの大きいリードレプリカ
3. 優先度とサイズが同じ場合は任意のリードレプリカ
レプリカの昇格階層は0(最も高い)から15(最も低い)で指定。以下の順番で昇格。
1. 指定した優先度が高い(より0に近い)リードレプリカ
2. 優先度が同じ場合はサイズの大きいリードレプリカ
3. 優先度とサイズが同じ場合は任意のリードレプリカ
レプリカの昇格階層は0(最も高い)から15(最も低い)で指定。以下の順番で昇格。
1. 指定した優先度が高い(より0に近い)リードレプリカ
2. 優先度が同じ場合はサイズの大きいリードレプリカ
3. 優先度とサイズが同じ場合は任意のリードレプリカ
エンドポイント クラスターエンドポイント、
リーダーエンドポイント、
インスタンスエンドポイント、
カスタムエンドポイント
クラスターエンドポイント、
リーダーエンドポイント、
インスタンスエンドポイント
クラスターエンドポイント、
リーダーエンドポイント、
インスタンスエンドポイント、
カスタムエンドポイント
デフォルトDBポート 3306(MySQL)、5432(PostgreSQL) 27107 8182
VPC設定 enableDnsHostnamesとenableDnsSupportをtrueにする。 enableDnsHostnamesとenableDnsSupportをtrueにする。 enableDnsHostnamesとenableDnsSupportをtrueにする。
データ保管の暗号化 AWS KMSを使用 AWS KMSを使用 AWS KMSを使用
データ転送の暗号化 パラメータグループでTLS暗号化設定(デフォルト有効) パラメータグループでTLS暗号化設定(デフォルト有効化) Neptuneエンジンバージョン1.0.4.0以降はTLS暗号化が強制
リソース管理権限制御 IAMロール・IAMユーザー IAMロール・IAMユーザー IAMロール・IAMユーザー
DBポートアクセス制御 セキュリティグループ、NACL セキュリティグループ、NACL セキュリティグループ、NACL
DB接続権限制御 ユーザー名とパスワード、IAMデータベース認証 ユーザー名とパスワード IAMデータベース認証
監査ログ Amazon CloudWatch Logsエクスポートとパラメータグループの「server_audit_logging」の有効化で可能 Amazon CloudWatch Logsエクスポートとパラメータグループの「audit_logs」の有効化で可能 Amazon CloudWatch Logsエクスポートとパラメータグループの「neptune_enable_audit_log」の有効化で可能
課金体系 DBインスタンス、ストレージ、バックアップストレージ、データ転送の従量課金 DBインスタンス、ストレージ、バックアップストレージ、データ転送の従量課金 DBインスタンス、ストレージ、バックアップストレージ、データ転送の従量課金
メンテナンスウィンドウ リージョン毎の8時間ブロック内でランダムな30分間が割当。曜日も指定をしなければランダムに割当。 リージョン毎の8時間ブロック内でランダムな30分間が割当。曜日も指定をしなければランダムに割当。 リージョン毎の8時間ブロック内でランダムな30分間が割当。曜日も指定をしなければランダムに割当。
バックアップウィンドウ リージョン毎の8時間ブロック内でランダムな30分間が割当。開始時にシングルAZ配置は数秒間ストレージI/O中断、マルチAZ配置は数分間レイテンシー上昇。 リージョン毎の8時間ブロック内でランダムな30分間が割当。開始時にシングルAZ配置は数秒間ストレージI/O中断、マルチAZ配置は数分間レイテンシー上昇。 リージョン毎の8時間ブロック内でランダムな30分間が割当。開始時にシングルAZ配置は数秒間ストレージI/O中断、マルチAZ配置は数分間レイテンシー上昇。
自動バックアップ保持期間 1日~35日 1日~35日 1日~35日
ポイントタイムリカバリ 自動バックアップを使用して可能 自動バックアップを使用して可能 自動バックアップを使用して可能
バックアップ手段 自動バックアップ(自動スナップショット、トランザクションログ)、手動スナップショット 自動バックアップ(自動スナップショット、トランザクションログ)、手動スナップショット 自動バックアップ(自動スナップショット、トランザクションログ)、手動スナップショット
バックアップの共有・コピー 手動スナップショットはリージョン間コピー、アカウント間共有可能。
自動スナップショットは手動スナップショットにコピーすれば可能。
暗号化されている場合はカスタムKMSキーに共有先の権限を付与すれば可能。
デフォルトKMSキー暗号化の場合はカスタムKMSキー暗号化スナップショットにコピーすれば可能。
手動スナップショットはリージョン間コピー、アカウント間共有可能。
自動スナップショットは手動スナップショットにコピーすれば可能。
暗号化されている場合はカスタムKMSキーに共有先の権限を付与すれば可能。
デフォルトKMSキー暗号化の場合はカスタムKMSキー暗号化スナップショットにコピーすれば可能。
手動スナップショットはリージョン間コピー、アカウント間共有可能。
自動スナップショットは手動スナップショットにコピーすれば可能。
暗号化されている場合はカスタムKMSキーに共有先の権限を付与すれば可能。
デフォルトKMSキー暗号化の場合はカスタムKMSキー暗号化スナップショットにコピーすれば可能。
ストリーム機能 データベースアクティビティストリーム。
他のサービスと連携可能なデータベース変更のログを重複無く発生順序を維持してAmazon Kinesis Data Streamsにプッシュする。
変更ストリーム。
他のサービスと連携可能なデータベース変更のログを重複無く発生順序を維持してクラスター内に7日間保持。プライマリインスタンスからのみ取得可能。
Neptuneストリーム。
他のサービスと連携可能なデータベース変更のログを重複無く発生順序を維持してクラスター内に7日間保持。プライマリインスタンスとリードレプリカインスタンスから取得可能。
イベント通知 クラスター・インスタンスのイベント発生時にAmazon SNSに連携。 クラスター・インスタンスのイベント発生時にAmazon SNSに連携。
Performance Insights データベース負荷原因を待機状態、SQLクエリ、ホスト、ユーザーなどで分析。
バックトラック 同じDBクラスター内のデータを指定時間まで数分で巻き戻す機能。
クローン機能 DBクラスターのクローンをダウンタイム無しで作成。
Serverlessクラスターの作成 オンデマンド自動スケーリング構成のクラスターを作成。
クロスリージョン配置 Amazon Aurora Global Databaseで各リージョンにリードレプリカを作成するシングルスター構成。
トランザクションは1つのリージョンに存在するプライマリDBインスタンスでサポート。
マルチマスター配置 Amazon Aurora Multi-Masterで1つのリージョン内でマルチマスターデータベースを作成。
プロファイラー 操作実行時間と詳細ログをAmazon CloudWatch Logsに記録。

Amazon Aurora、Amazon DocumentDB、Amazon Neptuneの主なモニタリング項目比較

特にBufferCacheHitRatio、CPUUtilization、FreeableMemoryはインスタンスクラスの増減を決める基準として使われます。

メトリクス名 メトリクス内容
BufferCacheHitRatio(Aurora)
BufferCacheHitRatio(DocumentDB)
BufferCacheHitRatio(Neptune)
バッファキャッシュで処理されるリクエスト割合(%)。キャッシュヒット率99.9%未満かつ高レイテンシの場合などにインスタンスクラスを大きく(メモリデータキャッシュ増加)する検討指標となる。
CPUUtilization(Aurora)
CPUUtilization(DocumentDB)
CPUUtilization(Neptune)
CPU使用率。CPU使用率が100%に近く | 十分なパフォーマンスが得られない場合などにインスタンスクラスを大きくする検討指標となる。
FreeableMemory(Aurora)
FreeableMemory(DocumentDB)
FreeableMemory(Neptune)
メモリ(RAM)容量(Bytes)。メモリ不足の場合などにインスタンスクラスを大きくする検討指標となる。
EngineUptime(Aurora)
EngineUptime(DocumentDB)
EngineUptime(Neptune)
インスタンス実行時間(秒)。
VolumeBytesUsed(Aurora)
VolumeBytesUsed(DocumentDB)
VolumeBytesUsed(Neptune)
DBクラスターに割り当てられたストレージ容量(Bytes)。
AuroraReplicaLag(Aurora)
DBInstanceReplicaLag(DocumentDB)
ClusterReplicaLag(Neptune)
プライマリインスタンスとレプリカ間のレプリケート遅延時間(ミリ秒)。
AuroraReplicaLagMaximum(Aurora)
DBClusterReplicaLagMaximum(DocumentDB)
ClusterReplicaLagMaximum(Neptune)
プライマリインスタンスと各レプリカ間の最大レプリケート遅延時間(ミリ秒)。
AuroraReplicaLagMinimum(Aurora)
DBClusterReplicaLagMinimum(DocumentDB)
ClusterReplicaLagMinimum(Neptune)
プライマリインスタンスと各レプリカ間の最小レプリケート遅延時間(ミリ秒)。

Amazon Aurora、Amazon DocumentDB、Amazon Neptune共通の変更反映タイミング

「Apply Immediately(すぐに適用)」を変更を実行時に選択しない場合、
クラスター識別子、マスターパスワード、IAM DB認証、インスタンス識別子、インスタンスクラス
はメンテナンスウィンドウで変更が適用されます。上記以外の設定は「Apply Immediately(すぐに適用)」の指定に関係なく即時適用されます。

スコープ 変更対象 影響
クラスター クラスター識別子 ダウンタイム無し。
クラスター マスターパスワード ダウンタイム無し。
クラスター IAM DB認証
(DocumentDBは機能無し)
ダウンタイム無し。
クラスター セキュリティグループ ダウンタイム無し。
クラスター パラメータグループ パラメータ変更はフェイルオーバー無しの
手動再起動時のみ反映。
クラスター メンテナンスウィンドウ 現在時刻を含むメンテナンス時間変更をし、
かつ保留中アクションが機能停止する場合、
保留中アクションが即時適用され機能停止が発生。
クラスター バックアップ保持期間 ダウンタイム無し。
クラスター バックアップウィンドウ ダウンタイム無し。
インスタンス インスタンス識別子 DBインスタンス再起動が発生し、
変更中に機能停止する。
インスタンス インスタンスクラス 変更中に機能停止する。
インスタンス 昇格階層 ダウンタイム無し。
クラスター 削除保護 ダウンタイム無し。