DynamoDB FAQ — よくある質問への回答
開発者が最もよく尋ねる DynamoDB の質問 — それぞれに明快で率直な回答と、次に進むべき先を用意しました。
DynamoDB の特性と機能
DynamoDB はキーバリューストアですか?
はい。そして同時にドキュメントストアでもあります。すべてのアイテムはプライマリキーで指定され、属性はマップやリストとして 32 階層までネストします。
DynamoDB はリレーショナルデータベースですか?
いいえ。DynamoDB は NoSQL のキーバリュー兼ドキュメントデータベースで、固定スキーマも外部キーも結合もなし。代わりにアクセスパターンに合わせて非正規化します。
DynamoDB は ACID に準拠していますか?
はい — DynamoDB は TransactWriteItems と TransactGetItems で ACID トランザクションに対応。リージョンごとに最大 100 アクションを全か無かの 1 操作にまとめます。
DynamoDB は暗号化されていますか?
はい — DynamoDB のデータはすべて既定で AWS KMS のキーによって保管時に暗号化され、暗号化をオフにすることはできません。転送中のデータは HTTPS/TLS で保護されます。
DynamoDB は結果整合性ですか?
デフォルトでは、はい — DynamoDB の読み取りは結果整合性です。テーブルと LSI では強い整合性の読み取りを選べますが、GSI は常に結果整合性です。
DynamoDB は無料ですか?
一部は無料 — 常時無料枠は月 25 GB のストレージと書き込み 25・読み取り 25 キャパシティーユニット。超過分はリクエスト単位・GB 単位で課金されます。
DynamoDB はインメモリですか?
いいえ — DynamoDB は全書き込みを 3 つのアベイラビリティーゾーンの耐久ストレージへ永続化します。DAX がマイクロ秒読み取りの任意のインメモリキャッシュを加えます。
DynamoDB は NoSQL データベースですか?
はい。DynamoDB はフルマネージドの NoSQL キーバリュー兼ドキュメントストア。スキーマレスなアイテムを保持して水平にスケールし、PartiQL パーサーは JOIN を拒否。
DynamoDB はオープンソースですか?
いいえ — DynamoDB はプロプライエタリなフルマネージド AWS サービスです。DynamoDB Local は開発用の無料エミュレーターで、本番エンジンはセルフホストできません。
DynamoDB はスキーマレスですか?
はい — DynamoDB はスキーマレスです。テーブル作成時に定義するのはプライマリキーだけで、他の属性はすべて任意であり、アイテムごとに自由に変えられます。
DynamoDB はサーバーレスですか?
はい — DynamoDB はフルマネージドなサーバーレス NoSQL データベース。プロビジョニングやパッチ対象のサーバーはなく、キャパシティは自動スケール、支払いは従量制。
DynamoDB に保存できるもの
DynamoDB は null 値を持てますか?
はい — DynamoDB には専用の NULL 型があり、キー以外の属性には空文字列や空のリスト/マップも許されます。ただし空のセットは拒否されます。
DynamoDB は配列を保存できますか?
はい。DynamoDB は配列を List(L)型で保存します。順序を持つ混在型で、32 階層までネストできます。400 KB のアイテム 1 件に UUID 文字列がおよそ 11,070 個入ります。
DynamoDB は BLOB を保存できますか?
上限内なら可能 — DynamoDB は 400 KB 未満の BLOB を Binary 属性(base64 エンコード)に保存します。より大きい BLOB には AWS は Amazon S3 を推奨。
DynamoDB は画像を保存できますか?
はい、小さいものだけ — DynamoDB は 400 KB のアイテム上限内で画像を base64 の Binary 属性として保存します。大きな画像には AWS は Amazon S3 を推奨します。
DynamoDB は JSON を保存できますか?
はい — DynamoDB はドキュメント型で JSON を格納します。オブジェクトはマップ (M)、配列はリスト (L)、ネストは 32 階層まで、アイテムあたり 400 KB の上限内です。
DynamoDB はどれくらいのデータを保存できますか?
DynamoDB のテーブルにサイズの上限はなく、水平にスケールします。実際の上限はアイテムあたり 400 KB と、LSI がある場合に限りアイテムコレクションあたり 10 GB です。
DynamoDB のアイテムの最大サイズは?
400 KB、正確には 409,600 バイトで、値だけでなく属性名も数えます。DynamoDB のアイテムサイズ上限は引き上げ不可のため、大きなオブジェクトは S3 に置きます。
DynamoDB の統合とアクセス
DynamoDB は S3 にエクスポートできますか?
はい — 組み込みの S3 エクスポートはフル/増分スナップショットを DynamoDB JSON か Amazon Ion で書き出します。PITR が必要で、読み取りキャパシティは消費しません。
Power BI は DynamoDB に接続できますか?
Power BI にネイティブの DynamoDB コネクタはなし。Amazon Athena の ODBC コネクタか CData などのドライバーで橋渡しし、更新ごとのスキャン量のコストも試算を。
AWS の外から DynamoDB を使えますか?
はい — DynamoDB へは HTTPS でどこからでも到達できます。AWS 認証情報があれば、ノート PC でもサーバーでも他クラウドでもリージョナルエンドポイントを呼び出せます。
DynamoDB にトリガーはありますか?
はい。DynamoDB のトリガーは Streams + Lambda で、Lambda が毎秒 4 回ストリームをポーリングし、アイテム変更ごとに実行。CREATE TRIGGER 文はありません。
DynamoDB は GraphQL に対応していますか?
はい、AWS AppSync 経由で対応 — DynamoDB テーブルをデータソースに使うマネージド GraphQL サービスで、リゾルバーが GraphQL 操作を DynamoDB 呼び出しに対応づけます。
DynamoDB の操作とクエリ
DynamoDB はオートスケールできますか?
はい。DynamoDB の Auto Scaling はプロビジョニング済みキャパシティーで 20〜90% の目標使用率に追従。平均使用率 28.9% 未満ならオンデマンドの方が安価です。
DynamoDB をローカルで実行できますか?
はい — DynamoDB Local は無料でダウンロードできる DynamoDB 版で、Docker、Java アーカイブ、Maven で自分のマシン上に立ち上げ、同じ API をオフラインで提供します。
DynamoDB にバックアップはありますか?
はい — 長期スナップショット向けのオンデマンドバックアップと、直近 35 日の任意の秒へ復元できる継続バックアップのポイントインタイムリカバリ(PITR)があります。
DynamoDB は全文検索に対応していますか?
ネイティブには非対応 — DynamoDB に関連度ランキングもステミングもあいまい一致もありません。AWS ネイティブな答えはゼロ ETL の OpenSearch 統合です。
DynamoDB は地理空間クエリに対応していますか?
ネイティブには非対応 — DynamoDB に地理データ型も距離演算子もありません。地理空間検索は geohash や S2 セルのキーを範囲クエリしてモデリングします。
DynamoDB は JOIN に対応していますか?
いいえ。DynamoDB に JOIN はなく、PartiQL は 2 テーブルの SELECT を拒否するので非正規化します。DynoTable の SQL Workbench は本物の JOIN をクライアント側で実行。
DynamoDB は SQL に対応していますか?
部分的に対応。PartiQL は SELECT・INSERT・UPDATE・DELETE をカバーしますが、JOIN・GROUP BY・COUNT は拒否します。DynoTable の SQL Workbench はそれらを実行します。
DynamoDB はトランザクションに対応していますか?
はい。DynamoDB のトランザクションはテーブル横断で最大 100 アクションを 1 つの全か無かの操作にまとめ、消費キャパシティーユニットは通常の書き込みの 2 倍です。
DynamoDB は TTL に対応していますか?
はい — DynamoDB は Time to Live に対応。Unix エポック秒の有効期限を持つ Number 属性を指定すれば、期限切れアイテムを無料で自動削除します。
DynamoDB はどれくらい速いですか?
高速です — DynamoDB はどんな規模でも一貫した 1 桁ミリ秒のレイテンシ。インメモリキャッシュの DAX を使えば、結果整合性のある読み取りはマイクロ秒になります。
DynamoDB のテーブルはいくつまで持てますか?
リージョンあたり既定 2,500 テーブル、申請で 10,000 まで。サイズ上限はありませんが、プロビジョニング済みならアイドルでも月 0.57 ドルかかります。
DynamoDB でアイテム数を数えるには?
Query か Scan で Select: COUNT を使い、LastEvaluatedKey でページ送りしつつ Count を合計します。カウントもアイテム返却と同じ読み取りキャパシティーを消費します。
DynamoDB のアーキテクチャと内部構造
DynamoDB はキャッシュとして使えますか?
はい — DynamoDB の高速なキー検索と TTL は永続キャッシュ向き。マイクロ秒の読み取りには、マネージドなインメモリのライトスルーキャッシュ DAX を前段に。
DynamoDB は外部キーに対応していますか?
いいえ。DynamoDB に外部キー、参照整合性、カスケード削除はありません。親を削除しても子は残ります。リレーションシップは自分でモデル化します。
DynamoDB はセカンダリインデックスに対応していますか?
はい。DynamoDB にはグローバルセカンダリインデックス(独自キー・結果整合性・既定で 20 個/テーブル)とローカルセカンダリインデックス(強い整合性)があります。
DynamoDB はマルチリージョンですか?
標準の DynamoDB テーブルは単一リージョン。グローバルテーブルはマルチアクティブにリージョン間複製し、可用性は最大 99.999%、ストレージは各リージョンで課金。
DynamoDB を使うべきでないのはどんなときですか?
分析ワークロード、未知のアクセスパターン、多発するアドホッククエリ、JOIN に依存する正規化されたリレーショナルスキーマでは DynamoDB を避けましょう。