SlideShare a Scribd company logo
1 of 17
Download to read offline
Serializabilityとは何か
サイボウズ・ラボ
星野 喬
1
rev20230112
自己紹介
• 星野 喬 (@starpoz)
• サイボウズ・ラボ (2009〜)
• 最近の活動
• トランザクション処理などの研究
• セキュリティキャンプ データベースゼミ講師 (2018〜2022)
• 「データベースシステム自作入門」
https://github.com/starpos/develop-transaction-system/releases
• サイボウズ・ラボユース
• 「C++初心者からの脱出」同人誌
• https://github.com/starpos/get-out-of-cpp-beginners
2
トランザクション処理
• トランザクション
• データベース上の一連の操作をひとまとまりにした単位
• (この資料では Tx と略す)
• トランザクション処理
• データベースに対する複数のトランザクションを正しく実行し、結果が Tx 単位で残る
(ACID を短く説明)
• アプリケーションソフトウェアやそれを使う人の利便性のため
• 効率良く処理するという大前提はある
• 効率良く
• ハードウェア(CPU、メモリ、ディスク、ネットワーク機材など)を活用して
• 良い性能(高スループット、低レイテンシ)で
• (無駄遣いせずに)
3
正しい実行とは?
• ユーザ/アプリケーションの要件を満たす実行のうち、
アプリケーション側が担わなくてすむように DBMS が頑張る部分
• Consistency: データを正しい状態に保つための補助
• Isolation: Tx を並行(並列)実行したときの正しさを担保
• C と I は共同で正しさについての役割を担う
• 諸説あり: https://fauna.com/blog/demystifying-database-systems-introduction-to-
consistency-levels
• Consistency という言葉に込められた様々な意味(文脈依存)
• 最新の値を読める(Non-stale reads)こと
• 外部の因果関係と矛盾しないこと
• 複数レプリカが同じ内容に収束すること
• ……
4
Serializabilityとは何か?
• 直列化可能性 (Serializability の訳)
• Tx 集合があたかも直列実行されたかのように(並行)実行されること
• 直列実行: Tx をひとつずつ実行すること
• 直列実行したら正しく動くという仮定を置いている
• 各 Tx にとっては世界でデータベースを読み書きしているのは自分だけとい
う仮定の元で実行できる、つまり任意の不変条件を検証可能
• Serializability (を実現する技術)はあくまで便利な道具である点に注意
• 世界は Serializable ではない。例えば Git repository の履歴は Merge commit が作れる。
つまり、一部のアプリケーションにとって Serializability は余計なお世話。
• Serializability はデータや Tx の正しさを担保するための極端な性質ともいえる
• 直列実行で済む要件の場合は迷いなく直列実行すべき
5
トランザクションの直列実行
• トランザクション 𝑡𝑖 をひとつずつ順番に実行する
• 𝑡𝑖 はデータベース状態 𝑠𝑖−1 を読んで、計算し、書き、𝑠𝑖 を生成する
• 結果として対応する Tx 全順序(状態の全順序)がひとつ決まる
• 世界に自分しかいないので、どう読むか、どう書くかという詳細に踏み込む
必要がない
• これだけだと、どのように並行に読み書きするかという議論ができないので、
もう少し詳細なモデルを作る必要がある
6
𝑠0 𝑠1
𝑡1 𝑡2
𝑠2
𝑡𝑁
𝑠𝑁
…
ページモデル
• データベースをページの集合として捉える
• ページは読み(R) or 書き(W) の操作 (Op) ができる
• Tx は、ページと操作のペアの集合と捉える
• Single-version モデル: 各ページ上の Op の(実行)順序を主に扱う
• 𝑟1 𝑥 𝑤1 𝑦 𝑟2 𝑥 𝑟2 𝑦 𝑤2(𝑦) (ここでは Op 列順 = Op 実行順序とする)
• Multi-version モデル: View を主に扱う
• 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑥0 𝑟2 𝑦1 𝑤2(𝑦) (Op 順序はない or 重要ではない)
7
ページモデルの詳細については Transactional Information Systems (Weikum and Vossen, Amazon) などを参照。
表記も概ねその作法に従っている。
ページ: 𝑥, 𝑦
𝑡1 = 𝑟1 𝑥 𝑤1 𝑦 (𝑥 を読んで、𝑦 を書く)
𝑡2 = 𝑟2 𝑥 𝑟2 𝑦 𝑤2 𝑦 (𝑥 と 𝑦 を読んで、𝑦 を書く)
𝑇 = {𝑡1, 𝑡2}
View
• View: 各 Read op について、どの Tx が書いた値を読んだかの対応
• 同一ページについての Write op を含む(自分自身でない) Tx が対応する
• Reads from 関係とも言う: 𝑡𝑖 reads 𝑥 from 𝑡𝑗 や 𝑡𝑖 reads from 𝑡𝑗 など
• 𝑡1 = 𝑟1 𝑥 𝑤1 𝑦 と 𝑡2 = 𝑟2 𝑥 𝑟2 𝑦 𝑤2 𝑦 があったとき、
その直列実行は 𝑡1𝑡2 か 𝑡2𝑡1 のいずれか (与えられた Tx 集合の順列)
• 直列実行における View 制約
• 直前にそのページを書いた Tx を View の対象とする (Tx 列から一意に決まる)
• 𝑡1𝑡2 のとき 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑥0 𝑟2 𝑦1 𝑤2 𝑦 となる
• Single-version モデルには直列実行と同様の View 制約がある
• Op 順序から View が一意に決まる (Standard version function と呼ばれる)
• Multi-version モデルでの View の扱い
• Serializability 判定問題において、View は与えられるもの
• Concurrency Control プロトコルにおいて、View は自分で決めるもの
8
View Serializable
• View が同じ直列実行が存在するような(並行)実行のこと
• ℎ1 = 𝑟2 𝑥0 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑦1 𝑤2 𝑦 は、
ℎ1
′
= 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑥0 𝑟2 𝑦1 𝑤2 𝑦 = 𝑡1𝑡2 という View が同じ直列実行が
存在するから View serializable
• CV-rule: Tx 集合上の半順序 𝑅 について、
• C-rule: 𝑡𝑖 reads from 𝑡𝑗 のとき、𝑡𝑗 <𝑅 𝑡𝑖
• V-rule: 𝑡𝑖 reads from 𝑡𝑗 かつ 𝑡𝑘 が同一ページを書いているとき、𝑡𝑘 <𝑅 𝑡𝑗 ∨ 𝑡𝑖 <𝑅 𝑡𝑘
• CV-equivalent Theorem
• C-rule と V-rule を満たす半順序 R が存在  View serializable
• View があれば View serializable かどうか決まるので、Single-version でも
Multi-version でも使える
9
もう少し詳しく知りたい人はこちら: https://qiita.com/starpoz/items/266ab514bbc308d438a6
Conflict Serializable
• 競合関係(Conflicts)が同じ直列実行が存在するような(並行)実行のこと
• Reader-writer Lock の理屈で競合関係を考える
• 原則として Single-version モデルで有効
• Operation 順序を 𝑂 とする(Tx 集合を 𝑇、op(𝑇) = ⨆ {𝑜 ∈ 𝑡 ∣ 𝑡 ∈ 𝑇)、𝑂 ⊂ 𝑜𝑝(𝑇) × 𝑜𝑝(𝑇))
• Multi-version でもうまく 𝑂 相当の情報を与えて Conflicts を定義すれば議論は可能
• 𝑝𝑖 𝑥 <𝑂 𝑞𝑗 𝑥 となる 𝑥 が存在する 𝑖, 𝑗 について 𝑡𝑖, 𝑡𝑗 ∈ conf𝑝𝑞(𝑇, 𝑂)
• ただし、(𝑝, 𝑞) は (𝑤, 𝑟), (𝑤, 𝑤), (𝑟, 𝑤) のいずれか
• conf 𝑇, 𝑂 ≔ conf𝑤𝑟 𝑇, 𝑂 ∪ conf𝑤𝑤 𝑇, 𝑂 ∪ conf𝑟𝑤(𝑇, 𝑂)
• Conflict-equivalent Theorem
• conf 𝑇, 𝑂 が半順序  Conflict serializable
• Conflict serializable ならば View serializable
• 逆は必ずしも成り立たない
10
ページモデルで扱いづらいもの
• データベースレコードの読み書きよりも抽象度の高い操作
• ページモデルによる素朴な解釈では、レコードをページとみなす
• 例1: Predicate reads
• 例2: 口座間の資金移動
• 例3: SQL Insert/Delete の最適化
11
例1: Predicate Reads
• 物理的に存在しないレコードも含めて読む
• Table full scan や Range scan など
• 問題: Phantom anomaly
• 𝑡1: Table に 4 を Insert
• 𝑡2: Table の Full scan 結果 1, 5
• 𝑤1 𝑧 𝑟2(𝑥0, 𝑦0) と解釈してしまうと、𝑡1𝑡2 は OK (View が一致する直列実行) となってしまう
• しかし、𝑡1𝑡2 直列実行による 𝑡2 の Full scan 結果は 1, 4, 5 となるはず
• 物理的に存在しないレコードについて直接 Lock することなどができない
• 典型的な Phantom anomaly 回避方法
• 存在しないレコードに対応するデータ構造単位をページとみなす
• Table を読んだ(Full scan) vs Table を書いた(Insert)した
• Tree index の Leaf node を読んだ(Range scan) vs Leaf node を書いた(Insert)した
12
𝑠0: {1,5} 𝑠1: {1,4,5}
𝑡1 𝑡2?
参考: Adya による Predicate の扱い http://pmg.csail.mit.edu/pubs/adya99__weak_consis-abstract.html
例2: 口座間の資金移動
• データベース状態: 𝑠 = {𝐴, 𝐵} 預金額を表す非負整数 2 口座分
• 操作: 口座間の資金移動(引き出し+預け入れ)
• 例
• 𝑠0 = 𝐴: 0, 𝐵: 100
• 𝑡1: 𝐵 から 𝐴 に 10 移動
• 𝑡2: 𝐵 から 𝐴 に 20 移動
• 𝑡3: 𝐴 から 𝐵 に 30 移動
• ページモデルで表現: A,B を Read および Write (Read-modify-write)
• 𝑟1 𝐴0, 𝐵0 𝑤1(𝐴, 𝐵)𝑟2 𝐴1, 𝐵1 𝑤2(𝐴, 𝐵)𝑟3 𝐴2, 𝐵2 𝑤3(𝐴, 𝐵)
• この表現だと 𝑡1𝑡2𝑡3 しか OK にできないが、𝑡2𝑡1𝑡3 も OK としたい
13
𝑠0: {𝐴: 0, 𝐵: 100} 𝑠1: {𝐴: 10, 𝐵: 90}
𝑡1
𝑠2: {𝐴: 30, 𝐵: 70} 𝑠3: {𝐴: 0, 𝐵: 100}
𝑡2 𝑡3
参考(例のみ、提案モデルは異なる): https://dl.acm.org/doi/10.1145/3486601.3486707
例3: SQL Insert/Delete
• SQL Insert/Delete は条件付き操作
• 対応するレコードが存在しないときのみ Insert 可能
• 対応するレコードが存在するときのみ Delete 可能
• ページモデルでの素朴な解釈では Read-modify-write 扱いとなる
• 例
• 初期状態: 𝑥 に対応するレコードが存在
• 𝑡1 = 𝑟1 𝑥 𝑤1(𝑥) 𝑥 に対応するレコードを Delete する操作
• 𝑡2 = 𝑤2(𝑥) Upsert (存在していたら Update、していなかったら Insert)
• 𝑟1 𝑥0 𝑤1(𝑥)𝑤2 𝑥 としてしまうと、𝑡1𝑡2 のみが OK となるが、
本来 𝑡2𝑡1 も OK として問題ないはず
14
解決方針: View の抽象化
• View は「Tx の実行を再現するための十分条件」であると再定義する
• 再現性がある(View の一致)とは、再現に必要なデータベース状態の観測結果
が一致すること
• 再現に影響しない観測行為を実際には行っていたとしても View には含まれない
• View serializable は「View が同じ直列実行が存在するような(並行)実行」な
ので、 View の定義があればページモデルに依存せず使える
15
𝑠𝑖−1 𝑠𝑖
𝑡𝑖
状態の観測結果 状態変更の再現
呼び出し側への返り値の再現
呼び出し側からの入力(固定)
例1〜3の再解釈
• 例1: Predicate Reads
• 𝑡1: Insert 4
• 𝑡2: Full scan 結果 {1,5}。(再現条件そのもの)
• 𝑡1𝑡2 は、再現のための観測結果({1,4,5})が一致しないので NG (View が一致しない直列実行)
• 例2: 口座間の資金移動
• 𝑠0 = 𝐴: 0, 𝐵: 100
• 𝑡1: 𝐵 から 𝐴 に 10 移動。再現条件は 𝐵 ≥ 10。
• 𝑡2: 𝐵 から 𝐴 に 20 移動。再現条件は 𝐵 ≥ 20。
• 𝑡3: 𝐴 から 𝐵 に 30 移動。再現条件は 𝐴 ≥ 30。
• 𝑡1𝑡2𝑡3 も 𝑡2𝑡1𝑡3 も OK
• 例3: SQL Insert/Delete
• 𝑡1: 𝑥 が存在していたら Delete。再現条件は 𝑥 が存在していること。
• 𝑡2: 𝑥 の Upsert。再現条件ナシ (どんなデータベース状態に対しても必ず実行可能)
• 𝑡1𝑡2 も 𝑡2𝑡1 も OK
16
まとめ
• Serializability の議論にはページモデルが使われてきた
• ページモデルで扱いづらい事例がいくつかある
• View を抽象化することでこれらの事例を統一的に扱えるようになる
17

