Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
トランザクション技術入門
Search
Rikito Taniguchi
September 22, 2017
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
トランザクション技術入門
サポーターズさんの勉強会でLT発表させていただいた際の資料です
Rikito Taniguchi
September 22, 2017
More Decks by Rikito Taniguchi
See All by Rikito Taniguchi
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
190
Capture Checking / Separation Checking 入門
tanishiking
0
650
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
760
Scala meets WebAssembly
tanishiking
0
1k
Why Wasm+WASI for Scala
tanishiking
0
150
Scala to WebAssembly: Exploring the How and Why
tanishiking
1
1.9k
Scala to WebAssembly #scala_waiwai
tanishiking
0
2k
Scala Days Madrid 2023 参加レポート
tanishiking
0
110
Tooling for Scala3
tanishiking
0
450
Other Decks in Programming
See All in Programming
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
900
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
560
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
290
AIエージェントで 変わるAndroid開発環境
takahirom
2
740
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.4k
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.7k
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
その節約、円になってますか?
isamumumu
0
490
5分で問診!Composer セキュリティ健康診断
codmoninc
0
700
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
3.8k
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
730
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Between Models and Reality
mayunak
4
380
The untapped power of vector embeddings
frankvandijk
2
1.8k
Ethics towards AI in product and experience design
skipperchong
2
330
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
41k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
230
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
780
Speed Design
sergeychernyshev
33
2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
Transcript
トランザクション技術入門 id:tanishiking24 2017-09-22 1
こんにちは • • id:tanishiking24 • 2017 年 4 月新卒入社 •
Web アプリケーションエンジニア • 2017 年 3 月までは京都大学工学部情報学科計算機科学コース • 最近の趣味はボルダリングと PUBG 2
- RDBMSを使ったアプリケー ション書いてますか? 3
- データを出し入れしてるだけのように見えるけど実は奥が 深い いろいろあるけど今日はトランザクションの話をします トランザクションという仕組みでデータが異常な状態にな るのを防ぐ 4
トランザクションとは何か トランザクションとは「1 つ以上の連続した操作の単位」 • データベースへの SQL を用いた操作としては SELECT,UPDATE,INSERT,DELETE など •
アプリケーションとしては複数の操作をもって一つの意 味のある操作となることがあり、その複数のひとまとま りの操作をトランザクションと呼ぼう 5
トランザクションとは何か トランザクションは COMMIT か ABORT される。 COMMIT されたトランザクション内の操作は永続化され、 ABORT されたトランザクション内の操作はすべて無かったこ
とになる (ROLLBACK 処理) 連続するはずの操作が中途半端な状態で終るのを防ぐ (後述 する Atomicity) 6
ACID 特性 トランザクションは ACID 特性を満たすと言われる • Atomicity: 原子性 • Consistency:
一貫性/整合性 • Isolation: 分離性/独立性 • Durability: 耐久性 7
Consitency (整合性/一貫性) トランザクションの終了時点にデータの状態が整合しているという性質 • 「整合性」とは、主キーや外部キー制約や NOT NULL 制約といった 諸々の制約をすべて満たしているということ •
トランザクションの Consistency は他の Atomic、Isolation、Durabily に より保証されるものでユーザーが意識することはない 8
Atomicity (原子性) すべてのトランザクション内操作 が成功したか、すべて無かった事 になるかという特性 9
Atomicity (原子性) 例えば課金用の石を 100 個使って 10 連ガチャを回すロジック • ユーザーの持つ石を 100
個減らす • ユーザーに課金アイテムを 10 個与える 最初の操作を実行した時点でエラーが起こってしまったら破滅 10
Isolation (分離性または独立性) 各トランザクションがひとつずつ逐次的に実行されるなら何も問題ない。 実際のアプリケーションでは複数のトランザクションが並列に実行さ れる。 あたかも複数の並行トランザクションが逐次的に実行されたかのように 結果の整合性を担保してくれるという特性。 keyword: (Final State
/ View / Conflict) Serializability 11
Isolation (分離性または独立性) 2PL(Two Phase Lock) というプロトコルでロックを取りながらレコードを読 み書きすることで Serializability を実現できる そのままじゃ遅すぎる->2PL
での制約を緩めたいくつかの分離レベルが 策定される keyword: トランザクション分離レベル 12
Isolation (分離性または独立性) 制約がゆるすぎると不整合が起こってくる 例: Dirty Read コミットしてない値を読んでしまう trx1 trx2 Read(X)
- Write(X := X+10) - - Read(X) - Write(X := X-10) COMMIT ROLLBACK trx1 は ROLLBACK されるので、trx2 は本来 X-10 になってるはずだが… 13
Durability (耐久性) トランザクションは復旧の単位 障害が発生する前に終了したトランザクションについては、システム再 起動時には整合性を保った状態で復旧できる (コミットしたからといってすぐさまデータがディスクに書き込まれる わけじゃない/書き込み性能を上げたりとかの理由で RDBMS の持つバッ ファプールにまずは書き込まれる)
14
Durability • どうやってコミット時に耐障害性を保証するのか • Redo ログへの書き込み (ログ法)(トランザクションで行われた操作 が記録される)(シーケンシャルライト) • システムがクラッシュし再起動した時は
Redo ログに書き込まれた 内容から整合性のある状態に復元する (ロールフォワード) • 「Redo ログへの書き込み」が必ず「データベース (ディスク) への操 作」に先行することで Redo ログによる整合性を保った状態への復 旧を保証することができる • ログに先に書け! というプロトコルを WAL(Write Ahead Log) という ログは SQL のクエリごとに書き込まれるのではなく log buffer に貯めら れ、定期的 (基本的に COMMIT 時) にディスクに flush される 15
アプリケーションを書くのに必須なのか • 単純なアプリケーションを書くだけなら多分必要ではない (だいた い RDBMS のデフォルト設定がいい感じにしてくれる) • 複雑なアプリケーション (金融系だったりユーザー間のアイテムな
どのやりとりが多いシステム) だとトランザクションの知識がある と破滅を防げるかも • RDBMS の設定パラメータの意味がわかってくる • トランザクションの知識がミドルウェアの作成に活かせたり (ジョ ブキューシステムとか) • 楽しい (楽しくない?) 16
まとめ トランザクション技術を学 んで破滅を防 ごう!!!!! 17
おすすめ文書 • おうちで学べるデータベースのきほん (翔泳社) • RDBMS 解剖学 よくわかるリレーショナルデータベースの仕組み (翔 泳社)
• リレーショナルデータベース入門 (サイエンス社) • 一人トランザクション技術アドベントカレンダー • 各種 RDBMS の公式ドキュメント 18