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
210
Capture Checking / Separation Checking 入門
tanishiking
0
670
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
790
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
Go 1.27 における memory allocation の高速化
andpad
0
340
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.9k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
560
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
180
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
180
typoなんかねぇよ
raspython3
0
610
Oxlintはいいぞ(続)
yug1224
1
480
Press start. Python's next generation.
willingc
PRO
3
250
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
420
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
160
不幸な GC
chencmd
0
810
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Building Applications with DynamoDB
mza
96
7.2k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
490
A Tale of Four Properties
chriscoyier
163
24k
WCS-LA-2024
lcolladotor
0
810
Tell your own story through comics
letsgokoyo
1
1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
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