本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはkarupaneruraこと佐藤健太さんで,
本稿のサンプルコードは,
なぜデータベースを使うのか
データベースと一口に言ってもさまざまなものがありますが,
データベースの必要性
まずはそもそもなぜデータベースが必要なのかを考えていきましょう。
単にデータを永続化するためだけであればさまざまな手段があります。たとえば,
- ネットワーク越しにデータを共有できない
- 並列で行われるファイル操作に対して整合性を保つことが難しい
- 並列で行われるファイル操作を効率良く直列化できない
- 長時間かかる処理において,
全体で一貫性のあるデータを読み取ることが難しい - 変更を安全に巻き戻すことができない
- データ量に比例して検索が遅くなる
上記の問題をすべて解決した実装を作ることは容易ではありません。しかし既成のデータベースシステムを利用することにより,
トランザクションの効用
データベースを利用する大きな理由の一つとして,
① 口座Aの残高を1,000減らす処理
UPDATE account
SET dollar = dollar - 1000
WHERE name = "A";
② 口座Bの残高を1,000増やす処理
UPDATE account
SET dollar = dollar + 1000
WHERE name = "B";
処理②が実行される前にプログラムが停止してしまうと,
このようなときにトランザクションが活躍します。トランザクションは処理単位を定義するものです。次のように処理の開始点と終了点をデータベースに知らせることで,
ここからトランザクションを開始
BEGIN WORK;
口座Aの残高を1,000減らす処理
UPDATE account
SET dollar = dollar - 1000
WHERE name = "A";
口座Bの残高を1,000増やす処理
UPDATE account
SET dollar = dollar + 1000
WHERE name = "B";
ここまでが1つの処理単位
COMMIT;
このようにすれば,
ほかにもトランザクションを利用することでさまざまな恩恵を受けることができます。トランザクションなどデータベースについてより詳しく知りたい人には,
- 注1)
- 松信嘉範著
『Webエンジニアのためのデータベース技術[実践]入門』 技術評論社, 2012年
<続きの