データベースはなぜ使われるようになったのか
|
今では,エンタープライズ系のシステムでデータベースを使わないことはありません。どうしてデータベースは使われるようになったのでしょうか。
そもそもデータベースという概念の登場は,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のデータを扱うこともできます。
- 氏名/電話番号/住所などのアドレスデータ
- e-mail,ショートメールなどのメールデータ
- 内蔵のカメラで撮影されたものやメールに添付された画像データ
- 内蔵のカメラで撮影されたものやメールに添付された動画データ
- WebサイトからダウンロードしたものやUSB経由でPCから転送された音楽データ
- キャリアの配信サービスによって配信された動画データ
- 携帯アプリなどのプログラム
- 携帯アプリで利用されるデータ(スクラッチパッドなどに保存されるもの)
- 携帯ブラウザのお気に入りや画面メモのデータ
- 簡易留守番機能や音声メモなどの音声データ
- 携帯用のオンラインブック・リーダーで再生される本やコミックのデータ
新車の2/3以上に搭載されているカーナビゲーションが利用しているデータはどうでしょうか。こちらもざっと書き出しても,以下の8種類のデータを管理しています。最近の製品のデータ量は,最低でもDVD1枚です。
- 地図データ
- 地図に付随する観光地データ
- 電話番号データ
- サウンド/ボイスデータ
- 画像データ(スキンや壁紙など)
- 学習した経路情報
- 登録した地点情報
- 高速道路などの料金データやサービスエリアなどの情報
このように組み込み分野で扱われるデータ量やデータの種類は飛躍的に増えています。それはとりもなおさず,組み込み分野でもデータベースを利用する必要性が増してきたことを意味します。
組み込みデータベースの特徴
そうは言っても,一般的なエンタープライズ系システムのデータ量に比べれば,組み込み分野で利用されるデータ量はその半分以下あるいは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のイメージ |
(2)のタイプの組み込みDBには,クライアント・サーバー型やインプロセス型のそれぞれがあります。図2のようにターゲット・システム用のDBを作成するものが多く見られます(図2はインプロセス型の場合)。APIなどを利用したプログラミングの経験があればそれほど苦労なく利用できるでしょう。
|
|
図2●ターゲットシステムにDBを作成(インプロセス型) |
(3)は,CASEツールやERツールを使ってコードを生成するものとイメージ的には近いです。DBを利用している感覚があまりなく,開発支援ツールでデータ処理を記述するといった感じでしょうか。ただ,データ操作部分にどのようなコードを生成しているのかがブラックボックスになってしまうため,すべての処理の流れを理解しておきたい場合には多少苦労することもあります。このタイプの製品の開発の流れを簡単にまとめると図3のようになります。
|
|
図3●データ・アクセス・ロジックからソースコードを生成する開発の流れ |
(4)のピュアJavaのDBについては,エンタープライズ系でも組み込み系でも利用方法は全く変わりません。DB自体もJava VMで稼働します。開発もタイプ4のJDBCドライバを使って行うことになります。
|
|
図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を使って簡単なデータ操作を行います。
|