データベース
データベースとは
データベースとは、形式やルールを決めて整理・管理された複数のデータの集合体のこと。

(参考)
基本的なデータベースはテーブルという表形式でデータを格納している。



(参考)
データベースの操作
データベースの基本操作をCRUDと呼ぶ。
- Create(追加):データを整理して保存したい
- Read(参照):必要なデータを参照または抽出したい
- Update(更新):データの変化に応じて好きなときに更新したい
- Delete(削除):必要ないデータを削除したい
データベースの役割
-
トランザクション:データベースをある一貫した状態から別の一貫した状態へと変更する1つの処理の束のこと
- 銀行の入出金のようなシステムでは、あるセッションの口座に対しての処理は、他のセッションに邪魔されずに一貫して行わなければならない


(参考)https://phoeducation.work/entry/20220718/1658098680
- 銀行の入出金のようなシステムでは、あるセッションの口座に対しての処理は、他のセッションに邪魔されずに一貫して行わなければならない
-
データモデル:実世界におけるデータの集合をDBMS(DB管理システム)上で利用可能な形に落とし込むためのモデル
データベースの種類
多く分けてリレーショナルデータベースか非リレーショナルデータベースの2つがある。
リレーショナルデータベース
テーブルと呼ばれる表形式でデータが保存されている。
複数のテーブルがお互いに関連付けされている。


非リレーショナルデータベース型(NoSQL)
リレーショナルデータ構造をもっておらず、SQLを必ずしも必要としない(Not Only SQL、NoSQL)データベース。
- ドキュメントベース:JSONなどのドキュメント形式でデータを保存
- キーバリューストア(KVS):一意のキーとそれに関連する値のペアでデータを保存。高速な読み書きが可能
- カラムファミリーストア:データをカラムのグループ(カラムファミリー)として保存し、各行が異なるカラムセットを持つことができる。時系列データの格納と分析など
- グラフベース:データをノードとエッジとして保存し、それらの間の関連性を強化・表現する。ソーシャルネットワークでの友人の推薦や関係の解析など
(参考)
DynamoDB
ストリーミングデータを利用したリアルタイムデータ処理などに最適なデータベースとして利用するフルマネージド型のNoSQLデータベース。
キーバリュー型でデータを操作できる。
| できること | できないこと/向いていないこと |
|---|---|
|
|
ユースケース
ビッグデータ処理向けか大量データ処理が必要なアプリケーション向け。
- ビッグデータ
- IoTデータなどキーバリュー型のシーケンシャルなデータを収集・蓄積・分析するのに最適
- Amazon EMRのHadoop処理と連携してビッグデータ処理が可能
- アプリケーション
- セッションデータやメタデータなどのアプリケーション上でシンプルにデータを蓄積
- 高パフォーマンスな処理が必要なデータを保存
具体的なケース
- ユーザー行動データ管理
- ゲームのセッションデータやWEBサイトのユーザー行動データを保存・処理する
- ユーザーごとの行動履歴管理に利用する
- バックエンドデータ処理
- モバイルアプリのバックエンド/バッチ処理のロック管理/フラッシュマーケティング/ストレージのインデックス
性能
テーブルサイズは無制限。1つのデータは400KBの制限あり。
1桁台のミリ秒レイテンシーを実現。DAXを利用すればマイクロ秒単位でのリクエストが可能。
パーティショニング
大量データを高速処理するため、パーティショニングによる分散処理を行っている。
「パーティション」と呼ばれる分割された小さな領域(ストレージ)に、アイテムを分散して格納する。

