データベースはなぜ使われるようになったのか

加藤大受(かとう だいじゅ)

 日立製作所ソフトウェア事業部勤務。データベースの奥深さに興味を持ち,個人活動ではオープンソースのRDBMSのプロジェクトにて日本語化や記事執筆などを行っている。仕事では,組み込みDBである「Entier」のエバンジャリストとして組み込み開発者にDBの重要性を理解してもらうための活動を積極的に推進中。

 今では,エンタープライズ系のシステムでデータベースを使わないことはありません。どうしてデータベースは使われるようになったのでしょうか。

 そもそもデータベースという概念の登場は,1959年,米国のコンピュータ誌「Journal of the ACM Volume 6, Number 1, January 1959」に,W.C MaGee氏が書いた「Generalization: Key to successful electronic data processing」という論文からです。

 この論文でMaGee氏は,コンピュータに蓄積される様々なデータを,源泉ファイル(source file)という概念に集約することにより,データの重複の回避とシステム拡張の効率化が可能になると述べています。さらに,実際にシステムとして構築した場合,ばく大なファイルから効率よくターゲットとなるデータを検索するための効率的な手段が要求されることや,データの保守技術や機密保持の技術が必要になるなど,今のデータベースの考え方が書かれています。

 現実にデータベースが製品として登場するのは,1964年に,当時米GE(General Electric)の主任技師であったC.W.Bachman氏を中心に開発された,GE-225で稼働する最初のデータベース管理システム(DBMS)であるIDS(Integrated Data Store)です。このIDSは,ネットワーク・データモデルと呼ばれるデータモデルを持つデータベースでした(カコミ記事「データモデルとは」を参照)。

 コンピュータが登場したのが,1942年の米アイオワ州立大学のJohn Vincent Atanasoff氏とClifford Edward Berry氏によって作られたABC(Atanasoff - Berry Computer)ですから,コンピュータの登場から22年後にデータベースが登場したということです。

 ちなみに,米IBMとアメリカン航空が共同開発した航空券予約システムSABRE(Semi Automatic Business Research Environment)が1962年に稼働しています。これは複数の高速コンピュータとデータ通信回線を接続して,全米50都市に散在する端末から,座席予約や乗客名簿の管理をリアルタイムで行えるものでした。つまり,リアルタイム・システムの登場から2年後にデータベースが登場したことになります。

 1969年には,IBMがTPモニターであるCICSを発表し,データベースは基幹系システムに利用されていくようになります。国内においても,1974年に日立がネットワーク・データモデルを採用したPCMおよびPCMII,階層型データモデルを採用したACMをリリースしています。

 皆さんがよく知っているリレーショナル・データベース(RDB)が採用しているリレーショナル・データモデルについては,E.F.Codd氏が1969年に,IBMの技術系社内報「IBM Research Report」に掲載した論文「Derivability, Redundancy, and Consistency of Relations Stored in Large Data Banks」で発表しました。

 ただし,RDBが世に登場するのはもっと後です。1979年に現在の米Oracle(当時のRelational Software)が最初のRDB製品「Oracle V2」を世に出しました。実際にRDBが本格的に利用されるようになるのは1980年代の後半からです。ちなみに,オブジェクト指向データベース(OODB)はと言うと,1984年に米GemStone Systemsが最初の商用OODB製品である「GemStone」をリリースしています。

 このように,コンピュータの歴史とデータベースの歴史を重ねてみると,データを効率よく利用するための方法や様々なデータをコンピュータで処理する方法を模索してきた結果がデータベースの進化になっています。つまり,大量のデータと複数のデータを扱うためにはデータベースは不可欠になっています。これはエンタープライズ系だけの話なのでしょうか。

 ここで,皆さんがお持ちの携帯電話ではどんなデータが管理されているかを少し考えてみましょう。ざっと書き出してみただけでも,下記の10種類以上のデータを管理しています。携帯電話本体のストレージ容量も1GBを超えるものや,HDDを内蔵したものもあります。スマートメディアやSDカードなどを外部ストレージとして使えば数GBのデータを扱うこともできます。

  1. 氏名/電話番号/住所などのアドレスデータ
  2. e-mail,ショートメールなどのメールデータ
  3. 内蔵のカメラで撮影されたものやメールに添付された画像データ
  4. 内蔵のカメラで撮影されたものやメールに添付された動画データ
  5. WebサイトからダウンロードしたものやUSB経由でPCから転送された音楽データ
  6. キャリアの配信サービスによって配信された動画データ
  7. 携帯アプリなどのプログラム
  8. 携帯アプリで利用されるデータ(スクラッチパッドなどに保存されるもの)
  9. 携帯ブラウザのお気に入りや画面メモのデータ
  10. 簡易留守番機能や音声メモなどの音声データ
  11. 携帯用のオンラインブック・リーダーで再生される本やコミックのデータ

 新車の2/3以上に搭載されているカーナビゲーションが利用しているデータはどうでしょうか。こちらもざっと書き出しても,以下の8種類のデータを管理しています。最近の製品のデータ量は,最低でもDVD1枚です。

  1. 地図データ
  2. 地図に付随する観光地データ
  3. 電話番号データ
  4. サウンド/ボイスデータ
  5. 画像データ(スキンや壁紙など)
  6. 学習した経路情報
  7. 登録した地点情報
  8. 高速道路などの料金データやサービスエリアなどの情報

 このように組み込み分野で扱われるデータ量やデータの種類は飛躍的に増えています。それはとりもなおさず,組み込み分野でもデータベースを利用する必要性が増してきたことを意味します。