More Related Content

What's hot

PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
システムダウンのひみつ
システムダウンのひみつシステムダウンのひみつ
システムダウンのひみつYoshitaka Kawashima
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"Kentaro Yoshida
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
IocコンテナについてAkio Terayama
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前Yutaka Kinjyo
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてTakuto Wada
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方歩 柴田
 
分散システム第7章(前半)
分散システム第7章(前半)分散システム第7章(前半)
分散システム第7章(前半)Kenta Hattori
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013Kinji Akemine
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)NTT DATA Technology & Innovation
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話ktaro_w
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
Autonomous Database で Oracle Database19c 新機能 を味わう。
Autonomous Database で Oracle Database19c 新機能 を味わう。Autonomous Database で Oracle Database19c 新機能 を味わう。
Autonomous Database で Oracle Database19c 新機能 を味わう。歩 柴田
 

What's hot (20)

PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
システムダウンのひみつ
システムダウンのひみつシステムダウンのひみつ
システムダウンのひみつ
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
Iocコンテナについて
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
Consistent hash
Consistent hashConsistent hash
Consistent hash
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
分散システム第7章(前半)
分散システム第7章(前半)分散システム第7章(前半)
分散システム第7章(前半)
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
Autonomous Database で Oracle Database19c 新機能 を味わう。
Autonomous Database で Oracle Database19c 新機能 を味わう。Autonomous Database で Oracle Database19c 新機能 を味わう。
Autonomous Database で Oracle Database19c 新機能 を味わう。
 

