オルタナティブ・ブログ > 一般システムエンジニアの刻苦勉励 >

身の周りのおもしろおかしい事を探す日々。ITを中心に。

データベースが高い6つの理由

»

お客様から「なんでデータベースってこんなに高いの?」と質問されたことのある方は少なくないのではないでしょうか。

45とか60ナノメートルという微細な加工技術が要求されるCPUやメモリ。これは高いというイメージが浸透しているようです。

平日も休日もそこら中で高所作業車を見かけるネットワーク。これも物理的に線を引くことの大変さや、雷だとかで線が切れた際の保守などにお金がかかることが理解されやすいようです。ADSLや光ファイバーの乱売合戦により「家」と比べると高いという意見はたまに聞かれます。

ハードディスクが高いということはよく言われます。「うちのパソコンなんて1テラバイトだぞ」というようなことを言われることもありますが、そういう場合はデータセンターにお招きして実物を見ていただくとすっかり納得していただけるということが多いように思います。開発環境など問題のない機械であれば(諸手を上げておすすめはしませんが)ホットスワップ対応のディスクをずぼっと目の前で抜いて影響のないところを実演し、そしてその理由など説明できたら完璧ではないでしょうか。

OSが高いというのはもはや時候の挨拶のようなものですので割愛します(笑)どちらかというとWindowsの導入コストよりも「タダだと思っていた」Linuxに有償サポート費用が必要なケースのほうが苦しいです。

さて「なんでこんなに高いの」と言われる自分の中でのナンバーワンがデータベース(DBMS)です。金額も大きなことから、キラーワードのExcel、Accessと比較して「Excelだってできる計算じゃないか」と言われると切り返しがなかなか難しくなります。この先長らくIT業界で飯を食っていこうという技術者の卵ならいざしらず、ITに関して一般的な知識水準から少し上くらいの方を対象にわかりやすく説明するのは簡単ではありません。

データベースとは

データベースとは「データを後から利用しやすいようにデータを貯めておくもの」です。Excelとは「後から利用しやすいように」の点でも、「データを貯めておく」の点でも異なります。

Excelにデータを入力する際に一番上の行に見出しをつけると思います。「名前」や「住所」や「年齢」などの見出しがありますが、2行目以降にそれらをまったく無視して「年齢」に「生年月日」のデータを入力することだって可能です。全行がまったく空白のデータも入れられます。データの後ろに勝手に「性別」を付け加えることもできます。このようにルールを守らない人がいると「後から利用したい」と思ったときに大変なことになります。そこでルールに反するデータを受け取らないような仕組みが必要です。

また、一番上の行が見出しで2行目以降がデータというのは「ありがち」なExcelファイルがその形式になっていることが多いだけで、誰かが決めたルールというわけではありません。まれに一番左の列が見出しで右方向にデータが増えていく場合もあります。行にも列にも見出しがある場合もあります。それらを人間が見て、「ここに保存したらいいな」と思って処理を行うことは間違いを招きやすいですし、いちいちマニュアルやルールを周知しなくてはなりません。データベースにはデータを書き込むための手順が備わっており、その通りに書き込めば名前は「名前」に、住所は「住所」に、確実に保存されます。データを新規追加しようとして、Excelのように間違って既存の行の上からデータを入力してしまう、ということは起きません。

この性質によって、「名前」に確実に名前データが入ってきます。コンピュータは決まりきった物事を処理するのがとても得意であるため、このような状態であれば高速に名前を検索することができます。例えば上の例にあるようなExcelファイルでコンピュータに名前を処理させるケースを考えると、まず人間が「名前」のデータ構造を調べます。データは縦方向か、横方向か、そして名前が入った行(または列)はどこか、を探しあてたら、その列を選択して検索するという形になります。Excelでは「すべて検索」で複数の検索結果を取得できますが、必要な行だけを表示することはできません。オートフィルターなら必要な行だけを表示できますが、複雑な検索条件を設定することは困難です。(名前=山田、住所=東京都内、年齢=20歳以下または60歳以上、など)

このあたりのことに特化したのがデータベースです。こういったことに特化しているため、データベースから取得できるのは「データ」の集まりだけであり、色をつけたりグラフを作ったりという機能は別のプログラムで実装しなくてはなりません。

データベースはシンプルです。このシンプルな性質を複雑なビジネスの現場でうまく利用するためには様々な補助的な機能が必要になります。このデータベースの基本的な機能に補助的な機能をあわせてデータベースマネージメントシステム、DBMSと言います。以下、主にRDBMSについて高い理由を考えてみます。

高い理由1 データベースそのものがすごい

データベースの基本的な機能としてデータの構造を定義したり、指定したデータを検索したり、索引を作成したりという機能があります。データを追加したり新規作成したりという場面でも、マスタに存在しない値を使ったデータをエラーにしたり、同姓同名のようなユニークチェックをする機能を内蔵しています。やりたいことはこのように非常にシンプルなのですが、進歩するハードウェアの能力を余さず発揮できるようにプログラムで実装することはとても大変です。こういった機能は基本的であるがゆえにとんでもなく高頻度に呼び出され、データベースの書き込み、読み取りの性能に直結します。いわゆる普通のIT技術者とはまた違った学者肌の方々が研究開発的にパフォーマンスを追及している分野であると思われます。

