おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

AWS認定学習記録-データベース-データベースの基礎

今回から新しい単元に進みます。
ここ数日体調と気持ち的に進められる状態でなく停滞しておりましたが、学習を再開します。
ハンズオンについては高額であること当月まで1回目受験すれば2回目は9月まで無料なので、
試験問題の消化を優先に進める学習方法に充てようと思います。

講義関連の内容はノートを作る予定ではあります。

今回のテーマ:データベースの基礎

学習内容

単元 概要
データベースの基礎 最適なデータベース選択を実施するため様々なデータベースのタイプと活用方法を概要的に学習
DynamoDBの概要 DynamoDBの基本的な機能や仕組みについて学習
DynamoDBの構築 実際にDynamoDBを構築し、設定方法や操作方法を学習
Auroraの概要 Auroraの基本的な機能や仕組みについて学習
Auroraの構築 実際にAuroraを構築し、設定方法や操作方法を学習
EFSの概要 EFSの基本的な機能や仕組みについて学習
EFSの構築 実際にEFSを構築し、設定方法や操作方法を学習
増大するデータ量への対応 IoTやビックデータなどの増大するデータ量に対応するため、基本技術などの知識を学習
Kinesisの概要 AWSで大量データ処理をする仕組みのKinesisの基本的な機能や仕組みを学習
Kinesisの構築 実際にKinesisを構築し、設定方法や操作方法を学習(かなり高額)

概要

データベース

  • データベースは関連したデータの形式をそろえて収集・整理し、検索などの操作やデータ管理を実行するシステムとなります。
  • データベースを実現したシステムをDBMS(Data Base Management System) と呼称されます。
  • 基本的にはテーブルという表形式でデータを格納してます。
  • 追加・参照・更新。削除などのデータ操作を容易に実行するソフトウェアやデータモデルと一体となり、CRUDと呼称されます
    ・Create 追加:データを整理し保存
    ・Read 参照:必要なデータを参照または抽出
    ・Update 更新:データの変化に応じて変更
    ・Delete 削除:不要なデータを削除

データベースとストレージの違い

データベース

  • データベース内のデータを保存する装置はストレージであるがデータベースではない
  • ストレージ+データを管理・操作するデータベースソフトウェア

ストレージ

  • コンピュータの主要な構成要素の一つで、データを永続的に記憶する装置

データベースの役割

データ操作を異常なく実行し、データを安全に保護ながら保存・操作ができる仕組みを提供してます。

  • データ操作に関わる課題
    ・システムがクラッシュした際のデータが消えないか?
    ・データを誤って削除した場合の対処はできないか?
    ・データ抽出に誤りがないか?
    ・2人以上が同時に同じデータにアクセスした際どうなるのか?
    ・大量のデータをうまく検索できないか?

データベースの役割を支える仕組みは以下2点となります。

トランザクション

データベースを一環した状態から別の一環した状態へ変化する1つの処理の束のこと

  • 同時アクセスした場合、上手く処理する
  • データ処理に失敗したらもとに戻す
  • システムがクラッシュしてもデータを保護する

トランザクション:ACID
ACIDは信頼性のあるトランザクションシステムの持つべき性質のこと

* Atomicity(原子性)
トランザクションが「すべて実行される」か「一つも実行されない」のどちらかの状態になる性質

  • Consistency(整合性)
    トランザクションの前後でデータ整合性が保たれ矛盾のない状態が継続される性能

  • Isolation(独立性)
    トランザクション実行中の処理過程が外部から隠匿され他の処理に影響を与えない性質

  • Durability(耐久性)
    トランザクションが完了したら、その結果は記録されクラッシュしても消失しない性質

トランザクション:耐久性
データを更新する際、COMMITとすると更新が反映されるが、COMMITしないとデータをロールバックし保護します。
以下に例を記載します。

f:id:In-houseSE:20210621074554p:plain

トランザクション:整合性
同時に複数人がアクセスした場合、データの整合性を維持する必要があります。
データの整合性を保証するために。結果整合性と強い整合性の2つで維持を行います。
結果整合性は、変更中であっても更新前の古いデータを参照可とします。
強い整合性制は、変更中ならば更新時の該当データを参照負荷とします。

データモデル

また、データベースのデータの持ち方など構造や処理を定めるデータの論理的な表現方法となります。
データモデルを選定してから、データモデルに応じたトランザクション処理を決定します。
データモデルの利用用途に応じた以下のような使い分けをされます。

  • リレーショナルモデル(今回の学習主テーマ)
  • グラフモデル
  • キーバリューストア
  • オブジェクト
  • ドキュメント
  • ワイドカラム
  • 階層型
最適なデータベースを選択

ワークロードに応じた最適なデータベースサービスを利用します。
関連するデータベースサービスは以下となります。

  • RedShift
  • RDS
  • DynamoDB
  • Aurora
  • Elasticserch
データベース

データベースは大きくリレーショナルDBか非リレーショナルDBの2種に分かれます。

  • リレーショナルDB:これまでのDB(OraclePostgreSQLなど)
  • NoSQL:ビックデータ向けDB
