Amazon DynamoDB
2023/11/22 14:29
2023/11/22 14:29
AmazonDynamoDB に関する情報を集約するページ
Amazon DynamoDB の基本的な概念
特徴
- フルマネージド型 NoSQL
- シームレスなスケーラビリティ
- 保管時の暗号化を提供
- 任意の量のデータを保存できる
- ノーダウンタイムでスループット変更可能
- オンデマンドバックアップ機能
- ポイントインタイムリカバリ
- すべてのデータは SSD に保存され、自動的に1リージョン内の複数のAZにレプリケートされる
- マルチリージョン間の継続した同期を実現するグローバルテーブルなる機能もある
基本的な仕組み
- コアコンポーネント
- テーブル: 項目のコレクション
- 項目: 属性のコレクション、各項目は1つ以上の属性で構成される
- 属性: それ以上分割する必要のないデータ要素
- 最大深さ 32 レベルの入れ子属性をサポートしている
- プライマリキーを利用して項目を一意に識別する
- パーティションキー: 1つの属性で構成されたシンプルなプライマリキーをハッシュ関数の入力として DynamoDB 内部の物理ストレージが決定する
- 複合プライマリキー: パーティションキーをハッシュ関数の入力として DynamoDB 内部の物理ストレージが決定したのち、同一のパーティションキーの項目が複数ある場合にソートキーでソートされた状態で DyanmoDB 内部の物理ストレージに保存される
- プライマリキーは単一、または複数の属性を組み合わせたものを指定できる
- セカンダリインデックスを使用してクエリの柔軟性を高められる
- グローバルセカンダリインデックス(GSI): テーブルと異なるパーティションキーとソートキーを持つインデックス(制限: テーブルあたり 20)
- ローカルセカンダリインデックス(LSI): テーブルと同じパーティションキーと、異なるソートキーを持つインデックス(制限: テーブルあたり 5)
- DynamoDB ストリームを使うとデータの変更をキャプチャできる
DynamoDB にあわせた NoSQL 設計
- RDBMS では柔軟なクエリが可能だが、クエリはコストが高く、高トラフィックに対するスケーリングがうまくいかないことがある
- 基本的に DynamoDB では限られた方法に対して効率的にクエリできるが、その範囲外では高コストで低速
DynamoDB テーブルの設計方針
- もっとも一般的で重要なクエリをできるだけ早く安価に行うためのスキーマ設計を行う
- ユースケースの特定の要件にあわせてデータ構造を定める
- RDBMS では正規化されたデータモデルを作成できるが、DynamoDB を利用する場合は、ユースケースを断定するまでスキーマの設計はできない
- テーブルをできるだけすくなく保つ
アプリケーションのアクセスパターンの3つの基本的特性
- データサイズ: リクエストのデータ量を把握する
- データシェイプ: クエリ処理時にデータを再形成するのではなく、データベースの形状がクエリ結果と一致するようにテーブルを設計する
- データ速度: パーティションを適切に設定する
パフォーマンス管理の一般的な原則
- 関連するデータをまとめる
- ソート順を使用する
- クエリを分散する
- グローバルセカンダリインデックスを使用する
DynamoDB とオペレーション
できる読み取り操作
- GetItem: テーブルに対してプライマリキーを指定して、単一項目を読み取る
- Query: 同じパーティションキーを持つ複数の項目を読み取る、返されるすべての項目は単一の読み込みオペレーションとして扱われる
クエリ操作
- キー条件式: パーティションキーの名前と値を指定し、かつソートキーに条件式を指定できる
- クエリフィルタ式: クエリ式の結果を条件式でフィルタできる
- limit: よくある limit
- scannedCount: フィルタ式が適用される前に条件式に一致する項目
- count: フィルタ式が適用されたあとに残っている項目数
スキャン操作
- テーブルまたはセカンダリインデックスのすべての項目を読み込む
- フィルタ式を使用できる
- limit を指定できる
- ページネーションの単位を指定できる
- scannedCount: フィルタ式が適用される前に条件式に一致する項目
- count: フィルタ式が適用されたあとに残っている項目数
- 並列スキャン
書き込み操作
- デフォルトでは無条件で書き込みオペレーションを実行できる
- 条件付きの書き込み: 項目の属性が1つ以上の想定条件を満たす場合のみ成功する
- たとえば同じプライマリキーを持つ既存の項目がない場合など
- また現在取得している値が変化していないことを前提に処理を行う条件式を指定することにより排他処理も使える
Pinned Articles
About
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです
Tags
JavaScript
PowerShell
kibana
elasticsearch
fluentd
nginx
イベント
五十嵐裕美
村川梨衣
logrotate
IoT
Scala
Java
C言語
iputils
ICMP
WUG
mastodon
Swift
AWS
Clock
Windows
アーキテクチャ
PoEAA
iOS
DeviceFarm
プログラミング言語
OS
StepFunctions
Lambda
Serverless
terraform
ポエム
RHEL
ネットワーク
GraphQL
CloudWatch
Linux
Coreutils
network
nc
telnet
LinuxKernel
fpinscala
ELB
IAM
AppSync
EFS
Gradle
english