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
170
0
Share
トランザクション技術入門
サポーターズさんの勉強会でLT発表させていただいた際の資料です
Rikito Taniguchi
September 22, 2017
More Decks by Rikito Taniguchi
See All by Rikito Taniguchi
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
150
Capture Checking / Separation Checking 入門
tanishiking
0
530
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
700
Scala meets WebAssembly
tanishiking
0
940
Why Wasm+WASI for Scala
tanishiking
0
140
Scala to WebAssembly: Exploring the How and Why
tanishiking
1
1.9k
Scala to WebAssembly #scala_waiwai
tanishiking
0
1.9k
Scala Days Madrid 2023 参加レポート
tanishiking
0
100
Tooling for Scala3
tanishiking
0
440
Other Decks in Programming
See All in Programming
JAWS-UG横浜 #100 祝・第100回スペシャルAWS は VPC レスの時代へ
maroon1st
0
170
Vibe NLP for Applied NLP
inesmontani
PRO
0
450
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
150
tRPCの概要と少しだけパフォーマンス
misoton665
2
220
GoogleCloudとterraform完全に理解した
terisuke
1
140
PHPer、Cloudflare に引っ越す
suguruooki
1
100
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
1.1k
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
Liberating Ruby's Parser from Lexer Hacks
ydah
2
1.9k
NakouPAY説明用
annouim0
0
250
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
220
検索設計から 推論設計への重心移動と Recall-First Retrieval
po3rin
3
950
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Odyssey Design
rkendrick25
PRO
2
580
The untapped power of vector embeddings
frankvandijk
2
1.7k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
270
Six Lessons from altMBA
skipperchong
29
4.2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
300
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
280
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
680
Believing is Seeing
oripsolob
1
110
My Coaching Mixtape
mlcsv
0
110
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