リレーショナルDB

データベースの基本はリレーショナルDBシステム(RDBMS)です。
業務システム向けのDBの基本となります。

  • 概要
    ・データ間の関係性が定義されたデータを取り扱う一般的なDBシステム
    ・列と行がいくつかのテーブルで定義されて、テーブル間のリレーションが設計される
    ・データ操作にSQLを利用

  • アーキテクチャ
    ・テーブル間のリレーションが定義されたデータモデル
    ・行思考で1つの行をデータのかたまりとして取り扱う

  • 利用データ
    ・会計データ/顧客データといった構造化データ


  • ・オンプレやソフトウェア:OracleMySQLSQLServerPostgreSQLなど
    AWSサービス:RDS

NoSQL

IoTと同様にビックデータ解析にはNoSQL DBを利用します。

  • 概要
    ・リレーショナルデータ構造を持たずSQLを利用しないDBの総称
    ・操作しやすいように一部SQLSQLに似たクエリ処理を適用したモデルも存在します。

  • 利用データ
    ・構造化されていないKeyとValueのみ(ID番号に一列に全データを格納)のKVSデータ
    ・動画/画像/ドキュメントなど非構造化データ
    XML/JSONなどの半構造化データ

  • 非構造化データ
    テキスト、動画、音声など

  • 半構造化データ
    XMLJSON、文章など

NoSQLのタイプ

キーに対するデータ形式の格納方法の違いで以下のようなタイプに分類されます。

  • キーバリューストア
    ・キーに対しバリュー(値)を入れる単純な構造
    ・高速なパフォーマンスと分散型拡張に優れている
    ・データ読込が高速

  • ドキュメントデータベース
    ・キーに対しバリューではなく、JSONXMLなどのデータを格納
    ・複雑なデータ構造を扱うアプリで生鮮性高く柔軟に開発する

  • ワイドカラムストア
    ・列指向とも呼ばれ、キーを利用するがデータはカラム(列)で管理する。
    ・非構造データを大規模に格納することを目的にしている
    ・行ごとに任意の名前のカラムを無数に格納できる

  • グラフデータベース
    グラフ理論に基づき、データ動詞の関係をグラフで相互に結びつけた要素で構成されます。
    RDBと比較し高速横断検索が可能となります。

ビックデータの活用

データの特徴に応じて利用するデータベースを選択します。
例としては以下のような選定になります。

f:id:In-houseSE:20210623073225p:plain

データベースの全体像

データベースの全体を分散型、拡張型の軸とオペレーション向け、分析向けの2つの軸で表すと以下のように分類されます。

f:id:In-houseSE:20210623074304p:plain

データウェアハウス(DWH)

BIツールなどと連携し、構造化データを利用した経営分析向けのデータベース

  • 概要
    ・データの抽出・集約に特化したBIデータ分析用のデータベース
    ・読み込むデータ構造を予め設計し、加工してから利用分のデータを蓄積
    ・レスポンス重視でデータ抽出・集計が速いが、更新・トランザクションは遅い

  • アーキテクチャ
    ・データをパーティショニングし、複数ディスクから読み込む
    ・列志向でデータを格納

  • 利用データ
    ・会計データなどの業務系構造化データを分析ように加工しBIで利用
    ・KPI測定/競合分析/アクセス分析など


  • ・オンプレやソフトウェア:Oracle Exadata、TERADATA、VERTICA、Greenplum
    AWSサービス:Redshift

分散型DB/データレイク

ビックデータやIoTを累積し高速処理を可能とするDBとストレージの組み合わせ

  • 概要
    ・データ中抽出に特化したDB
    ・分散しデータを保存しており、ビックデータの高速処理向け

  • アーキテクチャ
    SQLライクなクエリで操作可能
    ・INSERT/UPDATE/DELETEはない
    トランザクションはない
    ・データ書き込みは一括ロードまた全件削除のみ

  • 利用データ
    ・ビックデータ、IoT


  • ・オンプレやソフトウェア:Impala、LIVE、presto+HDFS
    AWSサービス:S3

KVS(Key Value Store):キーバリュー型

シンプルなデータ構造にすることで高速処理を可能にしたDB

  • 概要
    ・キー分散することで、シンプルなオペレーションを高速に実施できるDB

  • アーキテクチャ
    ・強い整合性を犠牲にし、結果的な整合性を採用
    ・分散向けデータモデル/クエリの採用
    トランザクション/集計/JOINなど不可

  • 利用データ
    ・大規模WEBサイトのバックエンドデータ(ユーザーセッション/ユーザー属性/事前計算データのキャッシュ)
    ・メッセージングシステムのデータ(Twitterなど)
    ・大規模書き込みが必要なIoTセンサーデータなど


  • ・オンプレやソフトウェア:redis、riak
    AWSサービス:ElastiCache、DynamoDB

  • データ構造

リレーショナルDBのテーブル

部門 場所 役職 名前
人事 豊洲 部長 佐藤
製造 新宿 課長 上原
総務 三鷹 社員 村上

キーバリュー型DBのテーブル

