どうも、Webエンジニアのためのデータベース技術実践入門という本を読みました。通称まつのぶ本です。
データベースの基本から丁寧に解説してくれている本で、実際にデータベースを運用する際の細かなティップスが散りばめられています。
データベースを知らない私からするとかなり読み応えがある本でしたが、少しデータベースのことがわかった気がします。
というわけで本の内容を忘れないようにするために、ざっくりと各章のまとめをば。そして本を読んだ感想をざっくりとまとめておきたいと思います。
Webエンジニアのためのデータベース技術実践入門を読んだのでまとめと感想
データベースがなぜ必要か
まずデータベースがなぜ必要かという部分についてです。これはどうしてエクセルのシート(Googleスプレッドシート)ではダメでデータベースが必要かということです。
結論から言うとデータベースはレコードを素早く探してきたり、突然クラッシュしたとしてもデータを守ることができるからです。
データに素早くアクセスするための技術であるインデックスや、データを壊れにくくするようなトランザクションといった技術など、データベースはたくさんの工夫がされています。
これがデータベースを使う理由です。
インデックスで高速アクセス
インデックスは目的のデータまで素早く辿り着けるようにするための技術です。詳細な説明は避けますが、要するに辞書でいう索引を作って、そこからデータを探す方法です。
大量のデータを扱わなくてはいけない場合には、必ず使用する技術になります。
ただしインデックスにはメリットもあればデメリットもあります。インデックスを更新するために余計な処理やデータ容量が発生します。インデックスはむやみやたらにつけるのではなく、必要なものについてバランスよくつけることが大切です。
これらのインデックスをつける技術も事前の設計を丁寧に行っておくことで、身に着けることができます。
テーブル設計とリレーション
テーブル設計というと難しく感じるかもしれませんが、要するにデータに重複なく、アクセスしやすいテーブルを作ることです。
テーブルを正規化するということです。
SQL文の特徴と使い方
SQL文はプログラミング言語を書くことに比べると、簡単にレコードを操作できるので一般的なユーザーでも馴染みやすいという特徴があります。
何度もSQL文を発行するとデータの取得に時間がかかってしまうので、ジョインを使ってSQL文をコンパクトにまとめて性能を高めるといったことがされています。
一方でプログラミング言語に比べるとSQLは機能面で物足りない部分があることや、複数のサーバーに跨った処理に移行すると、ジョインなどもできなくなって、処理が難しくなるという特徴もあります。
アクセス数があまりに多い環境では、SQL文を実行するということ自体が、大きな処理コストになることもあります。
可用性とデータの複製
サービスを運用する上で必須になってくる可用性ですが、その可用性を実現するためのデータの複製手段について理解しておくことが重要です。
現在のトレンドはレプリケーションです。特に非同期のレプリケーションがメインとなっています。しかしよりデータを厳密に保全する必要のある環境では、同期レプリケーションが使われています。
リカバリの手間を考えると非同期より同期レプリケーションの方が優れた面が多いのも事実です。ハードウエアの高速化、オープンソースRDBMSの進化に伴って、同期、準同期のレプリケーションが使われる機会が増えて行くと思われます。
トランザクションと整合性・耐障害性
トランザクション処理に対応していることはデータベースの必須条件とも言えます。これ以上分割できないアトミックな処理に対応していることで、アプリケーションのエラーチェックの手間を防ぐことができます。
対障害性についてもリカバリの手間を軽減する上で重要です。レプリケーションをしている際にも、トランザクション処理によって、データの整合性を保つことができます。
ストレージ技術の変遷とデータベースへの影響
低速なHDD時代から進化して、高速なSSDが台頭してきたことで、ディスクのI/O速度が処理のボトルネックではなくなってきました。
代わりにCPU効率やネットワーク効率の良いデータベースが求められるようになってきています。
今まではシングルスレッドで処理を行っているデータベースが多かったですが、今は性能も改善され、並列性の高いデータベースが求められています。
データベース運用技術の勘所
基本的にはデータベースは壊れるものであるため、その原因をしっかり把握できるような技術が必要だということ、そしてそれを修復できるようにするための知識も必要です。
ただしこのような原因調査、修復技術の根本にある考え方は何年も変わっていません。オープンソースでも便利な運用ツールがだいぶ出揃ってきています。
MySQLに学ぶデータベース管理
MySQLのインストールのログファイルの読み方、バックアップ・リカバリの方法について理解しておくことが重要です。これらは、基礎部分になりますが、基礎固めをしておくことで複雑な運用に対応できるようになります。
MySQLのソースコードを追ってみる
ソース構造、設計思想、ソースコード解析のアプローチ、ビルド方法などを知ることで、MySQLをハッキングできるようになります。
データベース技術の現在と未来
今度どのようなデータベース技術が使われるようになるかという点ですが、一例として列思考のデータベース、ほかにもNoSQLといったデータベースがあります。
これらは単独で使うのではなく、RDBMSと組み合わせて使うことで、よりパフォーマンスを出せるシステムが作れるようになります。
あくまでも自分に合ったシステムを設計することが重要です。
ビックデータ時代のデータベース設計
ビックデータを使う時代になったからこそ、データベースの選定にあたって気をつけるべきこと、データモデリング方法、大量データの扱い方、MySQLを踏まえたクエリや、トランザクションのチューニング方法などが大切になります。
ポイントは頭の中や実験で動くソフトウェアと現場のサービスで実際に動いているソフトウェアは全く異なるということを、いかに理解することができるかです。