データベース技術[実践]入門んだ

Webアプリエンジニアとして、ざっくりとしたDBの内容を抑えておきたくて読んだ。

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

目次は以下のようなになってる。DBとあるけど、MySQLを使う人にはドンピシャな内容。DBと広いくくりなので、NoSQLのことなどもさわり程度で扱っている。

目次

  • 第1章 データベースがないと何が困るのか
  • 第2章 インデックスで高速アクセスを実現する
  • 第3章 テーブル設計とリレーション
  • 第4章 SQL文の特徴とその使いこなし方
  • 第5章 可用性とデータの複製
  • 第6章 トランザクションと整合性・耐障害性
  • 第7章 ストレージ技術の変遷とデータベースへの影響
  • 第8章 データベース運用技術の勘どころ
  • 第9章 MySQLに学ぶデータベース管理
  • 第10章 MySQLソースコードを追ってみよう
  • 第11章 データベース技術の現在と未来
  • 第12章 ビッグデータ時代のデータベース設計

感想

特に参考になった部分をピックアップ。 第1章のなんでDB使うのは改めて説明されるとそうだよなあと新鮮だった。このメリットを使う必要がない場合はDBを使う必要はないのでそこは意識していたい。 第2章ではインデックスの実装方法から説明して、どういう場合にインデックスを使うのがいいのかというのがこの章を通してわかる。現在のよくあるインデックスはB+Tree構造で実現されていてインデックスが銀の弾丸でないことがよくわかる。あたりまえだけど。

インデックスとB+Tree構造の説明だと以下もわかりやすかった。

qiita.com

第4章ではEXPLAINの活用方法が書いてあって、今後活用していこうと思えた。かなり便利。

あとは第9章と第12章がよかった。第9章ではMySQLの管理方法が説明されている。ざっくりと最低限知っておきたい設定項目の説明やバックアップの概要とやりかたなど。バックアップではレプリケーションした際に必須のバイナリログの扱い方が書かれている。ここらへんはRDSとか使ってるとあまり意識しないところではあるが最低限の知識としては必須なので覚えておきたい。

第12章では著者のDeNAでの大量のトラフィックのあるサービスの運用ノウハウとかが書かれてた。小さいサービスだとDBはマスター1つで、スレーブ1みたいなこともできるけど、更新が頻繁だとシャーディングやインデックスの貼り方の工夫をする必要性が出てきたりする。そういう運用話はなかなか聞けないので、自分がそういったサービスに携わる際は読み返したい。あと、クエリの改善方法などが具体的に書いてあったのもよかった。

おわりに

データベースの特にMySQLの概要を知るには素晴らしい本なのでオススメ。