Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
トランザクション技術入門
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Rikito Taniguchi
September 22, 2017
Programming
190
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
230
Capture Checking / Separation Checking 入門
tanishiking
0
700
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
810
Scala meets WebAssembly
tanishiking
0
1.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
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
290
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
700
Webの地図
yosuke_furukawa
PRO
6
4.9k
iOSDCのペンライトを自動制御したい!
akkeylab
0
120
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
160
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
310
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
270
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
170
FreeBSDでZabbixを動かす
kenkino
0
330
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
330
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.2k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
2
590
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
250
Practical Orchestrator
shlominoach
192
12k
Visualization
eitanlees
153
17k
Discover your Explorer Soul
emna__ayadi
2
1.3k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
430
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
We Are The Robots
honzajavorek
0
380
Accessibility Awareness
sabderemane
1
220
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Bash Introduction
62gerente
615
220k
How STYLIGHT went responsive
nonsquared
100
6.3k
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