非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

RDBMSとは

データベースまわり調べてみた。

RDBMS

Relational DataBase Management System
リレーショナルデータベースを管理するソフトウェア

概要

  • データを列と行の中にまとめ、テーブルの中に並べるもの
  • データの比較には同じ位置のフィールドを見ればよいので、データの結合や抽出が容易。
  • テーブルが複数の場合、主キー等関連付け内部結合を行うことで、一つテーブルのように扱える
  • データベースとのやりとりはSQL言語が用いられる。

クライアント・サーバーモデル

クライアントとサーバーが連携し、プログラムやアプリケーションを効率的に実行するモデル

クライアント

  • データ処理を要求する動作単位。
    • サーバーに要求を出して情報や資源を利用するハードやソフトのこと
    • データベースに対してアクセスを要求するプログラムのこと

サーバ

  • データ処理を実行する動作単位。
    • 情報や資源を一元的に管理し、提供する役割のハードやソフトのこと
    • データベース本体が存在する側のこと

3層クライアントサーバーシステム

クライアント/サーバー型のアプリケーションを3つの機能モジュールに分けて開発する手法

  • ユーザーインタフェース部分を実現するプレゼンテーション層
  • データの加工処理を実行するファンクション層
  • データベースにアクセスするデータ層

概要

  • 機能的に明確に区別することでシステム性能や開発・保守効率の向上を狙う。
  • 3つの層は通常、別々のコンピュータで動かすが、同一のコンピュータ上にあっても構わない。
  • 特徴として、データ加工処理をサーバー側で実行させること。
    • クライアントとサーバーの間のデータ通信量が減るため、低速な回線を使っていたり、クライアントの台数が多い場合でも、応答速度が落ちにくい。
    • 仕様の変更が容易、並行開発により生産性も向上
    • システム保守の負荷が軽減される
      • サーバー上のデータベースの構造やデータの処理ロジックを変更しても、クライアント上のモジュールを変更しなくて済むため

2層クライアントサーバーシステム

サーバーにデータベース・アクセス・モジュールだけを載せ、その他の処理をクライアント側で実行する従来の一般的なクライアント/サーバー型アプリケーション開発手法

主流のRDBMS

MySQL

  • オープンソースで商用ライセンスとGNU GPLの元で無償
  • ストレージエンジンを選択でき、特に高速参照の性能は高い。
    • マルチストレージエンジン方式を採用
  • UNIX系、Linux、Microsoft Windows、OS/2MacOSで動作

Oracle Database

  • 商用
  • 大規模向け有償製品。
  • UNIXLinux、Windows OSをサポート。

PostgreSQL

SQLite

  • オープンソース
  • サーバとして動作するのではなく、アプリケーションに組み込んで利用する軽量のデータベース
  • 大規模システムには不向きだが、中小規模のシステムであれば、機能、性能面において問題なく利用できる。

Microsoft SQL Server

  • 商用
  • Windowsとの親和性が高い

ストレージエンジン

更新系はInnoDB、参照系はMyISAM

  • MyISAM(デフォルト)
    • 全文検索機能やテーブル圧縮に対応
    • パフォーマンス系にメリット
      • WHERE条件なしのSELECT COUNT(*)が速い
      • 巨大なテーブルをフルスキャンする処理の効率が良い
    • テーブル単位のロック
  • InnoDB
    • トランザクションに対応
    • 外部キーが可能
    • 障害対応系にメリット
      • リカバリが簡単でMyISAMに比べて時間がかからない。
      • オンラインバックアップができる
    • 行単位でロックを行うため,並列性が高い

同期方式

  • マスタの更新と同時にすべてのスレーブを更新。
  • 全てのスレーブの処理終了を待つ必要があるため、スレーブが増えるほど全体の処理に時間がかかるが、常にすべてのデータベースで同じデータが保持されることが保証される。
  • いずれかのデータベースで障害が起きると、自動的にそのデータベースを同期対象から除外し、正常なデータベースに対してのみ同期処理を行う。
  • マスタで障害が発生した場合、スレーブのうちいずれかを代理マスタに昇格させ、マスタを同期対象から除外する。
  • 自動的な縮退運用への移行と、縮退運用に入ったことを外部へ通知する機構を備えている。

非同期方式

  • データの更新時にまずはマスタの更新。
  • マスタは更新の際、更新ログを出力し、この更新ログを順次スレーブに適用することで、同じデータが保持される。
  • マスタを更新してから、スレーブで更新ログを適用するまでの間は、一時的にデータが一致していない状態となるが、スレーブ数増加による処理時間の増加は発生しない。
  • マスタで障害が発生した場合、クライアントからの接続先をいずれかのスレーブに切り替えることで運用を継続できる。
    • バックアップしか行っていない場合のように、完全復旧までシステムの運用ができなくなってしまうということはない。
  • レプリケーションの最初のアクションはスレーブで、スレーブごとに任意のタイミングでレプリケーションを実行できる。