SlideShare a Scribd company logo
1 of 47
トランザクションをSerializable
にする4つの方法
2015年12月18日
熊崎 宏樹@kumagi
Serializableとは?
• ユーザの一連の操作(お金を口座AからBへ1000円
移動する、等)が「時系列上のどこかの瞬間に実行
された」と解釈できる事が保証された一貫性モデル
– 実際に一瞬で実行されたかはどうでもいい
– どこかの瞬間であれば、1年前でも1億年後でも(定義上)
構わない
Serializableとは?
• 複数のユーザの動作をどこかの瞬間に論
理的にプロットした時に矛盾が起きない組
み合わせが一つでも存在するならOK
– 順番が狂うなどもどうでも良い
時間
User3
User2
User1
A
B
C
D
E
上記トランザクション群の結果はB→A→C→E→Dの順で実行された
事にすれば何らかの「順」にはなったのでSerializableである。
Serializableとは?
• 自分で書いた値が読めなくても一応
Serializable
– 下の図ではUser1はトランザクションAで書いた
値をトランザクションBで読めない
時間
User1
A B
上記トランザクション群の結果はB→Aの順で実行された事にすれ
ば何らかの「順」にはなったのでSerializableである。
脱線:Linearizableとは?
• Serializableかつ、実行された瞬間が「操作の開始
時」以後、「操作の終了時」以前という条件を満た
す場合にLinearizable
– オレンジの線と緑の線が鈍角を描かなければOKとも
言える
時間
User3
User2
User1
A
B
C
D
E
B→A→C→D→Eの順で実行されたとすれば、各トランザクションの
実行時間中に実行が行われたと言えるのでLinearizable
実際のDBはどうなのか
• 有名どころのDBのデフォルト設定は、パフォーマン
ス上の問題から基本的にSerializableより緩い一貫
性モデルを採用している
MySQL「大抵のユーザはデフォルトのREPEATABLE READで充分やで」
Oracle「READ COMMITEDが一番良く使われるだろうしデフォルトにしといたで」
PostgreSQL「READ COMMITEDがデフォルトやで」 DB2「CUSOR STABILITYがデフォルトやで」
データベース授業あるある
____
/ \ / \ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \
| |r┬-| |
\ `ー'´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
トランザクションはACIDを守ります。
AはAtomicity
CはConsistency
IはIsolation
DはDurability
を意味します。
データベース授業あるある
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / //
| :::::::::::(⌒) | | | / ゝ:::::::::::/
| ノ | | | \ / ) /
ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||l バンバン
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
だっておwwwwwwww
守ってないおwwww
遅くてやってられないおwwww
実用上大丈夫なのか
• パフォーマンスは出るしSQLの書き方次第で
何とかなる(SELECT FOR UPDATEうんぬん)
• それで話が終わるとよくないので、ここでおも
むろにSerializable以外の分離レベルの落とし
穴を紹介
アプリ例:病院予約アプリ
• 医師が複数居る
– 全ての医師は初めみんな「診察可能」
• 患者がやってきて医師の一覧を見て一人選
んで治療の予約を入れる
– 選ばれた医師の状態は「予約済み」になる
• 急患に備え、非常時以外では医師は最低1人
は「診察可能」状態でなければならない
– その条件を満たせないなら予約を断る
• どう実装するか?
ロジック例
SET @avail SELECT COUNT(*) FROM doctors WHERE state == “診察可能”;
IF @avail <= 1 BEGIN -- 医師が一人以下なら
RAISEERROR(“診察可能な医師が居なくなります”);
ELSE -- 医師が二人以上いるなら
UPDATE doctors SET state == “予約済み”
WHERE state ==“診察可能”AND name == “田中医者丸”;
COMMIT;
END
• 以下のロジックで良さそうに見える
– なお発表者はストアドプロシージャの文法に詳しくないので以下は
フィーリングでお読みください
ロジック例
• トランザクション内で行われる個々の動作を
青い線で表記
時間
User
医師何人?
この3ステップの完了をひとまとまりのトランザクションとして実行す
る。All or Nothingで実行されるのできっと上手く行くように思える。
なお、MVCCの実装上、コミット前のwriteはローカルなwrite setに
閉じる事が多いが、細かい事は考えないようにする。
2人居るで
じゃあ佐藤さんヨロ
ええで
コミット頼む
OK
Write Skew
• 実際にはうまく行かない
– 一覧の取得は命じたが書き換えを禁じてないからcommitがそのまま通る
時間
User2
User1
医師何人?
医師何人?
上記トランザクション群の結果として、診察可能な医師が0人にな
る。これはUser1とUser2のどちらが先に実行した事にもできない。
良さそうなロジックなのにバグってる有名な一例。
2人居るで 2人居るで
じゃあ佐藤さんヨロ
じゃあ田中さんヨロ
ええで ええで
コミット頼む
コミット頼む
OK OK
Read Only
• 詳細はA Read-Only Transaction Anomaly Under Snapshot
Isolation(Alanら2004)を参照
• 以下の実行はSerializeできない
時間
Y
X
口座Aを確認
Z
口座Bを確認
口座Aに20万預ける
口座Bから10万引き出す(A+Bが負になるので金利込の11万を減らす)口座Aを確認
コミット
X→Yと仮定すると、最終状態が{A:20, B:-10}にならないとおかしい
つまりYは必ずXの前に来ないとダメ
Y→X→Zと仮定すると、Zは{A: 20, B: -11} を読まないとおかしい
つまりZはYより前でXより後じゃないとダメ
Y→Xの順序と、X→Z→Yの順序は同時に実現できない
さあどうする?
• 診察可能医師をSELECTする際にSELECT FOR UPDATEを
利用する(アプリロジックへの侵入)
• “急患待ち”という新たな状態を定義して医師を先にそこ
に割り当ててしまう(業務ロジックへの侵入)
• “急患待ち”の医師が4人以上になるシステムにしておけ
ばWrite Skewが3回起きる可能性はかなり低いでしょ(運
用でカバーする例)
• “急患待ち”状態の医師なんて別に要らんかったんや。
緊急なら診察中の他の医師が何とかするでしょ(解決を
諦める例)
• 分離レベルにSERIALIZABLEを指定 DBの問題は
DBで解決
解決策
• 2 Phase Lockを行う
• Read-Trackingを行う(SSI)
• Read-Validationを行う(SILOその他)
• SQLのレイヤで先にSerializableにしてしまう
解決策
• 2 Phase Lockを行う
• Read-Trackingを行う(SSI)
• Read-Validationを行う(SILOその他)
• SQLのレイヤで先にSerializableにしてしまう
2 Phase Lock
• 手続き全体が成長相と減退相の1つずつから
なるべし
1 2
獲得しているロックの数
時間
成長相 減退相
2 Phase Lock
• つまりこれはだめ
成長相・減退相が2回以上ある
Strict 2 Phase Lock(S2PL)
• 2 Phase Lockに加えて「コミットが済むまで一切ロック解放するべからず」
という条件を加えた物
– カスケードロールバックを回避できるので実用上2PLと言ったらこれの事を指
す事が多い[要出典]
1 2
獲得しているロックの数
時間
成長相 減退相
コミットのタイミングはこれより右に
行ってはいけない
2 Phase Lock
• なんでこの方法ならSerializableになるのかは
Philip A. Bernstein, Vassos Hadzilacos, Nathan
Goodman (1987): Concurrency Control and
Recovery in Database Systems を参照
解決策
• 2 Phase Lockを行う
• Read-Trackingを行う(SSI)
• Read-Validationを行う(SILOその他)
• SQLのレイヤで先にSerializableにしてしまう
Read Uncommited
Read Commited
Repeatable Read
Snapshot Isolation
トランザクション分離レベル
• Serializableという安全地帯から出ると様々な
魔物(Anomaly)が襲い掛かってくる
Serializalbe
Write Skew Anomaly
Phantom Read Anomaly
Read Only Anomaly
Non-Repeatable Read Anomaly
Dirty Read Anomaly
Snapshot Isolation
• Write Skew AnomalyとRead Only Anomaly以外の
Anomalyが起きないとされているトランザクション分離
レベル
• 全てのトランザクションは、トランザクション開始時の
データベースのスナップショットのみを見ながら走る、
という分離レベル
– Read Repeatableと違ってファントムリード等も起きない
– 物理的に全体のスナップショットを作ったりはしない
• 実装上はMVCC(Multi-Version Concurrency Control)が
用いられる事が多いが、厳密にはそれだけではSIにで
きない
– 理由を説明するにはこの余白は狭すぎる
基本アイデア
• Snapshot Isolationで問題になるのはWrite Skew
AnomalyとRead Only Anomaly[AlanらSIGMOD04]だから、それ
らが起きなくなる仕組みを用意すればSerializableと呼ん
で良いんじゃね?
– 1999年ごろからそのアイデアはあった
– ユーザのSQL文を検査してAnomalyが起きそうかどうか静的チェックする
方法なども検討された
• その結果、TPC-Cの実行はSnapshot IsolationでもAnomalyが起きないパターンである事
が証明されたりなどした
• Snapshot Isolationで発生するAnomalyを検出する方法
考えました!Dependency Cyclic Graph(DSG)を書けばい
けます!
– paper: Making Snapshot Isolation Serializable [Alanら2005]
Dependency Serialization Graph
時間
B
A
医師何人?
医師何人?
2人居るで 2人居るで
じゃあ佐藤さんヨロ
じゃあ田中さんヨロ
ええで あかんで
コミット頼む
OK
• 「読んだものを書いた」「書いた物を読んだ」「書いた後に書
いた」のいずれかの順序関係がある場合に依存辺を追加し
ていく
A A B A B
Bが読んだ値にAが書き込むので
Anti-Dependency(問題ない)
A B
Aが読んだ値にBが書き込むので
Anti-Dependency→円環できた
Dependency Serialization Graph
• ついでにRead Only Anomalyも対処できる
時間
B
A
口座Aを確認
A A B A B
Bが読んだ値にAが書き込むので
Anti-Dependency(問題ない)
Aがコミットした値をCが
読むのでDependency
C
口座Bを確認
口座Aに20万預ける
口座Bから10万引き出す(A+Bが負になるので金利込の11万を減らす口座Aを確認
コミット
あかんで
A B
C
Cが読んだ値に
Bが書き込んだので
Anti-Dependency→円環できた
A B
C
パフォーマンス測定
• SIと比べてほとんどパフォーマンス低下なし
出典: Making Snapshot Isolation Serializable
DSGについて
• 円環ができたらabortという割とすっきりしたア
ルゴリズム
• 速度もそれなりに出る
• False Positive(必要のないabort)が起きる
– 詳細は論文に
• マルチコアにスケールしようと思ったら複数の
readerがDSGの更新のためにキャッシュライン
を取り合うのでスケールしにくい
解決策
• 2 Phase Lockを行う
• Read-Trackingを行う(SSI)
• Read-Validationを行う(SILOその他)
• SQLのレイヤで先にSerializableにしてしまう
Read Validation
• コミットのタイミングで自分が読んだものと同じ物を
読んだと確認すれば良い
– いわゆるOptimistic Concurrency Control
• 全てのデータに単調増加するバージョンをつける
• Read Lockを取る代わりにバージョンを記録する
• トランザクションをコミットする際に必要なWrite Lock
を獲得してからRead Setのバージョンを比較する
• すべて一致したらコミットを認める
Write Skew
• Readのバージョン比較で簡単に解決する
時間
User2
User1
医師何人?
医師何人?
それぞれのトランザクションは医師2人のデータのバージョンを取
得している。
2人居るで 2人居るで
じゃあ佐藤さんヨロ
じゃあ田中さんヨロ
ええで ええで
コミット頼む
コミット頼む
OK あかんで
ここでバージョンあがる
Read Only
• バージョン比較強い
時間
Y
X
口座Aを確認
Z
口座Bを確認
口座Aに20万預ける
口座Bから10万引き出す(金利込の11万を減らす)口座Aを確認
コミット
ここでAのバージョンがあがる
コミット
Aのバージョン不一致でabort
永続性の話
• Read-Lockを取らないのはややこしい問題を
ひき起こす
– 具体的にはS2PLと同様にならない
X
Y
Z
T1: Yを読んでXに上書きする(Y=0だったのでX==0へ)
T2: YとZに書きこむ(Y=Z=10と書き込む)
WL
validation
Log T1
Log T2
WL
WL
トランザクション的にはT1→T2の順に滞りなくシリアライズさ
れたといえるがログに書き込まれる順序はT2→T1
永続性の話
• もし後に来たはずのT2しか書き込めなかった
らT1リカバリはどうなるの?
– もっとややこしいストーリーはまだまだ出てくる
X
Y
Z
WL
validation
Log T1
Log T2
WL
WL Crash!
バージョン比較の話
• 単調に増えるバージョンをデータ毎に個々に
管理するとまずい(特にARIES的な意味でLSN
はリカバリに不可欠)
– グローバルなカウンタでLSNを管理するのが普通
• LSNは全トランザクションが増やし続けるので
パフォーマンスボトルネックになる
– キャッシュコヒーレントトラフィックがヤバい
Silo
• LSNの代わりにEpochというグローバルカウン
タを共有
• 40msごとにEpochの数字を増やす専用のス
レッドが居る
– 他のスレッドは読むだけなのでロックは要らない
• 各トランザクションはコミットできる瞬間になっ
たら自分のTransactionID(TID)を取得する
– コミット前のEpoch確認の瞬間がSerialization
Pointとなる。
Silo
• TID(64bits)は以下の構成
– 上位ビット(32bits?)はepoch
– 中位ビット(余り)は他と被らない値
– 下位ビット(3bit)はフラグ(lock/latest-version/absent)を保持
• 決定する際は以下のプロトコルで決める
– Read/Write-Setの全てのレコードより大きくて
– 自分の過去のトランザクションより大きくて
– 現在のEpochを利用した
– 最小の値
Siloのログ
• ログは各ワーカーがローカルにEpochごとに
ディスクに吐き出す
– 全部のワーカーの同一Epochのログをかき集め
ればそのEpoch内の全ての更新が出来上がる
• 同一Epoch内でのログの全順序性は問わない
– 半順序性はTID決定プロトコルで保障される
– 永続化のタイミングは全てのワーカーの同一
Epochが書き出された時にGroup Commitされる
– リカバリの際は同一Epoch内の全てのログが集ま
らないと永続化されているとみなさない
永続性の話
• Epochが全トランザクションの有効性を保障す
る
X
Y
Z
T1, T2が同一Epochの場合
WL
validation
Log T1
Log T2
WL
WL
T2のログは同一EpochであるT1のログが残っていない場合
無効になる
Crash!
永続性の話
• Epochが全トランザクションの有効性を保障す
る
X
Y
Z
T1とT2のSerialization Pointの間にEpochの境界がある場
合
WL
validation
Log T1
Log T2
WL
WL Crash!
T2のEpochのほうがT1のEpochより進んでいるので無効化
される
Siloまとめ
• 他にもいくつも技術が詰め込まれてて話したいこ
といっぱいあるけど力不足で説明しきれない
• 32コアでTPC-Cが70万トランザクション/秒とかす
ごい
– ただしクエリはC++でローカル直書きなのでTPC-Cスコアそ
のものではない
• これをさらに改良したという「FOEDUS」がHPEから
OSSで出てる
– こっちもいろいろ語りたいけど時間がない
解決策
• 2 Phase Lockを行う
• Read-Trackingを行う(SSI)
• Read-Validationを行う(SILOその他)
• 先にSerializableにしてしまう
いつSerializeするか?
• クライアントからのリクエストにOne Shotモデ
ルを採用してよいなら届いた瞬間にキューに
放り込んでその順に実行された事にしてしま
えばいい
• Rethinking serializable multiversion
concurrency control(JoseらVLDB2015)などで
説明されてる。
• 発表資料作る時間なかったのでごめんなさい
Master
BOHM: 大まかな概観図
master
User3
User2
User1
A
B
C
D
E
D
E
C
A
B
worker1 worker2 worker3 worker4
行ごとに分割統治する
Shared Nothingアーキテクチャ
受け付けた順に処理する
BOHMベンチマーク(YCSB)
• パフォーマンスは出てるが圧倒的でもない
• Hekatonと2PLがいい勝負してる…!?
他になかったの?
• 4つしかないとは誰も言ってない
• いくつ思いつくかでトランザクションの知識量
を測れるかも

More Related Content

What's hot

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 
TiDBのトランザクション
TiDBのトランザクションTiDBのトランザクション
TiDBのトランザクションAkio Mitobe
 

What's hot (20)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Paxos
PaxosPaxos
Paxos
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Raft
RaftRaft
Raft
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
TiDBのトランザクション
TiDBのトランザクションTiDBのトランザクション
TiDBのトランザクション
 

Viewers also liked

キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達Kumazaki Hiroki
 
よくわかるHopscotch hashing
よくわかるHopscotch hashingよくわかるHopscotch hashing
よくわかるHopscotch hashingKumazaki Hiroki
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2拓 小林
 
こわくない同時実行制御
こわくない同時実行制御こわくない同時実行制御
こわくない同時実行制御Hiraku Nakano
 
What is jubatus? How it works for you?
What is jubatus? How it works for you?What is jubatus? How it works for you?
What is jubatus? How it works for you?Kumazaki Hiroki
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座Mikiya Okuno
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)Masahiko Sawada
 
5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組み5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組みRyo Shimamura
 
Koller Zeichnungen Alter Meister 31 March 2017 - Old Master Drawings
Koller Zeichnungen Alter Meister 31 March 2017 - Old Master DrawingsKoller Zeichnungen Alter Meister 31 March 2017 - Old Master Drawings
Koller Zeichnungen Alter Meister 31 March 2017 - Old Master DrawingsKoller Auctions
 
Pretty woman paintings (K.Razumov)
Pretty woman paintings (K.Razumov)Pretty woman paintings (K.Razumov)
Pretty woman paintings (K.Razumov)Makala (D)
 
博士論文執筆の流れ
博士論文執筆の流れ博士論文執筆の流れ
博士論文執筆の流れYuma Inoue
 
Elżbieta Kołodziejska flower paintings
Elżbieta Kołodziejska flower paintingsElżbieta Kołodziejska flower paintings
Elżbieta Kołodziejska flower paintingsMakala D.
 

Viewers also liked (20)

キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達キャッシュコヒーレントに囚われない並列カウンタ達
キャッシュコヒーレントに囚われない並列カウンタ達
 
Cache obliviousの話
Cache obliviousの話Cache obliviousの話
Cache obliviousの話
 
よくわかるHopscotch hashing
よくわかるHopscotch hashingよくわかるHopscotch hashing
よくわかるHopscotch hashing
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
Jubatus hackathon2
Jubatus hackathon2Jubatus hackathon2
Jubatus hackathon2
 
MerDy
MerDyMerDy
MerDy
 
What is jubatus (short)
What is jubatus (short)What is jubatus (short)
What is jubatus (short)
 
My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2
 
こわくない同時実行制御
こわくない同時実行制御こわくない同時実行制御
こわくない同時実行制御
 
What is jubatus? How it works for you?
What is jubatus? How it works for you?What is jubatus? How it works for you?
What is jubatus? How it works for you?
 
Bloom filter
Bloom filterBloom filter
Bloom filter
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
 
5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組み5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組み
 
Koller Zeichnungen Alter Meister 31 March 2017 - Old Master Drawings
Koller Zeichnungen Alter Meister 31 March 2017 - Old Master DrawingsKoller Zeichnungen Alter Meister 31 March 2017 - Old Master Drawings
Koller Zeichnungen Alter Meister 31 March 2017 - Old Master Drawings
 
Nutrition for toddlers
Nutrition for toddlersNutrition for toddlers
Nutrition for toddlers
 
Pretty woman paintings (K.Razumov)
Pretty woman paintings (K.Razumov)Pretty woman paintings (K.Razumov)
Pretty woman paintings (K.Razumov)
 
博士論文執筆の流れ
博士論文執筆の流れ博士論文執筆の流れ
博士論文執筆の流れ
 
Elżbieta Kołodziejska flower paintings
Elżbieta Kołodziejska flower paintingsElżbieta Kołodziejska flower paintings
Elżbieta Kołodziejska flower paintings
 
Cocktail
CocktailCocktail
Cocktail
 

Similar to トランザクションをSerializableにする4つの方法

できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
Serializabilityとは何か
Serializabilityとは何かSerializabilityとは何か
Serializabilityとは何かTakashi Hoshino
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御Takashi Hoshino
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Hitoshi Yoshida
 
ファントムリードが起こらないのにSerializableでない!
ファントムリードが起こらないのにSerializableでない! ファントムリードが起こらないのにSerializableでない!
ファントムリードが起こらないのにSerializableでない! 琢磨 三浦
 
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Toraoエンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI ToraoTorao Takami
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~Iwasaki Noboru
 
述語ロックの歴史 r2
述語ロックの歴史 r2述語ロックの歴史 r2
述語ロックの歴史 r2Sho Nakazono
 
ライブマイグレーション実装で体験したデバッグの解説
ライブマイグレーション実装で体験したデバッグの解説ライブマイグレーション実装で体験したデバッグの解説
ライブマイグレーション実装で体験したデバッグの解説Takaaki Fukai
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4shingo suzuki
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4shingo suzuki
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.Mikiya Okuno
 

Similar to トランザクションをSerializableにする4つの方法 (15)

できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
Clojure
ClojureClojure
Clojure
 
Serializabilityとは何か
Serializabilityとは何かSerializabilityとは何か
Serializabilityとは何か
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2
 
ファントムリードが起こらないのにSerializableでない!
ファントムリードが起こらないのにSerializableでない! ファントムリードが起こらないのにSerializableでない!
ファントムリードが起こらないのにSerializableでない!
 
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Toraoエンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
 
述語ロックの歴史 r2
述語ロックの歴史 r2述語ロックの歴史 r2
述語ロックの歴史 r2
 
ライブマイグレーション実装で体験したデバッグの解説
ライブマイグレーション実装で体験したデバッグの解説ライブマイグレーション実装で体験したデバッグの解説
ライブマイグレーション実装で体験したデバッグの解説
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
 
Flume
FlumeFlume
Flume
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.
 

More from Kumazaki Hiroki

An overview of query optimization in relational systems 論文紹介
An overview of query optimization in relational systems 論文紹介An overview of query optimization in relational systems 論文紹介
An overview of query optimization in relational systems 論文紹介Kumazaki Hiroki
 
トランザクション入門
トランザクション入門 トランザクション入門
トランザクション入門 Kumazaki Hiroki
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについてKumazaki Hiroki
 

More from Kumazaki Hiroki (7)

An overview of query optimization in relational systems 論文紹介
An overview of query optimization in relational systems 論文紹介An overview of query optimization in relational systems 論文紹介
An overview of query optimization in relational systems 論文紹介
 
トランザクション入門
トランザクション入門 トランザクション入門
トランザクション入門
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
 
SkipGraph
SkipGraphSkipGraph
SkipGraph
 
Lockfree list
Lockfree listLockfree list
Lockfree list
 
Lockfree Priority Queue
Lockfree Priority QueueLockfree Priority Queue
Lockfree Priority Queue
 
Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
 

Recently uploaded

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (10)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

トランザクションをSerializableにする4つの方法