データベースのきほん #3-データベースに関わるお金の話

こんにちは、4年目エンジニアの nakaSay です。普段は在庫管理システムのフロントエンド・バックエンドの開発を行っています。

ただいま「データベースのきほん」という書籍の内容をかい摘み、いくつかのパートに分けて記事を投稿しています。
本書籍は入門書であり、記事では以下のような内容を取り上げる予定です。気になった方は是非気軽にお立ち寄りください。

1. [データベースの全体像](https://qiita.com/nakaSay/items/2bfec4e0b56e2032db40)
1. [リレーショナルデータベースとは](https://qiita.com/nakaSay/items/a154bc026a13b2f9e256)
1. [データベースに関わるお金の話](#なぜ私たちはシステムにお金を払うのか)
1. [データベースとアーキテクチャ構成](https://qiita.com/nakaSay/items/a96293ce85f7e92766f0)
1. [DBMS を操作するときの基本知識](https://qiita.com/nakaSay/items/2c393f85ecec752390b8)
1. [SQL文の基本](https://qiita.com/nakaSay/items/86c49eec04e6e6748c9e)
1. [トランザクションと同時実行制御](https://qiita.com/nakaSay/items/df1073b0ed73d5389e60)
1. [テーブル設計の基礎](https://qiita.com/nakaSay/items/5b157c24f2237981592a)
1. [バックアップとリカバリ](https://qiita.com/nakaSay/items/cd6239ae500594b0784e)

# なぜ私たちはシステムにお金を払うのか
この章ではデータベースに関する「お金」にまつわる話をしていきます。
データベースを利用する上でどのような費用が掛かるのか、どの程度の費用で利用するのか、エンジニアにとっても仕事をする上で「バランスの取れたコスト感覚」は必要不可欠です。

そもそも、私たちはなぜデータベースにお金を払うのでしょうか。
それはシステムを作るためであり、その目的は便利な機能を提供することで対価（利益）を得るためです。
利益に対して費用があまりにも高いシステムを作っても、かえってマイナスにしかなりません。

自身のやっている仕事が顧客や社会にとってどんな価値を持っているのか、ということを考え、本当に必要なものを提供し続けるためにも、「お金」について考える必要があります。

# データベースのイニシャルコストとランニングコスト
データベースに限らず、システム全体を見る際に重要な分類が「イニシャルコスト」（初期費用）と「ランニングコスト」（運転費用）という分け方です。
イニシャルコストにはハードウェアの購入費やエンジニアの給与などがあり、ランニングコストには保守およびメンテナンス費などがあります。

### イニシャルコスト
データベース製品、つまり DBMS のイニシャルコストにはライセンス料があります。つまり「ソフトウェアの使用許可料」のことです。
この販売単位には以下の2つがあります。
- プロセッサライセンス
  - DBMS をインストールする DB サーバの CPU 性能に応じた価格
- ユーザライセンス
  - 利用するユーザ数に応じた価格

どちらもシステムの規模が大きくなるほど費用は高くなりますが、ある程度の規模を持ったシステムでは利用するユーザ数の把握が難しいため、プロセッサライセンスを利用することがほとんどです。
反対に、利用ユーザ数が把握できる小規模環境ではユーザライセンスが利用されます。

なお、PostgreSQL や MySQL などのオープンソースの DBMS においては、ライセンス料そのものが利用条件によてっては無料になる場合があります。
つまり、データベース導入のイニシャルコストを無料にできることを意味しており、オープンソースの DBMS の人気を支える理由の1つとなっています。

また、DBMS のイニシャルコストには「エディション」と「オプション」の選択も重要な要素となります。
この選択をよく理解していないと、本来不要なはずの機能まで付いてしまい、費用が無駄に高くなる要因になります。

まず「エディション」に関しては2つが用意されています。
- Standard Edition(SE)
- Enteprise Edition(EE)

基本的には SE は中小規模、EE は大規模システムで利用されます。
EE のみに搭載されている機能には、クラスタ構成や性能レポート出力、データ暗号化などユーザにとって嬉しい機能がたくさんあります。ただ、その選択によっては「億」を超えることもあるので、その妥当性の精査にはこだわらなければいけません。

### ランニングコスト
DBMS のランニングコストには、「サポート料」があります。
例えば、以下のようなものです。
- 技術的な Q&A
- バグ修正のリリース
- 最新バージョンへのアップグレード権
- 新しい OS やハードウェアへの対応
- 専門の技術者やコンサルタントによる問題解決
- ノウハウやバグ情報といった技術データベースへのアクセス権

これらの支援がなければ、バグや不可解な動作などの解決は困難です。

サポートなしのソフトウェアは危険であり、「命綱なしで登山するようなもの」です。
また、障害が起きた際の責任を自組織だけで負わなければいけなくなります。
実際のところ、有償でもサポートを購入しておく理由の1つは、このような「責任の分散」と言う、技術というよりは保険としての意味合いもあります。

気を付けておきたい点としては、サポートレベルは年々低下することで。製品のリリース後、サービスレベルは徐々に落ちていき、最後には新規バグへに対するパッチ提供が行われなくなるなどして、サポートが終了します。この終了のタイミングを「EOSL(End of Service Life)」と呼びます。
なので、これらも含めて利用するかどうかの判断を行う必要があります。

# イニシャルコストのトリックに注意
ここで少し、思考実験をしてみます。
契約期間が2年のスマホ契約を結ぶ時、以下の2つのプランがあるとします。
- 端末価格が 6 万円。月々の通信量は 2,400 円
- 端末価格が 0 円。月々の通信量は 4,900 円

皆さんならどちらを選ぶでしょうか。実のところ、両方とも2年間のトータルコストは「11 万 7,600 円」です。
しかし統計的には、後者のプランに魅力を感じる人が多いことが知られています。

イニシャルコストが小さい方が、人間の心は「得だ」と感じるようにできているため、イニシャルコストだけに囚われず、ランニングコストもしっかり考えることが大切です。

## まとめ
- DBMS に限らず、ソフトウェアやハードウェアに掛かる費用はイニシャルコストとランニングコストに分類できる
- ソフトウェアのイニシャルコストは主にライセンス料、ランニングコストはサポート料（保守費用）からなる
- イニシャルコストがなく、ランニングコストのみで運用するサブスクリプションという課金モデルもある 
- 人間の現在志向バイアスを利用してイニシャルコストをランニングコストに転嫁して利益を回収する手段は課金の常套句である
- それを知っていながら、我々「朝三暮四の猿」はついつい引っかかってしまうので注意する

## 参考

https://www.shoeisha.co.jp/book/detail/9784798135168