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

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

SAA学習-データベース-データベースの基礎

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

学習内容

単元 概要
データベースの基礎 最適なデータベース選択を実施するため様々なデータベースのタイプと活用方法を概要的に学習
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つの行をデータのかたまりとして取り扱う
  • 利用データ

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

NoSQLは、IoTと同様にビックデータ解析に利用します。
また、以下のようなポイントとなります。

  • 概要

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

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

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

NoSQLのタイプ

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/データレイク

分散型DB/データレイクは、ビックデータやIoTを累積し高速処理を可能とするDBとストレージの組み合わせとなります。
また、以下のようなポイントとなります。

  • 概要

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

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

    • ビックデータ、IoT
    • オンプレやソフトウェア:Impala、LIVE、presto+HDFS
    • AWSサービス:S3
KVS(Key Value Store):キーバリュー型

KVSは、シンプルなデータ構造にすることで高速処理を可能にしたDBとなります。
また、以下のようなポイントとなります。

  • 概要

    • キー分散することで、シンプルなオペレーションを高速に実施できるDB
  • アーキテクチャ

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

    • 大規模WEBサイトのバックエンドデータ(ユーザーセッション/ユーザー属性/事前計算データのキャッシュ)
    • メッセージングシステムのデータ(Twitterなど)
    • 大規模書き込みが必要なIoTセンサーデータなど
    • オンプレやソフトウェア:redis、riak
    • AWSサービス:ElastiCache、DynamoDB
  • データ構造 リレーショナルDBのテーブルとキーバリュー型のテーブルに分かれ以下のような概要図になります。

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

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

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

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

ワイドカラム型は、キーに対しカラムを大規模に登録できる形式となります。
また、以下のようなポイントとなります。

  • 概要

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

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

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

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

ドキュメントDB

ドキュメント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となります。
また、以下のようなポイントとなります。

  • 概要

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

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

    • 金融の取引処理データでミリ秒以下の応答時間を実現
全検索型エンジン×分散DB

データの全検索エンジンであるElasticsearchは分散データベースと連携しデータ全検索処理が可能となります。
また、以下のようなポイントとなります。

  • 概要

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

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

    • 半構造化データ(XML/JSON)
    • 高可用な全検索エンジン
    • サイト内データの検索
    • バイス登録状況/配信状況のリアルタイム可視化などリアルタイムの検索要件/検索行動の可視化
    • オンプレやソフトウェア:elasticsearch、kibana
    • AWSサービス:Elasticsearch Service
グラフDB

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

  • 概要

    • グラフ演算に特化したDBで、データ間のつながりを検索/可視化に利用
  • アーキテクチャ

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

    • オンプレやソフトウェア:neo4j
    • AWSサービス:Amazon Neptune
分散OLTP(RDB)

分散OLTPは、オンライントランザクション処理(Online Transaction Processing)を分散化する次世代DBとなります。
また、以下のようなポイントとなります。

  • 概要

    • グローバルに分散され強整合性を備えたデータベース
  • アーキテクチャ

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

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

DB種別とデータモデル

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

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

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

データべースの概念とAWSサービスの相関は以下のような図になります。

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

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