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
transaction and lock for beginner
Search
halt
October 28, 2013
Programming
2.3k
1
Share
transaction and lock for beginner
halt
October 28, 2013
More Decks by halt
See All by halt
Let tested using a mock with PHPUnit
ha1t
4
3.2k
Other Decks in Programming
See All in Programming
LLM Plugin for Node-REDの利用方法と開発について
404background
0
140
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
1.3k
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
390
AIとRubyの静的型付け
ukin0k0
0
460
Zod v4 Codec でスキーマに型変換を埋め込む REST API 設計 #TSKaigi2026
ryutaro_yako
0
170
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
390
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
2.5k
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
410
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
290
Inspired By RubyKaigi (EN)
atzzcokek
0
450
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
110
[KCD Czech] eBPF Meets the GPU: Future of AI Infra Observability
doniacld
0
130
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
390
Design in an AI World
tapps
1
220
How to Ace a Technical Interview
jacobian
281
24k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
190
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
280
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
340
Large-scale JavaScript Application Architecture
addyosmani
515
110k
For a Future-Friendly Web
brad_frost
183
10k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
160
Git: the NoSQL Database
bkeepers
PRO
432
67k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
知っておきたい トランザクションとロックの 基礎知識 2013-10-28 第72回 PHP勉強会 @halt
1億PV/dayをさばくお仕事
• MySQL(InnoDB / REPEATABLE READ)の話 です。 • 分かりやすく説明するために、本来分割すべき 処理を1つのメソッドにまとめたりしています。 •
SQLクエリについても、本来必要なチェック処理 などを多少省いて説明しています。 そのままコピペして実戦投入するレベルにはなって ないので注意してください。 諸注意
データベース、使ったことありますか? MySQLを使った事がある人向けに、 トランザクションやロックの基本的な話をします。 あなたは本当に正しくMySQL使えているでしょう か?(私はニガテですw) 今日はMySQLを使う上で知っておきたい基礎中 の基礎をご紹介します。
こんなとき、どうかく? • (ソシャゲとかで)課金アイテムを買う ◦ お店で商品を選択(注文) ◦ その商品をプレイヤーが購入できるか調べる ◦ 商品をプレイヤーに渡す ◦
プレイヤーのお金を減らす 実際に書いてみよう!
action
model
Shop::sell() でやりたいこと • お金あるか確認 • アイテム渡す • お金減らす
実行すると… 「お金減らす」でエラーになると、アイテムだけ渡っ てお金が減らない!無限に買えるぞ! (現実には構文エラーよりクエリ前後のPHP処理が原因になる 事が多いです) お金あるか OK アイテム渡す OK お金減らす
syntax error
そこでトランザクション
トランザクション • 複数の処理を一続きに行う仕組み • 「全部実行する」か「1つも実行しない」のいずれ かしかない(一貫性の担保) • begin() と commit()
でくくる。 • rollback()で明示的にrollbackできる。(MySQL の場合、commitせずに接続を閉じると自動的 にrollbackされる)
実行すると… トランザクション中にエラーが発生すると、トランザ クション最初の状態に巻き戻る! お金あるか OK アイテム渡す OK お金減らす syntax error
全部なかった事に
まとめ • 一連の処理に一貫性を持たせる場合はトランザ クションを使いましょう。 • 処理の途中でエラーが起きたら、適切な状態に ロールバックできるようにしておきましょう。 これで安心!
ではない
連打したりパケット遅延が起こると… あれれー?100円しか持ってないのに100円のア イテムが二個かえちゃったぞー? リクエストA お金 リクエストB お金もってるか 100 アイテム渡す 100
お金もってるか お金減らす 0 アイテム渡す 0(-100) お金減らす
現状の問題 トランザクションは、処理の一貫性を保証するだ け。 begin中に他から値が参照されたり変更されると予 期しない動きになってしまう事がある。 そこで今回は行ロックを使う。
model
行ロックを使うと… ロックされている場合、その終了を待って動作する ようになる! トランザクションA お金 トランザクションB お金もってるか(ロック) 100 アイテム渡す 100
ロック解除待ち お金減らす 0 ロック解除待ち 0 お金もってるか(Error)
行ロック(FOR UPDATE) • トランザクション内で実行する事で、そのトラン ザクション中、特定行をロックする仕組み • ロック中に他のトランザクションが該当行にアク セスすると、待ち状態になり、ロック中のトランザ クションが終了すると動き出す •
内部的には、インデックスをロックしているの で、インデックスを正しく使ってないと想定通りに 動かない事がある。最悪テーブルロックになる
行ロック(FOR UPDATE) • ロック待ち状態はアクセス時間に直に響くので、 できるだけ短くする。トランザクション内でPHP の重い処理とか入れないように注意する。 • デッドロックが起こらないように常に注意しない といけない •
共有ロックとの使い分けを理解しておく必要が ある。 • ギャップロックやネクストキーロックの仕組みを 理解しておく必要がある
まとめ • データベースを操作するときは、状況にあわせ て、トランザクションやロックを使っていく必要が ある。 • トランザクションは一貫性の保証をしてくれる。 • ロックは他のセッションとの間に秩序を作れる
これでひとまず安心!
• 今回のケースはいろんなものを削ってシンプル にした上で説明しているので、現実にはもっと複 雑な状況になる事が多い。(シャーディングして いる場合とか) • 共有ロックなど、適切に使い分ける技術は他に もあるし、MySQL以外の場合、別の対応が必 要 この話を聞いて、知らない事があった人は、トラン
ザクションとロックの知識が足りてないという事な ので、もっと勉強していきましょう。 これで完璧ではない
おしまい ニーズがあれば続きやります