データベース基礎

なぜ、莫大なヒト・モノ・カネをかけてまでデータベースを使うのか?

サービスやシステムのバックエンドではデータベースが動いています。

twitterはカスタマイズしたMySQLで動いていることは有名ですし、Facebookも同様にカスタマイズMySQLで動いています。Amazonに至っては、独自でデータベースを開発し物販サービスを提供しています。あなたがいま読んでいるこのブログもMySQLにデータを保管しています。

でも、なぜ、データベースを用いるのでしょうか?

データベースを用いると、専用技術者(DBA)を雇う必要がありますし、何やら複雑なパラメータをイジらなければいけません。なにより企業で用いるような商用データベースはものすごく高価です。商用データベースとして最も普及しているOracle Databaseはキチンと使うと軽く数億円~数十億円レベルになります。

データを保存するだけならファイルでも十分です。

しかし、いまだ世の中の様々なサービスでは、莫大なヒト・モノ・カネをかけてまでデータベースを使っています。これはなぜかについて考えてみます。

サービスとデータは相互補完の関係

まず、データベースが取り扱う「データ」について考えてみます。

俯瞰した見方をすると、何かしらのサービスや業務を行うときには、サービスへの入力としてデータが必要になります。

twitterであれば世界中のユーザーのツイートを表示する必要があります。携帯電話の契約変更をするときには、ドコ○ショップのお姉さんはあなたの現在の契約データを参照する必要があります。

また、逆に、何かしらのサービスや業務を行うとき、サービスの出力としてデータが発生します。

twitterであればあなたのツイートを保存する必要がありますし、携帯電話の契約変更をするときには、変更後の契約プランを保管する必要があります。

「なに当たり前なことを言っているんだ」と思われるかもしれませんが、ココが意外と重要なところで、サービスや業務はデータが無いと成り立たないわけです。もちろん、データはサービスや業務が無いと成り立たないのも同様です。

つまり、サービスとデータは相互依存の関係にあるのだ、と思います。

サービス要件はユーザーニーズから生まれる

サービスや業務においては「こんな機能がほしい!」とか「こんな機能があると便利だ!」という要求にもとづいた機能を実装しています。

twitterであれば、リツイートする機能だとか、タグを設定する機能だとか、フォローする機能だとかがあります。

携帯電話の契約変更をするときでも、ドコ○ショップのお姉さんが使っている端末には、おすすめプランやオプションを表示したり、余っているポイントを表示したりする機能があるのでしょう。知りませんが。

こういうサービスをしたい、こういう業務をしたい、だからこういう機能がほしい、と定義することを要求定義・要件定義などと呼びます。

  • いいツイートを読んだら、他に人にも教えてあげたいよね
  • じゃあ、リツイートという機能を作ろう

といった形で、機能には必ず、何かしらの要求があって実装されます。

サービスとデータは相互依存ですのでデータにも同じことが言えそうです。データに求める要求とはどういうものでしょうか。

データ要件は嫌なことから生まれる

データに求める要件と言ったところで、

「どういうデータだったらワクワクしますか?」
「どういうデータだったら使いたいと思いますか?」

と問われても、よく分からないのではないかと思います。

正直、僕もよくわかりません(笑)

データに求める要件は逆に考えるとすんなりと出てくるのではないかと思います。

つまり、

「どんなデータは使いたくないですか?」
「どんなデータだと困りますか?」

これなら、たとえば、せっかくツイートしたのに消えてしまっていたり、携帯電話の契約変更をしたのに昔のプランのままだったりしたら困る、などすぐに答えられるのではないかと思います。

不思議なことに、サービスは「どんな機能があれば嬉しいですか?」からはじまりますが、データは「どんなデータだと嫌ですか?」からはじまるという特性があるようです。

一般的には、以下の要求があると思います。

保全性 保存したデータが失くならないこと
完全性 一貫性や整合性が取れた正しいデータであること
安全性 データが不正に利用されたり改竄されないこと
独立性 実用的な速度で参照や更新できること
性能 使うアプリに関わらず利用できること

これならある程度納得できるのではないでしょうか。

要件の詳細は細かくなるので、別のエントリで考えていこうと思います。

データベースはデータを守るために用いる

最初の疑問である「なぜデータベースを使うのか」に戻りたいと思います。

サービスや業務を行うためにはデータが必要になります。データへの要件は保全性・完全性・安全性・性能・独立性があります。

すなわちこれが「Why」ですね。保全してほしい、完全であってほしい。。

で、次に「How」です。

なぜ、ファイルではなくデータベースを使うのか。

データベースはこれらデータ要件をいい塩梅で満足しているプロダクトになります。他のプロダクトを用いるとき、この要件全てを満足することは難しいのではないかと思います。

ただのファイルでは誤ったデータを保存してしまうこともあれば、複数ユーザが同時にデータを更新したときに不整合が起こってしまったりします。また、複数ユーザが共有できるキャッシュ機構もありませんので、高い性能を求められると厳しくなります。

もちろん、だから全てをファイルではなくデータベースで管理するべきだ、とは思いません。全てを満たすからこそ高価ですし、それを使いこなすだけのスキルも必要です。つまりは適材適所ですね。

まとめ

なぜデータベースが必要なのかといえば、データベースはいかに「いかにイヤな思いをしないか」を実現するプロダクトだからです。

様々なサービスを実現するために必要不可欠な、データの保全性・完全性・安全性・性能・独立性を担保する要素となります。

企業にとって顧客情報や契約情報などは非常に大切なデータです。顧客情報が失われれば事業継続もできなくなることでしょう。だからこそ、膨大なヒト・モノ・カネをつかってデータを守る必要があり、データベースを構築します。

つまり何がいいたいかといえば、

・・・だから、稟議を通してください(笑)