Similar to Serializabilityとは何か

【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]
【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]
【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]Hideo Takagi
 
Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Chiaki Hatanaka
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriYuta Okamoto
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)信之 岩永
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強Kiyoshi Ogawa
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriYuta Okamoto
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出Shuyo Nakatani
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析mametter
 
Rubyによるデータ解析
Rubyによるデータ解析Rubyによるデータ解析
Rubyによるデータ解析Shugo Maeda
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
Mvp road show_0830_rev1
Mvp road show_0830_rev1Mvp road show_0830_rev1
Mvp road show_0830_rev1Takano Masaru
 
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~Iwasaki Noboru
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010Nobuaki Oshiro
 
Data consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスData consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスMasayuki Ozawa
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
Logをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組みLogをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組みKen Morishita
 

Similar to Serializabilityとは何か (20)

StreamGraph
StreamGraphStreamGraph
StreamGraph
 
【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]
【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]
【ウェブ セミナー】AI 時代のクラウド データ ウェアハウス Azure SQL Data Warehouse [実践編]
 
Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
 
Rubyによるデータ解析
Rubyによるデータ解析Rubyによるデータ解析
Rubyによるデータ解析
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
Mvp road show_0830_rev1
Mvp road show_0830_rev1Mvp road show_0830_rev1
Mvp road show_0830_rev1
 
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
 
