論文
概要
- データベースの一貫性維持を信頼性の低いネットワークで行うことは困難
- Randomized algorithmで解決していく
- 以下3つの手法を検討
- Direct mail
- 更新は、更新がおきたサイトから他のすべてのサイトへ直ちに送られる
- 信頼性の低いネットワークでは難しい。(それに、すべてのサイトを知っているとも限らない←P2P的な仮定)
- Anti-entropy
- 全てのサイトは、ランダムに他のサイトを選択して、状態を共有し合って一貫性を維持する
- Direct mailより更新の伝播が遅い
- Rumor mongering ← これがGossip
- 噂話モデル
- 新しい更新を受け取ると、Hot rumorとして保持し、定期的に他のサイトをランダムに選び送りつける
- 相手がすでに知っていたら、Hotではないとして伝播をやめていく
Notation
- S: サイトの集合。∣S∣=n。
- s∈SにおけるDBのコピーは以下の関数を持つ
- s.valueOf:K→(v:V×t:T)
- K: キーの集合、V: 値の集合、T: タイムスタンプ
- s.valueOf[k]=(NIL,t)は、kに対応する値は削除されたことを示す。
- 単一キーに絞ると、s.ValueOf∈(v:V×t:T)
- 全てのサイト間で一貫性がある状態: ∀s,s′:s.ValueOf=s′.valueOf
- 更新操作: Update[v:V]≡s.ValueOf←(v,Now)
Direct Mail
FOR EACH s' ∈ S DO
PostMail[to: s', msg: ("Update", s.ValueOf)]
ENDLOOP
- 更新メッセージ("Update",(v,t))を受け取ったサイトは以下をやる
IF s.ValueOf.t < t THEN
s.ValueOf ← (v, t)
Anti-entropy
FOR SOME s' ∈ S DO
ResolveDifference[s, s']
ENDLOOP
ResolveDifference: PROC[s, s'] = { // PUSH
IF s.ValueOf.t > s'.ValueOf.t THEN
s'.ValueOf ← s.ValueOf
}
ResolveDifference: PROC[s, s'] = { // PULL
IF s.ValueOf.t < s'.ValueOf.t THEN
s.ValueOf ← s'.ValueOf
}
ResolveDifference: PROC[s, s'] = { // PUSH-PULL
SELECT TRUE FROM
IF s.ValueOf.t > s'.ValueOf.t ⇛ s'.ValueOf ← s.ValueOf
IF s.ValueOf.t < s'.ValueOf.t ⇛ s.ValueOf ← s'.ValueOf
ENDCASE => NULL
}