組み込みデータベースの特徴

 そうは言っても,一般的なエンタープライズ系システムのデータ量に比べれば,組み込み分野で利用されるデータ量はその半分以下あるいは1/10以下でしょう。データベースが扱うデータ量としては少ないかもしれません。しかし,注目してほしいのは,システムに搭載されているメモリー量が大きく異なることです。

 現在,エンタープライズ系システムでは数GBのメモリーは当たり前ですが,組み込み系はまだまだ数MB~数十MBが一般的です。例えば,W-ZERO3などのWindows Mobile搭載のスマートフォンなどでもワークエリアは64MBです。OSもワークエリアで動作しますので,空いているメモリーはこの半分以下です。組み込みデータベース(以下,組み込みDB)は,このようにメモリー容量が限られた環境で動作しなければならないのです。

 組み込みDBに必要な項目を洗い出してみると次のようになります。SQLが必要かどうかは利用するプログラムによって異なりますが,筆者としてはSQLが利用できるほうが汎用性が高くなると感じています。

  • 非常に小さなフットプリント(インストール・サイズ)
  • 最低限の使用メモリー量
  • 機能の取り外し(プラグイン)
  • 扱うデータの種類:数値,文字列,バイナリ,地図情報(POI)
  • 扱うデータ量:数KB~数百GB
  • プログラム・インタフェース(API,JDBC)の提供
  • SQL対応:SQL-92とSQL-99の一部

 エンタープライズ系DBでも様々な種類のDBがあるように,組み込みDBにも様々な種類があります。とりわけ大きく違うのは,アーキテクチャの違いです。組み込みDBのアーキテクチャとしては,エンタープライズ系DBと同様のクライアント・サーバー型のものと,アプリケーション同一のプロセスで動作するインプロセス型のものがあります。

 クライアント・サーバー型を採用している製品の多くは,エンタープライズ系DBを起源とするものが多いです。一方,インプロセス型を採用している製品の多くは,もともとデータ・アクセス用のライブラリとして提供されていたものや,CASEツールなど開発支援の延長で開発されたもの,組み込みに特化して開発されたものなどです。また,組み込み機器だけで利用されるのではなく,エンタープライズ系DBと連携できる製品もあります。

 これらを整理して大きく分類すると,次の四つになります。

