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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Rikito Taniguchi
September 22, 2017
Programming
180
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
160
Capture Checking / Separation Checking 入門
tanishiking
0
540
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
710
Scala meets WebAssembly
tanishiking
0
950
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
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
5
5.7k
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
210
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
170
Agent Skills を社内で育てる仕組み作り
jackchuka
1
2.2k
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
230
書き換えて学ぶTemporal #fukts
pirosikick
2
380
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
370
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
460
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
260
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
160
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
250
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
240
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
7.6k
Context Engineering - Making Every Token Count
addyosmani
9
890
Practical Orchestrator
shlominoach
191
11k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
700
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
190
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
360
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
Visualization
eitanlees
151
17k
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
140
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