高い理由2 アクセス制御がすごい

ある人は顧客名簿にアクセスでき、ある人は売り上げデータにアクセスできる、といったようなアクセス制御機能があります。同じデータの中で、「定価」にはアクセスを許すけれども「原価」にはアクセスを許さないといったような列単位のアクセス制御機能ができる製品もあります。最近ではアクセス制御はかなり広範な場面で必要とされるため、あくエス制御を必要とするデータに近い場所、すなわちDBMSにアクセス制御機能が搭載されていることは非常に合理的です。

高い理由3 同時実行制御がすごい

あるデータを2人以上が更新しようとして早い者勝ちになるということはよく起きます。もちろん早いものを優先させなくてはいけませんが、遅い人が早い人のデータを更新していい場合もあれば、いけない場合もあります。たとえば本屋さんである本の在庫の最後の1冊を売る場合、誰に売るかというデータに「Aさん」と書いた後に「Bさん」が上書きされたらAさんは怒ってしまいます。そこで、Bさんには「売り切れ」をわからせるための処理が必要です。開発者が自力でごりごりと実装することもできますが、DBMSに依存することもできます。物を売る例では早い者勝ちが必要ですが、店員のAさんとBさんが本の販売価格を更新するような場面では、Aさんが1000円とした後にBさんが800円にすることは自然です。DBMSには同時に実行される要求(トランザクション)が矛盾なく処理されるための機能が搭載されています。

高い理由4 障害復旧がすごい

Excelのファイルが破損した場合、以前はかなりの割合で復旧に失敗しました。最近ではずいぶんとよくなりましたが、それでもやはり直前の作業は大きく失われることが多いように思います。DBMSではバックアップを取り、それがいつ取られたかということをDBMS自身で管理しておける機能もあります。またログファイル(バックアップとは別のファイル)に処理内容を記憶しておくことで、バックアップをとった時点から、処理を再現してデータを復旧していくことができます。もちろんバックアップは自動的にとり続けるように設定できます。

高い理由5 性能向上がすごい

ExcelやAccessで計算が遅いといったらコンピュータを買い換えるくらいしか手がありません。その時の最速の機種を買っても満足できなかったら諦めるしかありません。DBMSには1つの処理を複数台のコンピュータに分散できるものがあります。1台で1時間の処理を6台でやったら10分で終わる、というほど完璧に性能が向上するほどではありませんが、20分を切るということは十分ありえるでしょう。また、プログラムをまったく変更せずに(チューニングせずに)DBMSの設定と機器の追加だけで乗り切れるよう工夫が凝らされています。

高い理由6 データの形や場所を意識しないのがすごい

普段、自分のPCで作業をするときはマイドキュメントの「業務日報.xls」を開いて、内容を変更して保存、ということを意識します。もしPCのHDDがいっぱいになって業務日報を会社のファイル共有サーバに移動したとしたら、どこへ移動したかを覚えておかなくては次の作業のときにファイルを探すことからスタートです。プログラムからDBMSに問い合わせを行う際、「業務日報のデータ」ということは意識しますが、それがどこに保存されているかということは意識する必要がありません。データベースサーバを買い換えたとしても(2台や3台に分散したとしても)データが移行されていればプログラムの修正は不要です。

また、例えば業務日報が2007年、2008年、2009年と3つのデータから作られていた場合も、あたかもひとつの「業務日報」というファイルであるかのように見せることができます。Excelの場合ですと3つのファイルを開いてコピペで本当にくっつけない限りはひとつになりません。もし3つの表のレイアウトがバラバラだった場合、切り貼りには苦労します。データベースの場合は見たいレイアウトを設計したら、そのレイアウトと2007年のレイアウトの対応関係を設定し、同様に2008年、2009年を設定すればOKです。同じように使っていけば2010年から先もひとつのデータとして見ることができます。

オープンソースでも

オープンソースのDBMSもありますが、こういった機能がようやく揃ってきたというところです。以前よりかなりの完成度で実装していた商用DBMS陣営はうさぎと亀のうさぎのようにぼーっとしていたわけではなく、これらの基本的な機能に加えて便利な機能をたくさん備えてきています。もちろん基本的な機能だけを備えた製品をこれまでより安く出荷する動きもあります。

とはいえメインフレームがオープン化したように、RDBMSは徐々にそのほかの形式のDBMSに侵食され始めました。もちろんメインフレームがまだ多くの場面で用いられているようにRDBMSも相当長い間生き残ると思われます。その間上にあるような機能はシステム開発の現場の至るところでよく使われますので、DBMSがこれらの機能を備えることは開発工数の削減に貢献します。

しかしクラウドコンピューティングが普及してデータの所有や操作に対する考え方が変わったとき、これらの機能がDB側に実装されてて「便利だなぁ」と思うことがなくなる日が来るかもしれません。その代わりにDB側に搭載される機能とはどのようなものなのでしょうか。これまで性能の限界や高コストで諦められていたような「夢の機能」を誰の手にも届くレベルにする技術、そういったものがたくさん出てくることを楽しみにしています。

Comment(0)