Clojure
ClojureClojure
Clojure
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
Data consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンスData consistency 入門 data partitioning ガイダンス
Data consistency 入門 data partitioning ガイダンス
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
Logをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組みLogをs3とredshiftに格納する仕組み
Logをs3とredshiftに格納する仕組み
 

More from Takashi Hoshino

Isolation Level について
Isolation Level についてIsolation Level について
Isolation Level についてTakashi Hoshino
 
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3Takashi Hoshino
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御Takashi Hoshino
 
Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38Takashi Hoshino
 
Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25Takashi Hoshino
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Takashi Hoshino
 
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法Takashi Hoshino
 
メモリより大きなデータの Sufix Array 構築方法の紹介
メモリより大きなデータの Sufix Array 構築方法の紹介メモリより大きなデータの Sufix Array 構築方法の紹介
メモリより大きなデータの Sufix Array 構築方法の紹介Takashi Hoshino
 
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーションTakashi Hoshino
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤTakashi Hoshino
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージTakashi Hoshino
 
Intel TSX 触ってみた 追加実験 (TTAS)
Intel TSX 触ってみた 追加実験 (TTAS)Intel TSX 触ってみた 追加実験 (TTAS)
Intel TSX 触ってみた 追加実験 (TTAS)Takashi Hoshino
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiTakashi Hoshino
 
