diff 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
line wrap: on
line diff
--- a/Paper/paper.tex	Sun Apr 16 20:58:40 2023 +0900
+++ b/Paper/paper.tex	Sun Apr 16 22:01:29 2023 +0900
@@ -291,21 +291,34 @@
 かつデータのバックアップを作成することで信頼性の向上が期待できる.
 
 
-\section{トランザクション}
+\section{RedBlackTreeのトランザクション}
+
+トランザクションはDBの重要な機能の一つである.
+データの競合を防ぎ信頼性を向上させ,DBとしても扱えるよう
+トランザクションの仕組みを考える必要がある.
+今回,ファイルシステムは全てRedBlackTreeで実装するため,
+RedBlackTreeのノードに対するトランザクションを考える.
 
-ルートノードはデータをリード,ライトする時に増やす.
-それにより,ルートノードは一つのスレッドを表現する.
-スレッドがデータのアップデートを行う際は,他のスレッドとの競合を防ぐ必要がある.
-スレッドはルートノードからアップデート対象のノードまで辿るようにロックを獲得していく.
-その際,子ノードのロックを獲得した後は親ノードのロックを手放して良いことにする.
-データのアップデートが完了し,ロックを解除後,ルートノードの切り替えを行う.
-このような操作によって,トランザクションを実現する.
-しかし,このままだとアップデートによってデータの一貫性を損なう場合がある.
-常に最新のデータを持ったルートノードを選択する仕組みが必要になる.
+トランザクションをwriteとreadに分けて考える.
+writeする場合,トランザクションはRedBlackTreeのルートの置き換えと対応する.
+writeするために,まずルートを生やし書き込みが終わった後ルートを置き換える.
+そのため,書き込みの並列度はルートの数と一致する.
+しかしながら,ルートの置き換えは競合的なので,
+複数書き込みを行っても1つしか成功しない.
+よって,単一のRedBlackTreeに複数の書き込みポイントを作り,
+並行実行可能にする必要がある.
 
-なお,リードする際はその時点で最新のルートノードを元にリード用のルートノードを作成する.
-リードは木を変更することがないので,
-作成したリード用ルートノードの数だけ同時にリード可能となる.
+RedBlackTreeに複数の書き込みポイントを作るために,
+キーごとのルートを作成する.
+ノードはそれぞれがキーとRedBlackTreeを持つ状態になる.
+writeする際は,そのキーのルートを置き換える.
+それによって,RedBlackTreeは複数の書き込みポイントを持つことができ,
+writeを並行実行することが可能となる.
+
+readはデータに変更を加えないため,複数同時に同じノードを読み込むことが可能である.
+しかし,常に最新の情報を読み込めるとは限らない.
+最新の情報が欲しい場合は書き込みを一旦止めるような処理が必要になる.
+
 
 \section{スキーマレスな実装}