テーブル設計
テーブル→項目→属性と設計していく。
- テーブル:データのコレクションのこと
- 項目:各テーブルの中にて項目を作ってデータを作成する。項目間で一意に識別可能な属性グループとなる
- 属性:各項目は1つ以上の属性で構成される。属性はそれ以上分割する必要がない最小のデータ単位
キャパシティモードの設定
テーブルを作成する際に設定する。
- オンデマンドモード
- 利用するキャパシティが予測できないときに選択するモード
- トラフィック量の予測が困難な場合に、リクエストの実績数に応じて課金
- オンデマンドでRead/Write処理に自動スケーリングを実施
- プロビジョニングモード
- 利用するキャパシティが事前予測できるときに選択するモード
- 事前に予測したWCU(書き込みキャパシティユニット)とRCU(読み込みキャパシティユニット)を設定する
- UpdateTableオペレーションを使用して、必要な回数だけWCUまたはRCUを増やすことができる
- キャパシティ容量に近づくとHTTP 400コードとProvisionThroughputExceededExceptionが発生する
インデックス
- 暗黙的なキー:データを一意に特定するために暗黙的にプライマリーキー(ハッシュキーやレンジキー)として宣言して検索に利用するインデックス
- 明示的なキー:ローカル・セカンダリ・インデックス(LSI)とグローバル・セカンダリ・インデックス(GSI)の2種類を設定できる。プライマリーキーでは検索要件を満たせない場合に検索性を上げるために使用する
プライマリーキー
- ハッシュキー
- KVSにおけるキーに相当するデータを一意に特定するためのIDなどのこと
- ハッシュ関数によってパーティションを決定するためハッシュキーと呼ぶ
- ハッシュキーは単独での重複を許さない
- レンジキー
- ハッシュキーにレンジを加えたものをレンジキーまたは複合キーと呼ぶ2つの値の組み合わせによって1つの項目を特定する
- 複合キーは単独であれば重複が許される
セカンダリ・インデックス
ハッシュキーやレンジキーだけでは検索要件が満たせない場合にLSIとGSIを追加する。
- ローカル・セカンダリ・インデックス(LSI)
- ソートキー以外にインデックスを作成できる検索方式
- 複合キーテーブルにのみ設定可能
- グローバル・セカンダリ・インデックス(GSI)
- インデックス用に新たにパーティションキーとソートキーを指定する検索方式
- ハッシュキーテーブルおよび複合キーテーブルどちらでも設定可能
- ハッシュキーの代わりになるため、ハッシュキーをまたいで物理パーティションに囚われない検索が可能
DynamoDBストリーム
DynamoDBテーブルに保存された項目の追加・変更・削除の発生時に履歴をキャプチャできる機能。
ユースケース
データ更新をトリガーとして処理を実行するアプリケーション機能や、DynamoDBテーブルのレプリケーションに活用できる。
- クロスリージョンレプリケーション:ストリームによるキャプションをトリガーとしてクロスリージョンレプリケーションを実施することが可能
- データ更新をトリガーとしたアプリケーション機能:データ更新に応じた通知処理などのアプリケーション処理の実行など
DynamoDB Auto Scaling
スケーリングポリシーに基づいてテーブルまたはGSIを自動でスケーリングする。
DynamoDB Accelerater(DAX)
DynamoDBにインメモリキャッシュ型の機能(DAXクラスター)を付加するマネージド型サービス。
マイクロ秒単位の処理が可能となる。
マルチAZ DAXクラスターにより、1秒間に数百万件のリクエストを処理できる。
バックアップとリカバリ
- オンデマンドバックアップ
- 任意のタイミングでテーブルの完全なバックアップを作成する
- 長期間の保存とアーカイブを実施
- ポイントインタイムリカバリ
- 連続バックアップを有効化して、バックアップを継続的に実施する。そのため、任意のタイミングでリカバリできる
- 過去35日間の任意の時点にテーブルを復元することができる
Aurora
マルチAZで分散されたクラスター構成により、高速・高性能なリレーショナルデータベース。
MySQLの2.5~5倍の性能を商用データベースの10分の1の価格で提供。
3つのAZ×2つのコピー=合計6つのコピーで構成され、高い並列処理性能によって大量の読み書きをするのに適したDB。
最大15個のリードレプリカ。
MySQLとPostgreSQLのスナップショットからAuroraへマイグレーションが可能。