(1)エンタープライズ系DBとの連携機能を持ち,クライアント・ライブラリを利用するもの
(2)ソースコード内にAPIやJDBCなどを用いてデータ・アクセス・ロジックを記述し,必要なライブラリをリンクするもの。クライアント・サーバー型のものとインプロセス型のものがある
(3)データ・アクセス・ロジックを専用のツールや言語で記述して,ジェネレータでソースコードを生成。それを他のロジックのソースコードとともにコンパイルし,データ・アクセス・ライブラリをリンクして利用するもの
(4)ピュアJavaのDBで,JDBCドライバを使ってJavaアプリケーションから接続して利用するもの

 まず,(1)の種類は,ほとんどがクライアント・サーバー型です。一般のエンタープライズ系DBを利用する場合と開発の方法もほとんど変わりません。イメージ的には,図1のような形となります。図の中のエージェントがエンタープライズ系DBとの連係を実現します。

図1●エンタープライズ系DBとの連係機能をもつ組み込みDBのイメージ
図1●エンタープライズ系DBとの連係機能をもつ組み込みDBのイメージ

 (2)のタイプの組み込みDBには,クライアント・サーバー型やインプロセス型のそれぞれがあります。図2のようにターゲット・システム用のDBを作成するものが多く見られます(図2はインプロセス型の場合)。APIなどを利用したプログラミングの経験があればそれほど苦労なく利用できるでしょう。

図2●ターゲットシステムにDBを作成(インプロセス型)
図2●ターゲットシステムにDBを作成(インプロセス型)

 (3)は,CASEツールやERツールを使ってコードを生成するものとイメージ的には近いです。DBを利用している感覚があまりなく,開発支援ツールでデータ処理を記述するといった感じでしょうか。ただ,データ操作部分にどのようなコードを生成しているのかがブラックボックスになってしまうため,すべての処理の流れを理解しておきたい場合には多少苦労することもあります。このタイプの製品の開発の流れを簡単にまとめると図3のようになります。

図3●データ・アクセス・ロジックからソースコードを生成する開発の流れ
図3●データ・アクセス・ロジックからソースコードを生成する開発の流れ

 (4)のピュアJavaのDBについては,エンタープライズ系でも組み込み系でも利用方法は全く変わりません。DB自体もJava VMで稼働します。開発もタイプ4のJDBCドライバを使って行うことになります。

図4●ピュアJavaのDBの動作イメージ
図4●ピュアJavaのDBの動作イメージ

 これらの他にも異なる形態を持つ組み込みDBがありますが,ほとんどはこの四つのいずれかになります。

組み込みDB製品は多数存在する

 では,具体的に組み込みDBにはどんな製品があるのでしょうか。

 組み込みDB製品は,エンタープライズ系DBと同様に,オープンソースの製品から商用製品まで数多く存在します。主要な組み込みDB製品をざっとまとめると,表1のようになります。もちろんこの表にあげられていないDBもたくさんあります。おおよそ20種類以上のDBが存在します。各製品の対応プラットフォームを見ると,非常に多くの組み込みOSをサポートしているのがわかるでしょう。

 必要メモリー容量などは各製品によって異なりますが,どの製品も小さなフットプリントで大量データを扱えるようになっています。興味がある方は各製品のWebサイトを参照してください。

