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へのストリームバックアップ
      • 3AZ6コピーによるデータ冗長
    • MongoDB互換
    • Security & Compliance
      • VPC内での提供(パブリックエンドポイントは作成できない)
      • IAM
      • セキュリティグループ
      • TLS
      • 各種認証
      • 監査ログ
    • Backup
      • ストリーミングバックアップ
      • リストア
    • モニタリング
      • CloudWatchメトリクスと連携

 

## アーキテクチャ

  • コンピュートとストレージの分離
  • パーティションへのデータ分散
  • 3つのAZ6つのコピーを保持
  • 書き込みのエンドポイントと読み取りのエンドポイント
  • スケーリング
    • 読み込み: リードレプリカを増やす
    • 書き込み: インスタンスのスケールアップ
    • ストレージ: 64TBまでのストレージ自動拡張
  • 障害復旧
    • フェイルオーバー
  • バックアップ
    • スナップショット
    • ストリーミングバックアップ
  • 分散システム
    • クォーラムシステムを採用(多数決)

 

## Amazon DocumentDB の使い方

  • 各ノードにParameter Group Maintenance Window が存在
  • フェイルオーバが発生しても常にマスタを参照するクラスタエンドポイント
  • リードレプリカ用のリーダーエンドポイント
    • 可用性
      • 障害時は自動的に交換される
      • どのリードレプリカに対して優先的にフェイルオーバさせるかを指定できる
    • パフォーマンス
      • リードレプリカのスケールアウト
      • 読み込みエンドポイントによってリードレプリカをまたがって負荷が分散される

 

 

## 使い分け

  • Amazon RDS
    • こんな場合はAmazon RDSを利用する
      • トランザクションを使って信頼性の高いクエリを投げたい
      • 金融、認証などの自前定義されたスキーマに従って使用したい
      • RDBMSのエコシステムを利用したい
  • Amazon DynamoDB
    • こんな場合はAmazon DynamoDB を利用する
      • より、スケーラブルに使いたいとき
      • データの持ち方としてJSONよりネストした構造に対して柔軟にアクセスさせたいという場合

 

## 既存のデータベースからの移行

以下の観点で割り振る

  • 停止時間を十分に確保できる
    • ダンプツール(停止時間は長いが、シンプルに行える)
  • 停止時間を十分に確保できないが、移行完了までに猶予がとれる
    • Database Migration Service(Amazon DMS)
      • アプリの停止時間は短く、シンプルではあるが、フルロードが終わるまでの時間がかかる
  • 移行完了までを高速にしたい
    • DMS とダンプのハイブリッド

 

## 料金

  • インスタンス料金
  • IO回数
  • ストレージ料金
  • バックアップストレージ料金(S3

 

## 雑感

Amazon DocumentDB について全く知らなかったので勉強になった。

JSON ベースでそのままデータベースに突っ込めて、クエリを発行するのはJSONベースでデータをストアしたい時に簡単に実装できそう。

DynamoDB とで技術選択で迷うことになりそう。現在の認識だとDynamoDB の方で実装したくなってしまうかもしれない。

RDSと似て裏側にEC2がみえるサービスになっていてマネージドでやってくれるのは嬉しい。