次世代高速オープンソースRDB Tsurugi
日経BP
著者:神林飛志、荒川傑、菱田真人、埋金進一、川口章、堀川隆、田辺敬之、黒澤亮二、岡田耕平
まえがき
第1部 Tsurugiの使い方
1章 Tsurugiとは
1.1 来歴
1.2 背景
1.3 この背景をもって
1.4 特長
1.5 現代的RDBな考慮点
2章 Tsurugiの導入
2.1 Tsurugiインストールガイド
2.2 Tsurugi Dockerイメージの利用
2.3 クラウドでの利用
2.3.1 AWS
2.3.2 Azure
3章 Tsurugiに触ってみる
3.1 Tsurugiの基礎知識
3.2 Hello, World
3.2.1 Tsurugi SQLコンソールの起動
3.2.2 SQLの実行
3.3 サポートSQL
4章 バッチ処理入門
4.1 概要
コラム:RDBと「バッチ処理」をめぐる文化の問題
4.2 Tsurugiで実装する際の注意点
4.3 請求処理バッチと原価計算バッチ
4.3.1 サンプル・ベンチマーク全体概要
4.3.2 背景
4.3.3 仕様
4.3.4 クライテリア
4.3.5 ベンチマークの処理内容
4.4 請求処理ベンチマーク
4.4.1 データ構造
4.4.2 バッチロジック
4.4.3 オンラインロジック
4.4.4 実行時パラメータ
4.4.5 初期データ
4.4.6 実行環境
4.4.7 ベンチマーク結果レポートの作成方法
4.5 原価計算ベンチマーク
4.5.1 データ構造
4.5.2 バッチロジック
4.5.3 オンラインロジック
4.5.4 実行時パラメータ
4.5.5 初期データ
4.5.6 実行環境
4.5.7 実装を見てみる
4.6 サンプル・ベンチマークの実行と評価
5章 Tsurugiのアーキテクチャ
5.1 全体像
5.2 構成要素
5.2.1 外部インタフェース
5.2.2 内部制御系
5.2.3 低レイヤー基盤
6章 Tsurugiを使う~Tsurugi SQLコンソール
6.1 Tsurugi SQLコンソールの概要
6.2 Tsurugi SQLコンソールの入手方法
6.3 Tsurugi SQLコンソールの実行環境
6.4 Tsurugi SQLコンソールの使用方法
6.4.1 Tsurugi SQLコンソールの起動方法
6.4.2 コンソールモードの使用方法
6.4.3 Tsurugi SQLコンソールのSQL文
6.4.4 tgsqlコマンドのオプション
6.4.5 特殊コマンド
6.4.6 クライアント変数
7章 Tsurugiを使う~PostgreSQL
7.1 概論
7.2 アーキテクチャ
7.3 使い方
7.3.1 セットアップ
7.3.2 サンプル実行
7.4 PostgreSQLからできること
7.5 TsurugiからPostgreSQLへのデータ移動
8章 Tsurugiを使う~Iceaxe(Javaライブラリ)
8.1 概略
8.1.1 IceaxeはJDBCではない
8.1.2 IceaxeとTsubakuroの関係
8.1.3 Iceaxeの入手方法
8.1.4 ターミノロジー
8.2 IceaxeのAPI(クラス・メソッド)
8.2.1 TsurugiConnector
8.2.2 TsurugiSession
8.2.3 TsurugiTransaction
8.2.4 TaurugiTransactionManager
8.2.5 DDLの実行方法
8.2.6 SQL(DML)の実行方法
8.2.7 その他の機能
8.2.8 Iceaxeの制限事項
9章 Tsurugiを使う~Belayer(Web API)
9.1 概論
9.2 インストールと疎通確認
9.2.1 準備
9.2.2 Belayer Serverのセットアップ
9.2.3 起動・疎通確認
9.2.4 認証サーバに関する補足事項
9.3 Belayerの使用例
9.3.1 準備
9.3.2 アクセストークンの取得
9.3.3 バックアップとリストア
9.3.4 ダンプとロード
9.4 Belayerの仕様
9.4.1 環境変数
9.4.2 Belayer Web APIインターフェース仕様
9.4.3 CSVフォーマット
9.4.4 ログ出力
9.4.5 ジョブ情報の永続化
9.4.6 テンポラリファイル
第2部 Tsurugiの内部構造
10章 Tsurugiの内部仕様
10.1 連携の役割分担
10.2 制御フロー
10.3 イベントログの取り出しについて
11章 Java通信ライブラリ(Tsubakuro)
11.1 基本アーキテクチャ
11.2 ターミノロジー
11.3 実際の処理シーケンス
11.4 API詳細
11.4.1 API仕様
11.4.2 使用例
11.5 channel
11.5.1 channelの役割
11.5.2 ターミノロジー
11.5.3 通信の概要
11.5.4 channelの構造
11.5.5 channel共通処理層の実装
11.5.6 通信媒体別処理層
11.6 入手とセットアップ
11.6.1 入手方法
11.6.2 セットアップ方法
12章 サービス管理基盤(Tateyama)
12.1 Tateyamaの機能と構成
12.1.1 コンポーネント
12.1.2 Tateyama bootstrap
12.2 エンドポイント(endpoint)
12.2.1 概要
12.2.2 メッセージ送受信の基本構造
12.2.3 Service API(endpoint関連)
12.3 サービス(service)とリソース(resource)
12.3.1 概要
12.3.2 Service API
12.4 コンポーネントが実装するAPI(ライフサイクル管理)
12.4.1 ライフサイクル
12.4.2 Component API
12.5 tsurugidb
12.5.1 pidファイル
12.5.2 状態格納用共有メモリ
12.6 tgctlコマンド(tsurugidbの起動・終了・状態確認)
12.6.1 起動(tgctl startまたはquiesce)
12.6.2 終了(tgctl shutdownまたはkill)
12.6.3 状態確認(tgctl status)
12.6.4 コマンド仕様
12.7 tgctlコマンド(バックアップ・復旧操作)
12.7.1 バックアップ作成(tgctl backup create)
12.7.2 リストア(tgctl restore backup)
12.7.3 バックアップ操作の例
12.8 構成定義ファイル
12.8.1 構成定義ファイルの例
12.8.2 ccセクション
12.8.3 datastoreセクション
12.8.4 sqlセクション
12.8.5 ipc_ebdpointセクション
12.8.6 stream_endpointセクション
12.8.7 sessionセクション
12.8.8 systemセクション
12.8.9 glogセクション
12.8.10 ディレクトリの相対パス指定について
13章 SQL実行エンジン(Jogasaki&Mizugaki)
13.1 SQL実行エンジンの概要
13.2 SQLの並列実行
13.3 SQL実行詳細
13.3.1 ジョブ実行概要
13.3.2 タスクスケジューラ
13.3.3 並列実行計画とプランスケジューラ
13.3.4 レコード表現
13.3.5 エクスチェンジ・プロセスにおけるレコードの交換
13.3.6 演算子の処理の例
13.3.7 key/valueとレコード
13.3.8 セカンダリインデックス
13.3.9 シーケンス
13.4 SQLコンパイラ(Mizigaki)
13.4.1 論理実行計画(演算子グラフ)の構築
13.4.2 SQLの最適化
13.4.3 物理実行計画(ステップグラフ)の構築
13.4.4 演算子の一覧
14章 トランザクションエンジン(Shirakami)
14.1 ShirakamiのAPI
14.2 Shirakamiのアーキテクチャ
14.2.1 スレッド管理
14.2.2 メモリ管理
14.3 トランザクション処理フロー
15章 ログ・データストア(Limestone)
15.1 Limestoneの特徴
15.2 アーキテクチャ
15.3 ログの内容とversion
15.4 safe SSの作成
15.5 リカバリ
15.6 バックアップとリストア
15.7 レプリケーション
15.8 耐障害設計
第3部 Tsurugiにおけるトランザクション理論と詳細
16章 マルチバージョン(MVCC)とは
16.1 トランザクション入門
16.1.1 ACID特性の扱いの変化
16.1.2 並行性制御:concurrency control
16.1.3 DB側は実際にどう処理しているのか
16.2 MVCC:Multi Version Concurrency Control
16.2.1 MVCCとは
16.2.2 multi version conflict
16.2.3 MVCCの基本要素としてのmulti version conflict
コラム:CSRとの関係について
17章 Tsurugiの基本戦略
17.1 OCC
17.1.1 OCCの致命的欠点
17.1.2 Tsurugiの方針
17.2 LTX
17.2.1 Tsurugi LTXプロトコル
17.2.2 OCCとLTXのサマリー
コラム:Ozeについて
17.3 LTXとOCCの混在について
17.3.1 LTX+OCC混在モード
17.4 write preserve
17.4.1 優先度
18章 anomalyとその対策
18.1 anomaly概論
18.2 Tsurugiでのanomaly
18.2.1 Write Crown(Write skew)
18.2.2 Read Crown(Read skew)
18.3 Write Crownの除去
18.3.1 boundary管理とconflict flag
18.3.2 読まれないデータは書かないことでパフォーマンスを上げる
18.3.3 over-writeについて
18.4 Read Crownの除去
コラム:Read Crownがあまり知られていない理由
コラム:Read Crownのコーナーケース
18.5 waiting
18.5.1 boundaryの伝播メカニズム
18.5.2 waitingの構造
18.5.3 read waiting
18.5.4 waitingのwork aroundとして
18.5.5 read area
19章 epoch
19.1 epochとは
19.1.1 epochの位置づけ
19.1.2 ECC
19.1.3 epochの挙動
19.2 snapshot
19.2.1 更新処理のあるバッチではsafe snapshotを読むべきか?
19.2.2 almighty LTX
19.2.3 safe snapshotはいつ作られるのか?
19.3 HTAPにおける不整合の問題
19.4 snapshotとGC
19.5 snapshotとThomas Write Rule(TWR)
19.6 loggingの実行
19.7 epoch間隔の調整
コラム:epochと従来の仕組みとの違い
20章 logging
20.1 ACIDのAとD
20.2 一貫性の変化
20.3 Durabilityの効果
20.4 コラム:read only transactionは「永続化」されるべきか?
21章 phantom read
21.1 repeatable read
21.2 phantom readとは
21.3 RFの拡張
21.4 Tsurugiでの対応
コラム:SQLの実行におけるphantom readの防止の重要性
コラム:DB業界におけるphantom readの鬼っ子扱いについて
22章 index
22.1 Masstreeの概要
22.2 Masstree(Yakushima)のAPI
22.3 Masstreeの構造
22.4 treeを構成する各ノードの内容
22.5 Masstreeの構造から来る効率性
22.6 Masstreeの計算量について
22.7 Masstreeでの変更操作
23章 SQLと例外処理
23.1 SQLのwrite semantics
23.2 KVSのsemantics
23.3 SWQL例外について
23.4 Tsurugiでの例外処理
23.4.1 概要
23.4.2 レイヤリング・マッピング
23.4.3 具体的なSQL例外
23.4.4 例外処理に対するアプリケーションの対処方針
あとがき
プロフィール