##背景
MySQLについての基礎を学習した後、AWSでのデータベース機能について知りたくなり、本を買って読んでみた。
あくまで学習の補助メモ機能として記載しているので、文が整っていない場合もある。ご了承いただきたい。
###読んだ本
AWS認定 データベース・専門知識
###読んだ章
今回読んだのは3章。NoSQLについて記載されていた章だった。
MySQLについての基礎は概ね理解してきたが、NoSQLのしかもAWSサービスについて知らないことが多すぎるので、読みながら学習し直した。
##はじめまして、NoSQL
この章は大きく分けて2つのサービスについて説明が書いてある。
1つ目はDynamoDBについて、もう一つはDocumentDBについてである。
###DynamoDBとは?
一言で言うと、AWSが提供するフルマネージド型のNoSQLサービスのこと。
特徴としては、低レイテンシーであること、またマルチリージョンに対応していることが挙げられる。
主な仕組みとして、まず「パーティションキー」と呼ばれる領域に分散させてデータを保持することを理解しておく必要があり、
そのパーティションキーを元にハッシュ値を取得→データをどのパーティションに格納するのか決めるというのが一連の流れとなっている。
####DynamoDBの可用性
主な特徴をまとめると以下だった
・書き込まれたデータは3つのAZへレプリケーションされて保存される
・データを読み込む際、「結果整合性」を担保してデータを読み込む
####DynamoDBのパフォーマンス
DynamoDBは書き込み操作・読み込み操作それぞれ「ユニット」と呼ばれる単位に換算し、その単位ごとに料金が発生する仕組みになっている。
利用する場合はこの単位を基準に考えるべきだと知った。
DynamoDBはオートスケーリングすることが出来るらしく、AWSコンソールで作成した場合はデフォルトでオートスケーリングがオンになっている。
設定値について、後ほど最小値や最大値を設定することも可能だ。
#####スキャンとクエリ
DynamoDBには「スキャン」と「クエリ」と呼ばれるAPIが2種類存在している。以下引用を記載する。
スキャンは前件を走査する方法です。読み込みユニットを消費します。
クエリはキーを元にDynamoDB側で絞り込んだデータを取得する方法です。クエリリクエストにおいて指定されたキーのみが読み込まれる為、対象となるItem分の読み込みユニットのみ消費します。
どちらも読み込みユニットを消費するが、データを取得する際はクエリを利用した方が読み込みユニットの消費を抑えられるとあった。
#####ローカルセカンダリインデックスとグローバルセカンダリインデックス
DynamoDBのテーブル内で検索する時、パーテイションキーとソートキーだけで検索するのは大変なので、検索用のタグのようなものを付けられるサービスが存在する。それが「ローカルセカンダリインデックス」と「グローバルセカンダリインデックス」だった。それぞれ引用する。
ローカルセカンダリインデックス(LSI)
・同一パーティション内への追加のインデックスという意味で、ローカルセカンダリインデックスと呼ばれます。
・シンプルなプライマリーキーのみをもつテーブルには、この概念は存在しない。
・ローカルセカンダリインデックスを含むテーブルの容量は10GBと決められている。
グローバルセカンダリインデックス(GSI)
・異なるパーティションキーをもつItemを含むデータ群からクエリを絞り込みたい時、グローバルセカンダリインデックスを作成することが出来る。
・テーブルの全パーティションにまたがるインデックスのこと。
・グローバルセカンダリインデックスは1つのテーブルに対し、20個まで作成可能
#####DAXって何?
DAXとは、インメモリキャッシュのこと
例えば、EC2からDynamoDBへアクセスした時、以前にもアクセスした記録=キャッシュがあった場合、DAXが値を返してくれる。
=DAXを活用することで、EC2などサービスからのアクセスをスムーズに行うことが出来る。
####DynamoDBのセキュリティ
#####アクセス制御
アクセスを制御する手段は、IAMによるもので、IAMユーザーやIAMポリシーをグループにアタッチすることで、各々のアクセス制御を行うとこと。
また、VPCエンドポイントを使用することで、インターネットを経由せずにDynamoDBへのアクセスが可能になる。
####DynamoDBのコスト
著書内では、コストがかかる場合についての詳細が記載されていた。
代表的なものだけ挙げる。
・読み込み/書き込みリクエスト
・バックアップと復元
・グローバルテーブルのレプリケート
・データ転送
※個々の料金については公式を参照するか、実際の本を購入して読むと良い
####DynamoDBのメンテナンス
基本的にフルマネージドサービスで且つサーバーレスの為、利用者がメンテナンスを考慮する必要はない。
一方、作成されたテーブルの管理は利用者の責任とあった。
パフォーマンス改善やバックアップなどのメンテナンスはどうしても利用者側が管理し運営する必要がある。
#####バックアップについて
DynamoDBのバックアップは2種類ある。
①オンデマンドバックアップ
②ポイントタイムリカバリ(PITR)
それぞれの特徴は以下の通り。
######オンデマンドバックアップ
・ユーザーの任意のタイミングで取得できるバックアップ
→特定の時点のバックアップが可能になり、いつでも復元できる
・AWSマネジメントコンソールで使える
・テーブルのサイズに関わらず、バックアップにかかる時間は数秒
→バックアップの時間を気にせず、巨大なテーブルに対するバックアップができる
→長期バックアップとしても利用される
#####ポイントタイムリカバリ(PITR)
・自動バックアップ
・突然のデータ損失が生じても、過去35日間の任意の時点に復元できる
→長期バックアップには向いてない
・復元データを新しいテーブルとして作成する
→以前利用していたテーブルに新規内容として追加で書き込まれる訳ではない
####DynamoDBのモニタリング
モニタリングを行う時は、CloudWatchを用いて実施するのが望ましいとあった。
また、他の方法として、CloudTailが挙げられており、CloudTailを利用することで、IAMユーザがDynamoDBへリクエストを行ったのかを確認できる。
###DocumentDBとは?
フルマネージド型のMongoDB互換ドキュメントデータベースサービスのことをDocumentDBと呼ぶ。
また、DocumentDBはAmazon Auroraとも似通った特徴を持っている。著書内では2つの比較図が記載されていた。
MongoDBのことをよく知らなかったので、参考資料に記載のサイトで学習した。
##参考資料
やってみようNoSQL MongoDBを最速で理解する