データベースエンジニア養成読本

gihyo.jp

部屋の掃除をしていて発掘されたので捨てる前に再読しておく。8年前であるし内容はだいたい忘れている。

巻頭企画

第1章 データベースエンジニアの心得

  • データベースの特徴的な機能としてのトランザクションとACID特性
    • Atomicity(原子性)
    • Consistency(一貫性)
    • Isolation(独立性)
    • Durability(永続性)
  • 非機能要件の評価指標RASIS
    • Reliability(信頼性)
    • Availability(可用性)
    • Serviceability(保守性)
    • Integrity(保全性)
    • Security(安全性)

ACIDはともかくRASISは単語として普段あまり使わないので忘れがち。無意識に考慮しているものだけれど、共通言語があると第三者への説得力が増すので有り難いのである。

保守性の記述がデータ正規化などになっているのはアプリケーションレイヤの文脈で若干本題から逸れている気がした。システムとしての保守性はステータスの把握だったりオペレーションの容易さなどが含まれるのではないか。

このあたりの評価指標は、最近は定性的なものではなくMTBFMTTRなどで定量的に評価されていそう。

第2章 大規模サイトを支えるデータベースエンジニアの仕事

GREEでのデータベース大規模活用の事例。

LAMPLVSというインターネット拡大期の構成が今では若干懐かしさを覚える。Flareとかあったなあ。

インフラチームにデータベーススペシャリストが存在する組織は何度も試そうと思うけれど、どうしてもサービスについての知識が深くないと踏み込んだ設計やアドバイスができないので悩ましい結果になってしまうが、GREEではうまく回っていたのかが気になる。実際のところ、データベースについての諸知識もアプリケーションエンジニアに求められる領分であると思いたい。

トランザクション/JOIN/サブクエリを避ける」は大規模サービスでスケールさせるために採用することもあるテクニック。複雑な処理をスケールしやすいアプリケーション側に寄せるのも結構やりがち。

活用事例はちょっと特殊なので一般的な参考になるか微妙かもだけれど、データベースエンジニアの業務として列挙されたものはよいまとめだと思う。

特集1

第1章 RDBMS、NoSQL - DBを適材適所で使いこなすための基礎知識

RDBMSとNoSQLが競合するものではなく相互補完する形で共存していくような予見は正しくて、2021年現在でもそれぞれの特性を活かして生き残っている。KVSはRedis一強の様相で、TokyoTyrantやRiakは最近では聞かなくなってしまった。カラム志向の分散DBが存在感を増している。

コラムのCAP定理について、提案者であるEric Brewer氏が現在は「3つのうち2つ」はミスリーディングであると訂正しているのは知らなかった。実際のシステムでは状況に応じて優先されるものが変化したり、優先度合いも0/1ではないという主張に変わっているようでなるほどである。

参考: CAP Twelve Years Later: How the "Rules" Have Changed日本語訳

第2章 MySQLを使い切るための基礎と最新知識

MySQLのEdition別機能比較や構成解説、当時の最新版5.6の新機能紹介などをさらりと解説。さすがに現在は古い情報で参考にはならないかとは思ったけれど基礎知識としてはまだ使えるようにも思える。

第3章 PostgreSQLを使い切るための基礎と最新知識

PostgreSQLは6.x時代に使っていたきりなので最新情報を斜め読みするには便利だった(とはいえ8年前である…)。

高機能で運用が複雑なPostgreSQLと、軽量シンプルなMySQLという初期の対比は今ではなくなってしまったし、使い慣れているという理由だけで自分はMySQL中心に使っているけれど、PostgreSQLの採用もちゃんと視野に入れておくほうがよいのだろうなあ。記事時点で最新版は9.3だったが、2021年8月現在ではなんと13.3であった。

当時の時点でJavaScriptでのストアドプロシージャとか書いてあって鼻血出る。

第4章 MongoDBを使い切るための基礎と最新知識

基礎知識シリーズ。

この辺の解説を読んでも初学者だとピンとこないだろうし、具体的な活用事例や導入に適したパターンなどがあったほうが嬉しいのではという気もするけれど、用途を変に限定させるよりは自分で学んでいってくれということだろうなあ。

ドキュメントDBといってもスキーマレスで無法に使うと秒で破綻するので、実際にはそれなりにスキーマ設計はされる。投票とかアンケートサイトのような単一機能でちょっと複雑な構造もありうるようなものを作るには非常に強力でRDBMSに対するアドバンテージがあると思っている。大規模サービスで長期的に導入するかというと迷う。

第5章 Redisを使い切るための基礎と最新知識

具体的な利用事例が載っていてこれはとてもよい。

KVSとしても充分に利用可能だし、やはりリアルタイムランキングは圧倒的に強力。キューやPub/Subも便利なのである。

memcachedと比較しても充分に高速というのは若干厳しいのではと思ってしまうけれど、KVSとして充分に高速なのはまあ事実。memcachedは高速すぎるので比較するのは可哀想…。

Redisは2021年現在でも積極的に進化を続けていて活用事例は今後も増えていくのは確実だし、本誌で紹介されている中では動向を追っておくべきソフトウェアの筆頭な気がする。

第6章 Riakを使い切るための基礎と最新知識

分散KVSとして高い可用性と性能を誇るRiakであるけれど、KVSというよりはS3互換ストレージのRiak CSとしての利用が一般的だったような気もする。

最近動向を聞かないと思っていたけれど、2017年に開発元のbashoが事業継続不可能になって買収されていた。開発自体はまだ継続しているようで、何かのタイミングでまた復興してくる可能性もあるかもしれない。

特集2

第1章 データベース設計とは何か

ちょっと内容のない(よく分からない)章であった…。

第2章 ドキュメント型NoSQLにおけるデータベース設計の考え方

前章でもそうだったけれど若干大雑把な記事を書かれる執筆者さんのようであるという印象があるが…ドキュメント単位で設計することを書類と引き出しのたとえにするのは妥当感はあるように思える。

RDBMSでの正規化脳からうまく切り替えられるかは慣れが必要な気がしている。冗長なデータに不安感が出てしまうのはまあ分かる。ドキュメント型NoSQLの設計で迷ったときは、AWSのDynamoDBの設計ガイドを参考にするとよいのではと思っている。

参考: NoSQL Design for DynamoDB - Amazon DynamoDB

全体の感想

さすがに8年前の本なので情報が古く今から読むには適さないけれど、データベースを取り巻く概観を察するにはよい無いようなので5年間隔などで刷新されてほしいシリーズという気はする。

終盤にはデータモデルや関係代数、SQL入門、正規化など基礎知識がまとまっていて、本誌の中では技術寄りの比重が高いので初学者には難しいかもしれないけれど、本当に大事な基礎がコンパクトに詰め込まれていてこれは何年経っても劣化しない有用な情報だと思った。

全体として知っている情報が中心ではあったけれど、Redisの新機能だったり最近追えていない動向を再認識する良い機会になったので最後の最後にまた役立ってもらった。