RDBを実際に利用するには、リレーショナルデータベース管理システム(以下、RDBMS)が必要である。RDBMSとは、OracleやDB2 UDB、SQL Serverといったソフトウェアのことである。
RDBMSはRDBを実際にハードディスク上に作成し、選択、射影、結合といった操作を行い、結果をクライアントに返す働きをする。しかし、以下に示すように、RDBMSの働きはそれだけではない。
- 多数のクライアントからアクセスがあっても、性能を保持する。
- トランザクションやロックなどの技術を使い、データの一貫性を保つ。
- バックアップを作成し、ディスク故障などに備えてデータを保全する。
- 必要な人にだけデータのアクセスを許すようにセキュリティーを保つ。
これらのRDBMS機能を実現するために、様々な技術が使われている。以降では、それらの技術について説明する。
データベースは、ハードディスクに格納される。ハードディスクはメモリに比べ、10万倍程度のアクセス時間がかかるため、一度読み込んだデータはメモリ上に保存しておき、次にアクセスがあった場合は、ハードディスクからは読み込まず、メモリの内容を使う。この技術を
キャッシュ(またはバッファプール)と呼ぶ。 メモリの容量はハードディスクよりも少ないのが普通なので、データベースの全てのデータを同時にキャッシュすることはできない。キャッシュに使用するメモリのサイズは最初に決めておく(RDBMSによっては自動的に設定されることもあるし、管理者が設定することもある)。
キャッシュに空きがないときは、キャッシュにあるデータをハードディスクに戻し、新たなデータをキャッシュに読み込む。データを戻す際、最後に利用されてから最も時間が経過しているデータを選ぶ(つまり、最近使用したデータは、もう一度使われる可能際が高いと考える)方式を採用しているRDBMSが多い。
キャッシュが多ければ多いほどデータベースの性能は上がる。では、データベース全体をメモリ上に置けば性能は最高になるのだろうか?実際そのとおりだが、停電やシステム以上でサーバがダウンしたら、メモリ上のデータは全て消えてしまうため、データベース全体が消滅してしまう。そうならないようRDBMSがキャッシュの内容を定期的にディスクに書き込んでいる。キャッシュの変更の頻度、定期的なディスクへの書き込みのバランスが取れていることが最も重要である。
データベースの検索に威力を発揮するのが
インデックスである。インデックスを使うことで、書籍における目次や索引のように、全部を検索しなくても特定の箇所を探すだけで目的のデータを取り出すことができる。ただし、目次や索引だけでは検索できないデータがあるのと同じように、インデックスも万能ではない。(1) Bツリーインデックス
RDBMSでは、インデックスは
Bツリー(または「B+ツリー」)と呼ばれる構成を用いている。(詳細は割愛する)
Bツリーを使った検索は高速に行うことが可能である。しかし、データ構造が比較的複雑になっているため、データの挿入や更新、削除といった処理は、検索に比べると相当遅くなる。(2)ビットマップインデックス
例えば性別や資格の有無など、値が1ビットで表現できる場合や、製品の色などデータの値が限定的で4,5個しかないといった場合には、
ビットマップインデックスが有効となる。
ビットマップインデックスとは、各行がその条件を満足するかしないかを「1」と「0」だけのビット値で表した表である。ビットマップ間の論理積や論理和の計算は非常に高速で、データウェアハウスやOLAP(オンライン分析処理)といった分野で用いられる。(3)ハッシュ
ハッシュ関数という演算値を使って対象データの範囲を限定し、データベースアクセスを高速化するRDBMSもある。ハッシュ関数を使えば、1回の検索でデータにアクセスすることが可能である。ただし、ハッシュ関数は完全一致の検索にしか使えず、データが大量に追加されるとハッシュを作成しなおす必要がある。データがほとんど更新されないマスターテーブルのような表に有効である。
その他の技術について、用語のみ紹介する。(内容は本番のほうでそれぞれ解説する)
(1)高速化の技術
- 最適化(オプティマイザ)
- 行ロック
- バージョニング(読み取り一貫性)
(2)高信頼性のための技術
- トランザクション
- ログ
- バックアップとリストア
- クラスタ構成
- ホットスタンバイ構成
(3)最新のRDBMS技術
- 分散DBとレプリケーション
- 並列処理
- パーティショニング
- インターネット対応
- オブジェクトリレーショナルDB