Suffix Array 構築方法の紹介
Suffix Array 構築方法の紹介Suffix Array 構築方法の紹介
Suffix Array 構築方法の紹介Takashi Hoshino
 
An Efficient Backup and Replication of Storage
An Efficient Backup and Replication of StorageAn Efficient Backup and Replication of Storage
An Efficient Backup and Replication of StorageTakashi Hoshino
 
ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法Takashi Hoshino
 
Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86optiTakashi Hoshino
 
WalB: Block-level WAL. Concept.
WalB: Block-level WAL. Concept.WalB: Block-level WAL. Concept.
WalB: Block-level WAL. Concept.Takashi Hoshino
 

More from Takashi Hoshino (20)

Isolation Level について
Isolation Level についてIsolation Level について
Isolation Level について
 
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
 
WalB Driver Internals
WalB Driver InternalsWalB Driver Internals
WalB Driver Internals
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御
 
Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38
 
Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
 
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法
 
メモリより大きなデータの Sufix Array 構築方法の紹介
メモリより大きなデータの Sufix Array 構築方法の紹介メモリより大きなデータの Sufix Array 構築方法の紹介
メモリより大きなデータの Sufix Array 構築方法の紹介
 
WalBの紹介
WalBの紹介WalBの紹介
WalBの紹介
 
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージ
 
Intel TSX 触ってみた 追加実験 (TTAS)
Intel TSX 触ってみた 追加実験 (TTAS)Intel TSX 触ってみた 追加実験 (TTAS)
Intel TSX 触ってみた 追加実験 (TTAS)
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
 
Suffix Array 構築方法の紹介
Suffix Array 構築方法の紹介Suffix Array 構築方法の紹介
Suffix Array 構築方法の紹介
 
An Efficient Backup and Replication of Storage
An Efficient Backup and Replication of StorageAn Efficient Backup and Replication of Storage
An Efficient Backup and Replication of Storage
 
ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法
 
Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86opti
 
WalB: Block-level WAL. Concept.
WalB: Block-level WAL. Concept.WalB: Block-level WAL. Concept.
WalB: Block-level WAL. Concept.
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Recently uploaded (12)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

