たとえるなら
超巨大で超几帳面な図書館です。何億冊の本があっても、司書さんに「この著者のこの本」とお願いすれば一瞬で探し出してくれます。しかも、誰にいつ貸したかという記録まで、一冊残らず正確に管理されています。
もう少しくわしく
データベース(database)は、大量のデータを整理して保管し、素早く取り出せるようにした仕組みです。現場では略して「DB(ディービー)」とも呼ばれます。通販サイトの会員情報や注文履歴、銀行の口座の記録、SNSの投稿——世の中のサービスの裏側では、ほぼ必ずデータベースが動いています。
中身のイメージは、Excelの表によく似ています。「会員」という表があり、1行が1人ぶんのデータ、列が「会員番号・氏名・メールアドレス・登録日」といった項目にあたります。この1行をレコード、1列をカラムと呼びます。表は用途ごとに分かれていて、「会員」「商品」「注文」といった表を組み合わせて使います。
表ならExcelでも作れそうですが、データベースには決定的な強みがあります。データが何百万件に増えても目当ての1件を素早く探し出せること、そして大勢が同時に読み書きしてもデータが壊れないことです。多くのデータベースは、データを表の形で持ち、表同士を関連づけて管理する「リレーショナルデータベース」という方式を採っています。
その「同時に触っても壊れない」を支えているのがトランザクションという仕組みです。たとえば送金は「Aさんから1万円引く」「Bさんに1万円足す」の2つがセットで、片方だけ成功しては困ります。トランザクションは、ひとまとまりの処理を「全部成功」か「全部なかったこと」のどちらかにする約束事で、これがあるから残高がずれません。
速さを支えているのはインデックス(索引)です。本の巻末の索引と同じで、よく検索する項目にあらかじめ索引を作っておくと、何百万件の中から一瞬で目当ての行を見つけられます。「このページ、表示が遅いですね」という相談の原因が、索引の設定漏れだった——というのは現場でよくある話です。
データベースを操作するときは、SQLという専用の言語を使います。取り出す・入れる・書き換える・消すという4つが基本で、「東京都に住んでいる会員を登録日の新しい順に100件」といった条件も、SQLの1文で書けます。アプリやWebサイトは、このSQLをデータベースに送って結果を受け取っています。
データベースは通常、専用のサーバー(データベースサーバー)として動きます。ここが止まればサービス全体が止まり、ここが壊れれば会員情報も注文履歴も失われます。システムの心臓部であるため、バックアップを欠かさないこと、そして復元できる状態を保つことが、運用でもっとも重視されます。
現場での使われ方
「その情報、DBには入ってますか?」
データベースに保存されているかどうかの確認です。現場ではデータベースを略して「DB」と呼ぶのが一般的です。
「DBを直接見て確認します」
画面からではなく、データベースに直接問い合わせて実際のデータを確かめます、という調査の場面でよく出る一言です。
「この検索、インデックスが効いてないですね」
索引が設定されていないせいで表示が遅い、という指摘。データベースまわりの性能改善で定番の原因です。
「本番DBの更新なので、必ずバックアップを取ってから」
実際に使われているデータベースを直接触るときの鉄則。取り返しがつかない操作になりうるためです。
よくある質問
データベースとExcelの違いは何ですか?
少量のデータを1人で扱うならExcelでも十分ですが、データベースは何百万件という規模でも高速に検索でき、大勢が同時に読み書きしても矛盾が起きないように作られています。サービスの裏側で使うならデータベース、と考えてください。
データベースにはどんな種類がありますか?
表の形でデータを管理するリレーショナルデータベースが長年の主流で、MySQLやPostgreSQLなどが有名です。ほかに、文書や鍵と値の組など表以外の形で持つタイプ(NoSQLと総称されます)もあり、用途によって使い分けられています。
DBとサーバーは何が違うのですか?
サーバーは「サービスを提供するコンピューター」全般を指す言葉で、データベースはその上で動くソフトのひとつです。データベース専用に用意されたサーバーを「データベースサーバー」と呼びます。Webサーバーとは役割が分かれているのが一般的です。
非エンジニアもSQLを覚えたほうがいいですか?
必須ではありませんが、覚えると仕事の幅が広がります。「先月の申し込み件数を県別に知りたい」といった集計を、毎回エンジニアに頼まず自分で出せるようになるためです。読むだけなら、思っているより短期間で身につきます。
データベースが壊れたらどうなりますか?
会員情報や取引記録が失われ、サービスが継続できなくなります。だからこそ定期的なバックアップに加え、同じデータを複数の場所に持っておく(冗長化する)備えが取られます。復元できる状態を保つことまでが運用の仕事です。