詳説 データベース
ショウセツデータベース
ストレージエンジンと分散データシステムの仕組み
- 著者:
- Alex Petrov / 小林隆浩 / 成田昇司(アレックス ペトロ / コバヤシ タカヒロ / ナリタ ショウジ)
- 出版社:
- オライリー・ジャパン
- 出版日:
- 2021年07月06日頃
- ISBN:
- 9784873119540
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
データベースとストレージエンジン内部のコンセプトについて開発者に向けて解説!
データベースを選び、使用し、保守する際には、データベースの内部を理解することが必要ですが、多くの分散型データベースやツールがあるため、それぞれが何を提供しており、どう違うのかを理解することは困難です。本書は最新のデータベースとストレージエンジン内部のコンセプトについて開発者に向けて解説する書籍です。データベース内部の一般ユーザには見えないレイヤについて深く解説。データベースの内部について深く知ることで、データベース選び、使用、保守に役立ちます。
技書の森解説
データベースを使う側ではなく、その内側で何が起きているのかを知りたい開発者のための本です。『詳説 データベース』 (Alex Petrov 著、小林 隆浩 監訳、成田 昇司 訳、オライリー・ジャパン、2021 年 7 月 6 日発行) は、原書 Database Internals の日本語版で、副題のとおりストレージエンジンと分散データシステムの仕組みを扱います。版元の紹介文によると、分散型データベースやツールが数多くある中で、それぞれが何を提供し、どう違うのかを理解するために、データベースとストレージエンジンの内部で利用されている概念を解説する書籍と位置づけられています。
ストレージエンジン編の 7 章、B ツリーからログ構造化まで
本書は 2 部構成で、全 14 章のあとに付録 A の参考文献と索引が続きます。第 I 部「ストレージエンジン」は、1 章「基本事項の紹介と概要」で DBMS のアーキテクチャ、メモリベースとディスクベースの違い、列指向と行指向のデータレイアウト、データファイルとインデックスファイルといった土台を整理し、2 章「B ツリーの基本」、3 章「ファイルフォーマット」、4 章「B ツリーの実装」へと進みます。3 章には「スロット化ページ」「セルのレイアウト」「チェックサム」、4 章には「スプリットとマージの伝播」「リバランシング」「バキュームとメンテナンス」といった節が並び、B-Tree がディスク上のページとしてどう組み立てられ、どう保たれるのかを順に追う構成と読めます。5 章「トランザクション処理とリカバリ」はバッファー管理、リカバリ、同時実行制御を扱い、6 章「B ツリーの亜種」はコピーオンライトや「Bw ツリー」「キャッシュオブリビアス B ツリー」などの変種を、7 章「ログ構造化ストレージ」は LSM ツリーとその実装、並行性の扱いを取り上げます。
データベースの性能特性の多くは、このストレージエンジンの方式でおおよそ決まります。B ツリー系はページをその場で書き換えて更新する方式で、読み取りの経路が短く範囲検索に強い一方、ランダムな書き込みが続くとページの分割と書き戻しが重なります。LSM ツリー系は書き込みをいったんメモリに溜め、変更しないファイルとして順に書き出してから後でまとめて併合する方式で、書き込みの吸収に強い代わりに、読み取り時に複数のファイルを確かめる手間や、併合で同じデータを何度も書き直すコストを抱えます。7 章の節名にある「読み取りと書き込みおよび領域の増幅」は、このトレードオフを測る物差しにあたります。版元の紹介文が B ツリーベースのストレージエンジンとイミュータブルなログ構造化ストレージエンジンの違いと事例を紹介すると述べているのは、まさにこの選択の根拠を読者が自分で説明できるようにするためと読めます。
分散システム編、障害検出から Paxos と Raft による合意まで
第 II 部「分散システム」は、8 章「基本事項の紹介と概要」で「分散コンピューティングの誤謬」「2 人の将軍の問題」「FLP の不可能性」「障害モデル」といった前提を固めたうえで、9 章「障害検出」、10 章「リーダー選出」、11 章「レプリケーションと一貫性」、12 章「アンチエントロピーと情報散布」、13 章「分散トランザクション」、14 章「合意」と進みます。11 章は CAP や一貫性モデル、CRDTs までを扱い、更新がすぐには全ノードへ行き渡らない 結果整合性 の考え方もここで整理されます。13 章ではツーフェーズコミットとスリーフェーズコミットに加えて Calvin、Spanner、Percolator による分散トランザクションを、14 章では Paxos、Raft、ビザンチン合意を取り上げます。ノードの故障を疑う仕組みからリーダーの選び方、複製の食い違いの修復、そして 合意アルゴリズム へと、下の層から順に積み上げる並びです。
分散システムの難しさは、ネットワークが遅れることも途切れることもあり、相手が落ちたのか遅いだけなのかを外から確実には見分けられない点にあります。リーダー選出や合意の手順が一見回りくどく見えるのは、この不確かさの中で二重の書き込みや食い違いを防ぐためで、前提となる障害モデルを先に押さえておくと、個々のアルゴリズムがなぜその形をしているのかが腑に落ちやすくなります。
データ構造と OS の前提知識、内部構造の本として選ぶ基準
版元は本書を、データベースシステムを使ってソフトウェアを構築するすべての人に向けた一冊としていますが、扱うのは SQL の書き方やテーブル設計ではなく、その下の層です。二分探索木などの基本的なデータ構造、ディスクとメモリの速度差やページキャッシュの役割、ネットワーク越しの通信が遅延や欠落を起こしうることを知っていると、章の狙いをつかみやすくなります。SQL やテーブル設計をこれから学ぶ段階なら、データベース本の選び方 を参考に基礎を固める本を先に選ぶほうが効率的で、特定の製品の設定手順やチューニングの手引きを求める人にも本書は目的が合いません。
その一方で、分散データベースやキーバリューストアの選定に関わる人、障害時の挙動を製品の宣伝文句ではなく仕組みから見積もりたい人、ストレージエンジンや分散処理の実装に踏み込みたい人にとっては、ストレージと分散の両面を 1 冊で地図にできる本書は投じた時間の回収が早い選択です。製品の資料に出てくる LSM ツリー、ヒンテッドハンドオフ、Merkle ツリーといった語の背後にある設計判断を、自分の言葉で説明できるようになりたい人に向いています。
言及した記事 (11 件)
データベースを勉強したいあなたに送る技術書17冊(+11冊1講義7link)
♡ 890書籍, データベース『詳説 データベース』が発売になりました
♡ 110データベース, 分散システム[個人的]データベースゆく年くる年(2021)
♡ 70データベース自作RDBMSやろうぜ!(出張版)
♡ 51DB, RDBMS, 自作, DBMS雰囲気で分散システム使ってるやついる!?
♡ 35AWS, アルゴリズム, Database, 分散システム, QiitaEngineerFesta_設計『マルチクラウドデータベースの教科書』が発売になりました。
♡ 28データベースチームでのNotionデータベースの扱い方とタスク管理
♡ 22notion読んでよかったなと思っている技術書たち
♡ 7技術書PostgreSQLに保存したデータはどのように保存されているのか?
♡ 1PostgreSQL, Database, エンジニアGORMのトランザクションについて
♡ 1Go, 備忘録, GORM, Transaction
この本に興味がある方におすすめ
関連する本
関連記事
関連用語
Firebase
Google が提供するアプリ開発基盤。サーバー構築なしで認証や DB を利用できる
Database
データを整理して保存 / 検索 / 更新するための仕組み。システムの根幹を担う
クリーンアーキテクチャ
ビジネスロジックを外部の技術的詳細から分離し、依存関係を内側に向けることで変更に強い設計を実現するアーキテクチャ原則
AWS
Amazon が提供するクラウドサービス群で、サーバーやデータベースを必要な分だけ利用できる
C4 Model
ソフトウェアアーキテクチャを 4 つの抽象レベルで図示するモデル
変更データキャプチャ (CDC) とは - DB の変更をリアルタイム連携するパターン
変更データキャプチャ (CDC、Change Data Capture) はデータベースの INSERT/UPDATE/DELETE を検出して検索エンジンや分析基盤へリアルタイムに伝播させるデータ統合パターン。実装 4 方式と AWS での構成を解説