Aurora Serverless
データベースの運用管理を自動化し、必要に応じてリソースをスケーリングできるAWS独自のマネージドサービス。
予測不能で変動が激しいケースでコストを抑えられる。
インスタンスサイズを決めず、ACU(Aurora Capasity Units)の単位でデータベースの処理能力を管理する。
Redshift
AWS上に高速でスケーラブルな費用対効果の高いデータウェアハウスを構築できるマネージド型サービス。
列ベースでデータを保存。
大規模並列クエリ実行によって高パフォーマンスを達成。
ノードタイプ
利用するデータサイズやケースに応じてノードタイプを選択。
-
RA3
- 高性能コンピューティングとスケーリングされるストレージを利用する
- コンピューティングをストレージから別にスケーリングできる柔軟性
- データ量の増大が予想される場合に推奨
- ホットデータには高性能のSSDを使用し、コールドデータにはS3を使用
-
DC2(Dense Compute、高密度コンピューティング)
- 高いスループットと低レイテンシーを必要とするワークロード
- 高速CPU、大容量RAM、SSDを使用
- 未圧縮で1TB未満のデータセットではDC2の利用を推奨
Redshift Serverless
クラスターをセットアップ、調整、管理することなくデータにアクセスして分析可能な構成。
機械学習によるクエリ効率化
機械学習によってクエリ実行を調整し、効率的な自動実行を補助してくれる。
- テーブルメンテナンスの自動化
- テーブルの分散スタイルの自動最適化
- 統計情報の自動更新
- データの再編成の自動実行
- 自動ワークロード管理
- 複数クエリの実行をワークロード管理で設定する際に、機械学習でクエリ実行の優先順位決めを自動化する
- シヨートアクセルレーション
- 機械学習アルゴリズムを使用して対象のクエリを1つ1つ分析し、クエリの実行時間を予測し、実行時間が短いクエリを、実行時間が長いクエリよりも優先して実行
- WLM(ワークロード管理)キューを削減可能
- 設定のレコメンデーション
- 自動でクラスターパフォーマンスなどを分析し、最適化やコスト削減に対するレコメンデーションを実施
トラフィック制御
拡張VPCルーティングによってVPCにトラフィックを強制しつつ、モニタリングする設定が可能。
VPCフローログを使って、トラフィックを監視できる。
暗号化
- 保存データ
- AWS KMSを利用して暗号化
- 暗号化対象はディスク内に保存されているデータとスナップショット
- 通信
- Amazozn RedshiftクラスターとSQLクライアント間の送信時のデータをJDBC/ODBC経由で暗号化
- ACMによる証明書に基づいてSSL通信を実施
Redshift Spectrum
ユーザーが管理するS3バケットに対して直接データ解析を実行可能。
ElastiCache
メモリにキャッシュを保持して、高速処理を実現するデータベース。
分散インメモリキャッシュサービスの構築・管理及びスケーリングを容易に実施することができるフルマネージド型サービス。
ユースケース
高速アクセスしたい場合に使用する。
- セッション管理
- IOT処理とストリーム分析
- メタデータ蓄積
- ソーシャルメディアのデータ処理/分析
- Pub/Sub処理
- DBキャッシュ処理
アプリケーションでデータの即時反映が必要な場合に使用する。
- ユーザーのマッチング処理
- レコメンデーションの結果処理
- 画像データの高速表示
- ゲームイベント終了時のランキング表示
エンジンの選択
- Redis
- シングルスレッドで動作し、すべてのデータ操作は排他的
- スナップショット機能がある
- データを永続化できる
- Memcached
- マルチスレッドで動作
- スナップショット機能がない
- データを永続化できない
- フェイルオーバーや復元ができない
詳細
- Redis
- 複雑なデータ型が必要
- インメモリデータセットをソートまたはランク付けする必要がある
- SSDキャッシュを利用して低コストで大容量のキャッシュ運用が可能
- pub/sub機能が必要
- 自動的なフェイルオーバーが必要である
- キーストアの永続性が必要である
- バックアップと復元の機能が必要である
- 複数のデータベースをサポートする必要がある
- Memcached
- シンプルなデータ型が必要
- 複数のコアまたはスレッドを持つ大きなノードを実行する必要がある
- データベースなどのオブジェクトをキャッシュする必要がある
- キーストアの永続性は必要ない
- バックアップと復元の機能が必要でない
- 複数のデータベースを利用できない
セキュリティ
Redisはデータ転送時の暗号化、データ保管時の暗号化、Redis Authによる認証を実施することが可能。
- 保管時の暗号化
- AWS KMSにより、データ同期やバックアップオペレーションの実行中にオンディスクデータが暗号化される
- 対象は同期・バックアップ・スワップ操作中のディスクとAmazon S3に保存されているバックアップデータ
- 通信の暗号化
- RedisとMemcachedでTLS暗号化を実施できる
- データ転送時(クラスターのノード間、クラスターとアプリケーション間など)に暗号化を実施
- Redis Auth
- Redis認証トークンを使用して、クライアントがコマンド実行前にトークン(パスワード)を要求して認証を実施する
その他データベース
Amazon DocumentDB
ミッションクリティカルなMongoDBのワークロードを運用するためのJSONドキュメントデータベース。
毎秒数百万規模の高速ワークロードに対応できるよう自動スケーリング。
Amazon Keyspaces(for Apache Cassandra)
Apache Cassandra向けのフルマネージド型のNoSQLデータベースサービス。
数ミリ秒単位の処理時間/毎秒数千のリクエストに対応するアプリケーションを構築可能。
産業用機器のメンテナンス、取引監視、フリート管理、ルート最適化など1桁ミリ秒のレイテンシーが必要なアプリケーションに最適。
Amazon Quantam Ledger Databese(QLDB)
ブロックチェーン技術を利用したフルマネージド型の分散台帳データベース。
データの全変更がすべて追跡され、変更履歴が長期間維持される。
【ユースケース】
- 台帳形式のアプリケーション開発
- クレジット取引などの金融取引の完全で正確なレコードを処理する
- 各取引の履歴を記録し、施設から店舗までの製造、出荷、保存、販売の各パッチの詳細を提供する
Amazon Timestream
IoTおよび運用アプリケーションに適した、高速かつスケーラブルなサーバーレス時系列データベースサービス。
- 1日あたり数兆件規模のイベントを最大1,000倍の速度でより簡単に保存および分析できる
- 毎日数百万のクエリを処理し、必要に応じて自動的にスケーリングできる
- 直近のデータをメモリに保存して高速処理し、過去データはコスト最適なストレージに移行する
- IoTアプリケーションによって生成された時系列データを迅速に分析する
Amazon Neptune
IDグラフ、ナレッジグラフ、不正検出などのグラフのユースケースを強力にサポートする高速のグラフデータベース。
- データ間の関連性をグラフ形式で関連付けて、複雑な処理を実現する
- ER図では困難な関係性を直感的にわかりやすいグラフ形式として構成し、検索クエリも速度に加えてコード量も減らすことができる
- 毎秒100,000以上のクエリ実行が可能
- クラスタあたり最大128Tibのストレージスケーリング、最大15レプリカのリードスケーリングが可能
- ソーシャルグラフや顧客の360度ビューなどが実現可能
AWS Backup
AWSのデータベースとストレージのバックアップを自動化する一元管理ソリューション。

