データベース(DB)とは何か?代表的な管理システムと運用の注意点を解説

    test

    システム運用において、データを効率的に管理するデータベースはなくてはならない存在です。しかしデータベースにも様々な種類があり、それぞれがどのような特徴を持っているのか分かりづらいのではないでしょうか。

    そこでこの記事では、データベースの基礎的な説明と代表的な管理システム、また運用に際して注意すべき点を解説します。

    データベース(DB)とは?

    データベースとは、決まった形式で情報を集めて整理したもので、特にコンピュータ上で情報を集積したものを指します。データベースには、情報の「集積」「整理」「加工」といった主に3つの役割があります。まず情報を集積することはデータベースの最も基本的な機能となりますが、単に集めるだけではデータベースとはいえません。それらの情報を扱いやすく整理して、必要な時にはすぐに取り出して加工できるようにすることが求められます。

    また、データベースは以下の3つの要素で構成されます。

    1. テーブル: データを表形式で保存するテーブルは、データベースの基本単位です。各テーブルには特定のデータタイプに関連する情報が格納されます。
    2. フィールド: テーブル内の各列はフィールドであり、特定のデータ項目を表します。たとえば、従業員のテーブルでは「名前」や「給与」がフィールドとなります。
    3. レコード: テーブル内の各行はレコードであり、特定のエンティティに関連付けられた情報を含みます。たとえば、各従業員のデータが1つのレコードです。

    データベースの具体例としては、表計算ソフトなどを使って顧客情報を管理し「氏名」「会社名」「連絡先」などの各項目ごとに情報を整理したものが挙げられます。情報を集積し整理しており、必要な時には表計算ソフトの検索機能・抽出機能などで必要な情報を取り出すことができる状態です。

    しかし大規模なシステムでデータを扱う場合は、表計算ソフトを使って手作業で情報を管理するのはとても追いつきません。そこでデータベースというシステムを使って管理、活用するのが一般的です。

    データベースの種類

    効率よくデータを集めて整理する仕組みは、様々な種類のものが考案されてきました。それぞれにメリット・デメリットがあり、用途に応じて使い分けられているのです。ここでは主なデータベースの種類を3つご紹介していきます。

    リレーショナルデータベース

    リレーショナルデータベースとは表計算ソフトのような行と列の表形式でデータを管理するデータベースで、最も広く使われている方式です。DB-Engines rankingによるデータベース管理システムの人気ランキングでは、2022年3月時点でトップ10のうち7つのシステムがリレーショナルデータベースを採用しています。

    リレーショナルデータベースの特徴は、表形式であるため人間が視覚的に理解しやすいことと、柔軟に情報の整理ができることです。データの構造が単純であることからデータベースを処理するSQL言語を用いることで幅広い処理に柔軟な対応ができます。また、複数の表を組み合わせることで複雑なデータを取り扱うことも可能です。

    一方でデメリットもあります。まず、構造が単純であるがゆえに他のデータベースの種類と比較すると必ずしも効率的とはいえません。柔軟な対応ができる反面、大規模なデータベースになるとプログラムが複雑になり処理速度が落ちてしまう場合もあるのです。

    分散データベース

    分散データベースとは、複数のデータベースを1つのデータベースのように扱う仕組みです。この仕組みにより、サーバーへの負荷を分散して処理速度を向上することが可能になっています。また、可用性を高めることができるのもこのデータベースの大きな特徴です。例えばデータベースが格納されたサーバーを複数地域に置いてそれらを分散データベースとして扱うことで、1つのサーバーに問題が発生してもすぐに復旧することができます。

    分散データベースには、それぞれのデータベースで情報を同期するために「レプリケーション」「デュプリケーション」という2つの仕組みがあります。
    レプリケーションでは、データベースの更新をほかのデータベースが発見次第、それをコピーして更新するという仕組みです。しかしこの方法は、分散しているデータベースの数によってはすべての同期に時間がかかる場合もあります。
    一方でデュプリケーションは、分散されているデータベースの中からマスターを決めておき、更新されたマスターをもとにほかのデータベースが同期する仕組みです。こちらは処理速度が高く正確な同期ができる一方で、マスターがダウンしてしまった際に影響が大きくなりやすいというデメリットもあります。

     

    階層型データベース

    階層型データベースとは、データをツリー構造に階層化して整理する仕組みです。1つの親データに複数の子データが結びつき、それが何段にも重なっているような状態です。このデータベースでは、特定のデータを検索する際の速度がとても速いという特徴があります。データが特定できれば、そこへつながるルートを辿るだけですべての情報を網羅できるためです。

    一方でデメリットとしては、データの編集が難しいという点が挙げられます。一つのデータを修正する場合、それにつながるツリー全体のルートが変わってしまうのです。頻繁にデータが更新されないシステムの方が、階層型データベースは向いているといえます。

    代表的なデータベース管理システム3選

    データベースは規模が大きくなるほど手動で管理するのは困難です。そこで、データベース管理システム(DBMS)を利用すると効率よく管理を行うことができます。DBMSに含まれているのは、データベースを管理するための言語や、データの破損を防ぐ仕組みなどです。DBMSは各社からサービスが展開されており、それぞれに特徴があります。ここでは、特に代表的な3つのDBMSを見ていきましょう。

    Oracle Database

    Oracle社が販売しているOracle Databaseは、世界中で最も利用されているDBMSのうちのひとつです。1979年に世界初の商用データベースとして開発され、他のDBMSと比較すると高価ながらも高機能・高セキュリティで広く信頼されています。ベンダーによる様々なサポートを受けることができ安定性も高いことから、高可用性が求められる大規模なシステム運用によく用いられています。

    MySQL

    MySQLはOracle社が管理しているオープンソースのDBMSです。商用利用にはライセンスを購入しなければなりませんが、基本は無料で利用することができます。ほかの有償DBMSと比較しても遜色ない性能を誇っており、多くのレンタルサーバなどに採用されています。

    MySQLの特徴は、先述の通り基本無料で利用できるためコストを下げることが可能な点と、様々な環境に適用することができる点です。様々なOSに対応しているためプラットフォームを問わず、オープンソースであるため自由なカスタマイズができます。このような特徴から幅広い用途で使われるMySQLですが、特にwebサービスやクラウドサービスで利用されています。

    PostageSQL

    PostageSQLは、MySQLと同じく基本無償での利用が可能なオープンソースのDBMSです。基本的な特徴はMySQLと変わりませんが、機能性が高いことが特徴となっています。例えば関数の定義ができるようになっており、C言語などで作ったカスタム関数を導入することも可能です。よりシンプルで幅広い用途に使いたい場合はMySQLを、複雑な関数を組み込むなど多機能性が必要な場合はPostageSQLを使用するといった使い分けが考えられます。

    データベースの可用性を高めるには

    データベースを管理する上でDBMSは欠かせないシステムですが、どのようなシステムも障害対策は避けては通れない問題です。システムの種類によってはデータベースは常に更新され続けている場合も多く、DBMSの障害はそのままビジネスの損害に繋がります。そこでここでは、データベースの可用性を高める方法を2つ紹介していきます。

    バックアップの利用

    バックアップは定期的にデータを別の場所にコピーすることで、万が一、稼働中のデータベースのデータに問題が生じた場合、バックアップしておいたデータへの復元を可能にします。ただし、バックアップされた時点から障害発生時点までに追加・削除・更新されたデータは復元されません。

    このため、データベースにおいては、プライマリデータベース以外にもデータを同時に複製しておく、レプリケーションという手法も利用するケースが多いです。

    クラスタリング機能の利用

    1つ目は、それぞれのデータベース自体に備わっている機能、もしくはデータベースの障害と連動してフェイルオーバーを行う専用のミドルウェアによって高可用性を担保する方法です。
    代表的な例は以下のとおりです。

    • Oracle Database:Oracle RAC(Real Application Clusters)
      これは複数台のサーバーを用いて負荷分散を行うシステムです。この機能を利用することで、あるサーバーで障害が発生した際に別のサーバーへとシステムを切り替えてサービスを継続することができます。またサーバーへの負荷を分散することができるため処理速度の高速化にもつながります。
      ただしOracle DatabaseはほかのDBMSと比較すると価格帯が高く、Oracle RACの利用には決まったライセンスを取得する必要があります。

    • MySQL:MySQL Cluster
      共有ディスクを使わずにアクティブ−アクティブのクラスタ構成が組めるリレーショナルデータベースです。カラムやインデックス、ノードの追加・削除といった各種メンテナンス処理をオンラインで実行できます。また、単一障害点がなく可用性が非常に高い、などの特徴があります。

    • PostgreSQL:Streaming Replication・Pgpool-II
      Streaming Replicationは、PostgreSQLの標準機能で、プライマリデータベースの更新情報(WAL)を、リアルタイムでスタンバイデータベースサーバーに転送することで、プライマリとスタンバイを同じ状態に保ちます。
      Pgpool-IIは、レプリケーションされたデータベースへのアクセスの「負荷分散」と、プライマリデータベースの障害を検知した際、スタンバイへ切り替える「自動フェイルオーバー」などの機能を提供するPostgreSQLとは別のミドルウェアです。

    HAクラスタソフトの利用

    基本的な障害対策は各データベースにあらかじめ備わっている場合が多いですが、特に無償のデータベースは設定が複雑であったり、トラブル時のサポート体制が不十分であったりと、システムダウンなどへの素早い対応が難しい場合もあります。そこでHAクラスタソフトと呼ばれる高可用性の連携構成を実現するソフトを利用するという方法も効果的です。

    LifeKeeper」などに代表されるHAクラスターソフトは、複数のサーバー群を1台のサーバーのように扱うシステムです。障害が発生した際にシステム稼働を別のサーバーに移すことでサービスの継続を実現します。

    サービス待機状態のサーバーを予備として用意しておく「アクティブ/スタンバイ構成」、複数のサーバーで別々のサービスを稼働しつつお互いを予備のサーバーとする「アクティブ/アクティブ構成」など用途に応じて多様な構成が可能です。

    HAクラスターソフトは、Oracle RACシステムと似ていますが、費用対効果で優れている場合があります。Oracle Databaseなどの商用データベースは、エディションによっては高価です。また、ライセンス体系の変更などにより、ライセンス費用や保守費用が増加したりと、実質的な費用負担が大きくなっているケースもあります。そのため構成の仕方によっては、その他の低価格帯DBMSとHAクラスターソフトを組み合わせた方がコストを抑えられるのです。

    データベースの可用性を考慮した設計を

    データベース管理システムは無償・オープンソースのものも多いですが、それらは必ずしも安定してシステムを稼働できるとは限りません。運用するシステムに求められる可用性を十分に考慮した上で、データベースの構成を考えることが大切です。

    先ほど紹介した「HAクラスタソフト」を使った手法は、データベースの障害影響を最小化する、費用対効果のよい方法です。この手法を実現する主要なソフトウェアを4つご紹介した資料をご用意しました。オープンソースのものから商用ソフトウェアを、対応環境、サポート、コストなどの面から比較しています。ぜひ、ダウンロードしてください。