Mercurial > hg > Papers > 2023 > matac-sigos
comparison Paper/paper.tex @ 11:0cf15f862f02
transaction
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 16 Apr 2023 22:01:29 +0900 |
parents | 091510a8cd0a |
children | e739be918b0e |
comparison
equal
deleted
inserted
replaced
10:091510a8cd0a | 11:0cf15f862f02 |
---|---|
289 その後,コピーしたものはバックアップとしてディスクに書き込む. | 289 その後,コピーしたものはバックアップとしてディスクに書き込む. |
290 そうすることで,データの増加によるリソースの枯渇を防ぎ, | 290 そうすることで,データの増加によるリソースの枯渇を防ぎ, |
291 かつデータのバックアップを作成することで信頼性の向上が期待できる. | 291 かつデータのバックアップを作成することで信頼性の向上が期待できる. |
292 | 292 |
293 | 293 |
294 \section{トランザクション} | 294 \section{RedBlackTreeのトランザクション} |
295 | 295 |
296 ルートノードはデータをリード,ライトする時に増やす. | 296 トランザクションはDBの重要な機能の一つである. |
297 それにより,ルートノードは一つのスレッドを表現する. | 297 データの競合を防ぎ信頼性を向上させ,DBとしても扱えるよう |
298 スレッドがデータのアップデートを行う際は,他のスレッドとの競合を防ぐ必要がある. | 298 トランザクションの仕組みを考える必要がある. |
299 スレッドはルートノードからアップデート対象のノードまで辿るようにロックを獲得していく. | 299 今回,ファイルシステムは全てRedBlackTreeで実装するため, |
300 その際,子ノードのロックを獲得した後は親ノードのロックを手放して良いことにする. | 300 RedBlackTreeのノードに対するトランザクションを考える. |
301 データのアップデートが完了し,ロックを解除後,ルートノードの切り替えを行う. | 301 |
302 このような操作によって,トランザクションを実現する. | 302 トランザクションをwriteとreadに分けて考える. |
303 しかし,このままだとアップデートによってデータの一貫性を損なう場合がある. | 303 writeする場合,トランザクションはRedBlackTreeのルートの置き換えと対応する. |
304 常に最新のデータを持ったルートノードを選択する仕組みが必要になる. | 304 writeするために,まずルートを生やし書き込みが終わった後ルートを置き換える. |
305 | 305 そのため,書き込みの並列度はルートの数と一致する. |
306 なお,リードする際はその時点で最新のルートノードを元にリード用のルートノードを作成する. | 306 しかしながら,ルートの置き換えは競合的なので, |
307 リードは木を変更することがないので, | 307 複数書き込みを行っても1つしか成功しない. |
308 作成したリード用ルートノードの数だけ同時にリード可能となる. | 308 よって,単一のRedBlackTreeに複数の書き込みポイントを作り, |
309 並行実行可能にする必要がある. | |
310 | |
311 RedBlackTreeに複数の書き込みポイントを作るために, | |
312 キーごとのルートを作成する. | |
313 ノードはそれぞれがキーとRedBlackTreeを持つ状態になる. | |
314 writeする際は,そのキーのルートを置き換える. | |
315 それによって,RedBlackTreeは複数の書き込みポイントを持つことができ, | |
316 writeを並行実行することが可能となる. | |
317 | |
318 readはデータに変更を加えないため,複数同時に同じノードを読み込むことが可能である. | |
319 しかし,常に最新の情報を読み込めるとは限らない. | |
320 最新の情報が欲しい場合は書き込みを一旦止めるような処理が必要になる. | |
321 | |
309 | 322 |
310 \section{スキーマレスな実装} | 323 \section{スキーマレスな実装} |
311 | 324 |
312 従来のSQLのようなスキーマの定義が存在すると, | 325 従来のSQLのようなスキーマの定義が存在すると, |
313 個別にバックアップなどを取らない限り | 326 個別にバックアップなどを取らない限り |