Serializabilityとは何か

  • 2. 自己紹介 • 星野 喬 (@starpoz) • サイボウズ・ラボ (2009〜) • 最近の活動 • トランザクション処理などの研究 • セキュリティキャンプ データベースゼミ講師 (2018〜2022) • 「データベースシステム自作入門」 https://github.com/starpos/develop-transaction-system/releases • サイボウズ・ラボユース • 「C++初心者からの脱出」同人誌 • https://github.com/starpos/get-out-of-cpp-beginners 2
  • 3. トランザクション処理 • トランザクション • データベース上の一連の操作をひとまとまりにした単位 • (この資料では Tx と略す) • トランザクション処理 • データベースに対する複数のトランザクションを正しく実行し、結果が Tx 単位で残る (ACID を短く説明) • アプリケーションソフトウェアやそれを使う人の利便性のため • 効率良く処理するという大前提はある • 効率良く • ハードウェア(CPU、メモリ、ディスク、ネットワーク機材など)を活用して • 良い性能(高スループット、低レイテンシ)で • (無駄遣いせずに) 3
  • 4. 正しい実行とは? • ユーザ/アプリケーションの要件を満たす実行のうち、 アプリケーション側が担わなくてすむように DBMS が頑張る部分 • Consistency: データを正しい状態に保つための補助 • Isolation: Tx を並行(並列)実行したときの正しさを担保 • C と I は共同で正しさについての役割を担う • 諸説あり: https://fauna.com/blog/demystifying-database-systems-introduction-to- consistency-levels • Consistency という言葉に込められた様々な意味(文脈依存) • 最新の値を読める(Non-stale reads)こと • 外部の因果関係と矛盾しないこと • 複数レプリカが同じ内容に収束すること • …… 4
  • 5. Serializabilityとは何か? • 直列化可能性 (Serializability の訳) • Tx 集合があたかも直列実行されたかのように(並行)実行されること • 直列実行: Tx をひとつずつ実行すること • 直列実行したら正しく動くという仮定を置いている • 各 Tx にとっては世界でデータベースを読み書きしているのは自分だけとい う仮定の元で実行できる、つまり任意の不変条件を検証可能 • Serializability (を実現する技術)はあくまで便利な道具である点に注意 • 世界は Serializable ではない。例えば Git repository の履歴は Merge commit が作れる。 つまり、一部のアプリケーションにとって Serializability は余計なお世話。 • Serializability はデータや Tx の正しさを担保するための極端な性質ともいえる • 直列実行で済む要件の場合は迷いなく直列実行すべき 5
  • 6. トランザクションの直列実行 • トランザクション 𝑡𝑖 をひとつずつ順番に実行する • 𝑡𝑖 はデータベース状態 𝑠𝑖−1 を読んで、計算し、書き、𝑠𝑖 を生成する • 結果として対応する Tx 全順序(状態の全順序)がひとつ決まる • 世界に自分しかいないので、どう読むか、どう書くかという詳細に踏み込む 必要がない • これだけだと、どのように並行に読み書きするかという議論ができないので、 もう少し詳細なモデルを作る必要がある 6 𝑠0 𝑠1 𝑡1 𝑡2 𝑠2 𝑡𝑁 𝑠𝑁 …
  • 7. ページモデル • データベースをページの集合として捉える • ページは読み(R) or 書き(W) の操作 (Op) ができる • Tx は、ページと操作のペアの集合と捉える • Single-version モデル: 各ページ上の Op の(実行)順序を主に扱う • 𝑟1 𝑥 𝑤1 𝑦 𝑟2 𝑥 𝑟2 𝑦 𝑤2(𝑦) (ここでは Op 列順 = Op 実行順序とする) • Multi-version モデル: View を主に扱う • 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑥0 𝑟2 𝑦1 𝑤2(𝑦) (Op 順序はない or 重要ではない) 7 ページモデルの詳細については Transactional Information Systems (Weikum and Vossen, Amazon) などを参照。 表記も概ねその作法に従っている。 ページ: 𝑥, 𝑦 𝑡1 = 𝑟1 𝑥 𝑤1 𝑦 (𝑥 を読んで、𝑦 を書く) 𝑡2 = 𝑟2 𝑥 𝑟2 𝑦 𝑤2 𝑦 (𝑥 と 𝑦 を読んで、𝑦 を書く) 𝑇 = {𝑡1, 𝑡2}
  • 8. View • View: 各 Read op について、どの Tx が書いた値を読んだかの対応 • 同一ページについての Write op を含む(自分自身でない) Tx が対応する • Reads from 関係とも言う: 𝑡𝑖 reads 𝑥 from 𝑡𝑗 や 𝑡𝑖 reads from 𝑡𝑗 など • 𝑡1 = 𝑟1 𝑥 𝑤1 𝑦 と 𝑡2 = 𝑟2 𝑥 𝑟2 𝑦 𝑤2 𝑦 があったとき、 その直列実行は 𝑡1𝑡2 か 𝑡2𝑡1 のいずれか (与えられた Tx 集合の順列) • 直列実行における View 制約 • 直前にそのページを書いた Tx を View の対象とする (Tx 列から一意に決まる) • 𝑡1𝑡2 のとき 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑥0 𝑟2 𝑦1 𝑤2 𝑦 となる • Single-version モデルには直列実行と同様の View 制約がある • Op 順序から View が一意に決まる (Standard version function と呼ばれる) • Multi-version モデルでの View の扱い • Serializability 判定問題において、View は与えられるもの • Concurrency Control プロトコルにおいて、View は自分で決めるもの 8
  • 9. View Serializable • View が同じ直列実行が存在するような(並行)実行のこと • ℎ1 = 𝑟2 𝑥0 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑦1 𝑤2 𝑦 は、 ℎ1 ′ = 𝑟1 𝑥0 𝑤1 𝑦 𝑟2 𝑥0 𝑟2 𝑦1 𝑤2 𝑦 = 𝑡1𝑡2 という View が同じ直列実行が 存在するから View serializable • CV-rule: Tx 集合上の半順序 𝑅 について、 • C-rule: 𝑡𝑖 reads from 𝑡𝑗 のとき、𝑡𝑗 <𝑅 𝑡𝑖 • V-rule: 𝑡𝑖 reads from 𝑡𝑗 かつ 𝑡𝑘 が同一ページを書いているとき、𝑡𝑘 <𝑅 𝑡𝑗 ∨ 𝑡𝑖 <𝑅 𝑡𝑘 • CV-equivalent Theorem • C-rule と V-rule を満たす半順序 R が存在  View serializable • View があれば View serializable かどうか決まるので、Single-version でも Multi-version でも使える 9 もう少し詳しく知りたい人はこちら: https://qiita.com/starpoz/items/266ab514bbc308d438a6
  • 10. Conflict Serializable • 競合関係(Conflicts)が同じ直列実行が存在するような(並行)実行のこと • Reader-writer Lock の理屈で競合関係を考える • 原則として Single-version モデルで有効 • Operation 順序を 𝑂 とする(Tx 集合を 𝑇、op(𝑇) = ⨆ {𝑜 ∈ 𝑡 ∣ 𝑡 ∈ 𝑇)、𝑂 ⊂ 𝑜𝑝(𝑇) × 𝑜𝑝(𝑇)) • Multi-version でもうまく 𝑂 相当の情報を与えて Conflicts を定義すれば議論は可能 • 𝑝𝑖 𝑥 <𝑂 𝑞𝑗 𝑥 となる 𝑥 が存在する 𝑖, 𝑗 について 𝑡𝑖, 𝑡𝑗 ∈ conf𝑝𝑞(𝑇, 𝑂) • ただし、(𝑝, 𝑞) は (𝑤, 𝑟), (𝑤, 𝑤), (𝑟, 𝑤) のいずれか • conf 𝑇, 𝑂 ≔ conf𝑤𝑟 𝑇, 𝑂 ∪ conf𝑤𝑤 𝑇, 𝑂 ∪ conf𝑟𝑤(𝑇, 𝑂) • Conflict-equivalent Theorem • conf 𝑇, 𝑂 が半順序  Conflict serializable • Conflict serializable ならば View serializable • 逆は必ずしも成り立たない 10
  • 12. 例1: Predicate Reads • 物理的に存在しないレコードも含めて読む • Table full scan や Range scan など • 問題: Phantom anomaly • 𝑡1: Table に 4 を Insert • 𝑡2: Table の Full scan 結果 1, 5 • 𝑤1 𝑧 𝑟2(𝑥0, 𝑦0) と解釈してしまうと、𝑡1𝑡2 は OK (View が一致する直列実行) となってしまう • しかし、𝑡1𝑡2 直列実行による 𝑡2 の Full scan 結果は 1, 4, 5 となるはず • 物理的に存在しないレコードについて直接 Lock することなどができない • 典型的な Phantom anomaly 回避方法 • 存在しないレコードに対応するデータ構造単位をページとみなす • Table を読んだ(Full scan) vs Table を書いた(Insert)した • Tree index の Leaf node を読んだ(Range scan) vs Leaf node を書いた(Insert)した 12 𝑠0: {1,5} 𝑠1: {1,4,5} 𝑡1 𝑡2? 参考: Adya による Predicate の扱い http://pmg.csail.mit.edu/pubs/adya99__weak_consis-abstract.html
  • 13. 例2: 口座間の資金移動 • データベース状態: 𝑠 = {𝐴, 𝐵} 預金額を表す非負整数 2 口座分 • 操作: 口座間の資金移動(引き出し+預け入れ) • 例 • 𝑠0 = 𝐴: 0, 𝐵: 100 • 𝑡1: 𝐵 から 𝐴 に 10 移動 • 𝑡2: 𝐵 から 𝐴 に 20 移動 • 𝑡3: 𝐴 から 𝐵 に 30 移動 • ページモデルで表現: A,B を Read および Write (Read-modify-write) • 𝑟1 𝐴0, 𝐵0 𝑤1(𝐴, 𝐵)𝑟2 𝐴1, 𝐵1 𝑤2(𝐴, 𝐵)𝑟3 𝐴2, 𝐵2 𝑤3(𝐴, 𝐵) • この表現だと 𝑡1𝑡2𝑡3 しか OK にできないが、𝑡2𝑡1𝑡3 も OK としたい 13 𝑠0: {𝐴: 0, 𝐵: 100} 𝑠1: {𝐴: 10, 𝐵: 90} 𝑡1 𝑠2: {𝐴: 30, 𝐵: 70} 𝑠3: {𝐴: 0, 𝐵: 100} 𝑡2 𝑡3 参考(例のみ、提案モデルは異なる): https://dl.acm.org/doi/10.1145/3486601.3486707
  • 14. 例3: SQL Insert/Delete • SQL Insert/Delete は条件付き操作 • 対応するレコードが存在しないときのみ Insert 可能 • 対応するレコードが存在するときのみ Delete 可能 • ページモデルでの素朴な解釈では Read-modify-write 扱いとなる • 例 • 初期状態: 𝑥 に対応するレコードが存在 • 𝑡1 = 𝑟1 𝑥 𝑤1(𝑥) 𝑥 に対応するレコードを Delete する操作 • 𝑡2 = 𝑤2(𝑥) Upsert (存在していたら Update、していなかったら Insert) • 𝑟1 𝑥0 𝑤1(𝑥)𝑤2 𝑥 としてしまうと、𝑡1𝑡2 のみが OK となるが、 本来 𝑡2𝑡1 も OK として問題ないはず 14
  • 15. 解決方針: View の抽象化 • View は「Tx の実行を再現するための十分条件」であると再定義する • 再現性がある(View の一致)とは、再現に必要なデータベース状態の観測結果 が一致すること • 再現に影響しない観測行為を実際には行っていたとしても View には含まれない • View serializable は「View が同じ直列実行が存在するような(並行)実行」な ので、 View の定義があればページモデルに依存せず使える 15 𝑠𝑖−1 𝑠𝑖 𝑡𝑖 状態の観測結果 状態変更の再現 呼び出し側への返り値の再現 呼び出し側からの入力(固定)
  • 16. 例1〜3の再解釈 • 例1: Predicate Reads • 𝑡1: Insert 4 • 𝑡2: Full scan 結果 {1,5}。(再現条件そのもの) • 𝑡1𝑡2 は、再現のための観測結果({1,4,5})が一致しないので NG (View が一致しない直列実行) • 例2: 口座間の資金移動 • 𝑠0 = 𝐴: 0, 𝐵: 100 • 𝑡1: 𝐵 から 𝐴 に 10 移動。再現条件は 𝐵 ≥ 10。 • 𝑡2: 𝐵 から 𝐴 に 20 移動。再現条件は 𝐵 ≥ 20。 • 𝑡3: 𝐴 から 𝐵 に 30 移動。再現条件は 𝐴 ≥ 30。 • 𝑡1𝑡2𝑡3 も 𝑡2𝑡1𝑡3 も OK • 例3: SQL Insert/Delete • 𝑡1: 𝑥 が存在していたら Delete。再現条件は 𝑥 が存在していること。 • 𝑡2: 𝑥 の Upsert。再現条件ナシ (どんなデータベース状態に対しても必ず実行可能) • 𝑡1𝑡2 も 𝑡2𝑡1 も OK 16
  • 17. まとめ • Serializability の議論にはページモデルが使われてきた • ページモデルで扱いづらい事例がいくつかある • View を抽象化することでこれらの事例を統一的に扱えるようになる 17