キー バリュー
1 名前:佐藤、部門:総務、場所:豊洲、役職:部長
2 名前:上原、部門:人事、場所:新宿、役職:課長
3 名前:村上、部門:製造、場所:三鷹、役職:社員
ワイドカラム型

キーに対しカラムを大規模に登録できる形式

  • 概要
    ・分散しシンプルなオペレーションを高速に実施できるDB
    ・データ取得する際にデータ結合しなくても済むように可能な限り多くのデータを同じ行に保持

  • アーキテクチャ
    ・結果整合型を採用
    ・キースペース、カラムファミリ、ロウ、スーパーカラム、カラムの入れ子構造
    SQLライクなデータ操作が可能
    ・データ操作は挿入、削除、参照のみが可能で、更新は挿入による上書き処理

  • 利用データ
    Facebook/Twitterなどのソーシャルデータの位置情報データストレージ/リアルタイム分析/データマイニング


  • ・オンプレやソフトウェア:cassandra、APACHE HBASE
    AWSサービス:DynamoDB

  • データ構造

f:id:In-houseSE:20210623083756p:plain

ドキュメントDB

キーに対しドキュメント思考でXMLなどのデータを格納

  • 概要
    ・ドキュメント思考データベースは、様々なデータ構造のドキュメントを混在し保存することができる

  • アーキテクチャ
    JSON/XMLをデータモデルに利用
    ・小規模データの同期集計処理が可能だが、バッチ処理は不向き
    SQLライクなデータ操作が可能で、KVSよりもクエリが豊富なため操作しやすい
    ・Shardingによるデータベース分散化

  • 利用データ
    ・半構造化データ(XMLJSON)
    ・大規模WEBのログ保管
    ・オンラインゲーム
    ・カタログ管理


  • ・オンプレやソフトウェア:mongoDB、MarkLogic、CouchDB relax、Couchbase
    AWSサービス:Amazon DocumentDB、mongoDB

  • データ構造

f:id:In-houseSE:20210623084759p:plain

インメモリデータグリット

KVSの仕組みをメモリを利用し高性能にしたDB

  • 概要
    ・大量データを多数のサーバのメモリ上で分散し管理する技術
    ・ミリ秒単位の高速応答処理が可能

  • アーキテクチャ
    ・データをメモリ上に置くことで、高速なデータアクセスを実現
    ・データを多数のサーバで分散し管理

  • 利用データ
    ・金融の取引処理データでミリ秒以下の応答時間を実現


  • ・オンプレやソフトウェア:APACHE GEODEORACLE Coherence、hazerlacast、apache Ignite、Infinispan
    AWSサービス:Redis ElastiCache、Memcached ElastiCache

全検索型エンジン×分散DB

データの全検索エンジンであるElasticsearchは分散データベースと連携しデータ全検索処理が可能

  • 概要
    ・全検索型のデータ検索エンジンで、分散データベースと連携し検索データベースを構築
    ・抽出条件との関係性/関連性が高いデータを抽出し返す

  • アーキテクチャ
    ・Elasticsearchは全文検索用のライブラリ Apache Luceneを利用したデータストア ・分析の柔軟性や速度が高く、分析/蓄積/可視化環境を容易に構築可能

  • 利用データ
    ・半構造化データ(XML/JSON)
    ・高可用な全検索エンジン
    ・サイト内データの検索
    ・デバイス登録状況・配信状況のリアルタイム可視化などリアルタイムの検索要件/検索行動の可視化


  • ・オンプレやソフトウェア:elasticsearch、kibana
    AWSサービス:Elasticsearch Service

グラフDB

グラフ構造でデータ間のつながりを検索・可視化するDB
構造のイメージはマインドマップのような形態をとります。

  • 概要
    ・グラフ演算に特化したDBで、データ間のつながりを検索/可視化に利用

  • アーキテクチャ
    ・グラフデータ構造を取るため、RDB以上にスケールアウトができない
    ・レコード数が増えると検索にかかる時間と難易度が増大
    ・ACID特性が担保されており、オブジェクト間の関連づけを簡単に表現できる

  • 利用データ
    ・最短経路検索
    ・金融取引の詐欺検出
    ソーシャルネットワークによるリレーション計算


  • ・オンプレやソフトウェア:neo4j
    AWSサービス:Amazon Neptune

分散OLTP(RDB)

オンライントランザクション処理(Online Transaction Processing)を分散かする次世代DB

  • 概要
    ・グローバルに分散され強整合性を備えたデータベース

  • アーキテクチャ
    ・リレーショナルデータベースの構造と非リレーショナルデータベースの分散スケーラビリティを兼ね備える
    ・高い可用性、構成のトランザクションと強整合性が実現

  • 利用データ
    ・大規模な業務データ処理


  • ・オンプレやソフトウェア:なし
    AWSサービス:Amazon Aurora

DB種別とデータモデル

データ構造がシンプルなデータベースが分散しやすくビックデータ処理に向いている

f:id:In-houseSE:20210701083231p:plain

データベースとAWSサービスの相関図

f:id:In-houseSE:20210701084528p:plain

今回のテーマは以上です。