Amazon DocumentDB
# Amazon DocumentDB
https://d1.awsstatic.com/webinars/jp/pdf/services/20190625_AWS_BlackBelt_AmazonDocumentDB.pdf
## ドキュメント指向DBとは
- JSON-like なデータ
- コンテンツ管理
- モバイルアプリ
- バーソナライゼーション
- カタログ
- リテール&マーケティング
- ユーザプロファイル
## 概要
- 特徴
- 早い
- 秒間100万リクエストが実行可能
- 効率よくリソースを実行可能
- ストレージレイヤでIOを最適化
- 数分でスケールアウト&スケールアップ可能
- スケーラブル
- 15台のリードレプリカが追加可能
- 15-768GBのメモリ
- ストレージの自動拡張(10GB - 64TB)
- リードレプリカでの負荷分散
- マネージド
- リードレプリカの昇格による自動フェイルオーバー
- S3へのストリームバックアップ
- 3AZ、6コピーによるデータ冗長
- MongoDB互換
- Security & Compliance
- Backup
- ストリーミングバックアップ
- リストア
- モニタリング
- CloudWatchメトリクスと連携
## アーキテクチャ
- コンピュートとストレージの分離
- パーティションへのデータ分散
- 3つのAZに6つのコピーを保持
- 書き込みのエンドポイントと読み取りのエンドポイント
- スケーリング
- 読み込み: リードレプリカを増やす
- 書き込み: インスタンスのスケールアップ
- ストレージ: 64TBまでのストレージ自動拡張
- 障害復旧
- フェイルオーバー
- バックアップ
- スナップショット
- ストリーミングバックアップ
- 分散システム
- クォーラムシステムを採用(多数決)
## Amazon DocumentDB の使い方
- 各ノードにParameter Group と Maintenance Window が存在
- フェイルオーバが発生しても常にマスタを参照するクラスタエンドポイント
- リードレプリカ用のリーダーエンドポイント
- 可用性
- 障害時は自動的に交換される
- どのリードレプリカに対して優先的にフェイルオーバさせるかを指定できる
- パフォーマンス
- リードレプリカのスケールアウト
- 読み込みエンドポイントによってリードレプリカをまたがって負荷が分散される
## 使い分け
- Amazon RDS
- Amazon DynamoDB
- こんな場合はAmazon DynamoDB を利用する
- より、スケーラブルに使いたいとき
- データの持ち方としてJSONよりネストした構造に対して柔軟にアクセスさせたいという場合
## 既存のデータベースからの移行
以下の観点で割り振る
- 停止時間を十分に確保できる
- ダンプツール(停止時間は長いが、シンプルに行える)
- 停止時間を十分に確保できないが、移行完了までに猶予がとれる
- Database Migration Service(Amazon DMS)
- アプリの停止時間は短く、シンプルではあるが、フルロードが終わるまでの時間がかかる
- 移行完了までを高速にしたい
- DMS とダンプのハイブリッド
## 料金
- インスタンス料金
- IO回数
- ストレージ料金
- バックアップストレージ料金(S3)
## 雑感
Amazon DocumentDB について全く知らなかったので勉強になった。
JSON ベースでそのままデータベースに突っ込めて、クエリを発行するのはJSONベースでデータをストアしたい時に簡単に実装できそう。
DynamoDB とで技術選択で迷うことになりそう。現在の認識だとDynamoDB の方で実装したくなってしまうかもしれない。
RDSと似て裏側にEC2がみえるサービスになっていてマネージドでやってくれるのは嬉しい。