表1●主要な組み込みDB製品
製品名 開発 商用/OSS サポートOS
DB2 Everyplace 米IBM 商用 Linux(Kernel 2.4以降,x86/STRONGARM/XSCALE),Windows 2000/XP/2003,Windows CE 3.0/4.0/4.2/5.0,PocketPC 2000/2002/2003/2003 SE,Windows Mobile 2003SE/5.0,Palm 4.1/5.0/5.2.1,QNX Neutrino 6.2,Symbian V7
ENCIRQ DFF 米Encirq 商用 開発環境:Windows 2000/XP/Vista,Linux(X86),Sun SPARC Solaris
ターゲットプラットフォーム:ARM,Freescale,Renesas,MIPS,Texas Instruments,Intelアーキテクチャのマイクロプロセサ
Entier 日立製作所 商用 開発環境:Windows 2000/XP
ターゲットシステム:T-Kernel,μITRON,VxWorks,Windows CE,Windows Mobile,Linux
iAnyWhere Ultra Light 米iAnyWhere Solutions. 商用 XP/XP Embedded/XP Tablet Edition,Windows CE 3.0/4.1/4.2,Smartphone 2002/2003,VxWorks 5.4,PalmOS 3.x/4.x/5.0
Linter Micro ロシアRelex 商用 Linux,FreeBSD,NetBSD,OpenBSD,BSDi,Sun Solaris(ix86,SPARC),WindRiver Tornado/VxWorks,Windows CE/95/98/ME/NT/2000/XP,PalmOS,PocketPC 2002/2003,Symbian OS
Microsoft SQL Server Mobile Edition 米Microsoft 商用 Pocket PC 2003 platform,Windows CE 5.0,Windows Mobile 5.0
Oracle Database Lite 米Oracle 商用 Windows 2000/XP/2003,Red Hat Entierprise AS/WS 3,PocketPC 2000/2003/2003,Windows Mobile 2003 SE/5.0,Window CE 4.2/5.0
Apache Derby Apache Software Foundation オープンソース(Apache License V2.0) JDK 1.3/1.4/1.5,J2ME/CDC/Foundation Profile
Oracle Berkeley DB 米Oracle オープンソース(Dual License) Linux,Windows,BSD UNIX,Solaris,Mac OS/X,VxWorks,OSIX準拠のOS
Oracle Barkeley DB Java Edition 米Oracle オープンソース(Dual License) J2SE 1.4.2以降
SQLite D. Richard Hipp Public Domain Windows,Mac,Linuxなど

 この連載では,この表にある製品のいくつかを取り上げながら,組み込みDBを使ったプログラミングは実際にはどのように行うのかを解説していきます。次回はオープンソースのDBを使って簡単なデータ操作を行います。

データモデルとは

 データモデルについて少し説明します。データベースではデータの表現形式をデータモデルと呼び,このデータモデルという枠組みでデータ構造を持っています。一般的なデータモデルとして次のようなものがあります。

  • ネットワーク・データモデル(network data model)
  • 階層型データモデル(hierarchical data model)
  • リレーショナル・データモデル(relational data model)
  • オブジェクト指向データモデル(object-oriented data model)

 ネットワーク・データモデルはCODASYLモデルとも呼ばれています。このモデルでは,関連するいくつかのデータ項目はレコード(record)と呼ばれ,各レコードは2個以上の親レコードを持つことができるようになっており,各レコードはポインタでつながれています。ネットワーク・データモデルは初期のデータベースで利用されたモデルです。

 階層型データモデルを利用した製品で有名なのはIBMのIMSです。このモデルでは,データはツリー構造で表現され,関連するいくつかのデータ項目はセグメントと呼ばれます。ツリー構造になっているので,子セグメントは1個の親セグメントしか持てないことになります。

 リレーショナル・データモデルは,エンタープライズ・システムで最もよく使われているリレーショナル・データベースが採用しているデータモデルです。リレーショナル・データモデルはER図を利用することで,データの論理構造をわかりやすく表記することができます。

 リレーショナル・データモデルが2次元の表形式でデータをモデル化するのに対して,オブジェクト指向データモデルでは,人間がイメージできるオブジェクト形式のままデータをモデル化することができます。また,JavaやC++といったオブジェクト指向プログラミング言語との親和性が非常に高く,プログラム内のオブジェクト構造とデータベース内のデータ構造を一致させることができます。

 オブジェクト指向データモデルでは,配列や集合など多様なデータ構造をそのまま格納できるようになっており,人間が「共通な性質を持つものを一つのまとまりとして考えると扱いやすい」と思うものをクラス(class)として定義します。オブジェクト指向プログラミング言語と同様にクラスの継承などの特徴を持っています。

 最近は,リレーショナル・データモデルが当たり前のようになっていますが,このようにデータベースには様々なデータモデルがあることを知っておくことも大切です。