multi-versionã®åºç¤
multiversionã®åºç¤
èªåç¨ã®Multi Version Concurrency Controlã®ã¾ã¨ã
MVCCã®åºç¤çè«ãã¾ã¨ãã¦ãããä»å¾ã¯ãããåç
§ããã
åºæ¬çã«TXæ¬ã¨CCæ¬ããå¿
è¦ãªé¨åãã¾ã¨ãã¦ããã
ï¼ä¸åã¾ã¨ãã¦ããã©ãMulti-version Conflict Serializability - 急がば回れ、選ぶなら近道
ååã¯ããããCSRã¨ã®æ··ç·ãé²ãã¨ããæå³ã ã£ãã®ã§ãä»åã¯ãã£ã¨åºæ¬çãªã¨ããããããã«ãä»åã¯CSRã¨ã®é¢ä¿ã¯ã¬ã³ç¡è¦ãï¼
åç½®ãï¼èªåã®èããè¨é²çã«
åºæ¬çã«Multi Version Concurrency Control ï¼ä»¥ä¸MVCCï¼ã¯çè«å
è¡ã ã£ããããã¯MVCCã®ãªã¼ãã¸ã¼ããsingle-versionã®ããã©ã¼ãã³ã¹ãåé§ã§ããªãã£ããã¨ã«ããã以ä¸ã®çç±ã«ããMVCCãä»å¾ã¯ä¼¸å¼µããã¨èãã¦ããã
1.ã¡ã¢ãªã¼ã®é²æ©ã¨ä½ã³ã¹ãå
ç¹ã«ã¡ã¢ãªã¼ã®å¤§å®¹éåã¨é«å¯åº¦åã大ãããããã«ããIn placeã®ç¸å¯¾çãªã¡ãªãããè½ã¡ããsingle-versionã®æ¹ãå¹çããããã¨ããåæããªããªãã¤ã¤ãããIn placeã¯è³æºã®å¹ççæ´»ç¨ã¨ããæå³ã§ã¯æå¹ã ããåæãå´©ããã¨ä¸å¿
è¦ã«é¢åãªå®è£
ã¨ãããã¨ã«ãªããããªããã¡ã¢ãªã¼è³æºãè²´éã§ãªãããã°ãã©ãã©ããã¼ã¸ã®æ´æ°ãæ¸ã足ãã¦ããã ãã¨ããææ³ãæ¤è¨ã«å¤ããããªããå½ç¶GCãããæ¹ãå¤ããå¿
è¦ãããã¨æããããç°¡ç¥åãããå¯è½æ§ãé«ãã¨å人çã«ã¯æ³åãã¦ããã
2.Single-versionã®éç
ç¾å¨ã®åæ£OLTPã§ã¯ãMOCC/Foedusã«è¦ãããã«ãSingle-versionã®ä»çµã¿ã§ã¯abortçã®é«æ¢ã¾ããå£ã«ãªã£ã¦ãããã¨ã³ã¸ãã¢ãªã³ã°çææ³ã§ä¹ãåãã¨ããèããããè¦ãããããsingle-versionã®ç¡é§ï¼validationæç¹ã§ã®å½é½æ§ï¼ã許容éçã«è¿ã¥ãã¦ããã¨ãããããserializableã®ç¹ããè¨ãã¨ãscheduling powerãã®ãã®ã¯ééããªãMVCCã®æ¹ãä¸ã§ãããããabortãå°ãªãããã®æå³ã§ã¯MVCCã®ã¡ãªããã大ããã¯ãã¼ãºã¢ãããããã¨æãã
MVCCã¨single-versionã®æ ¹æ¬çãªèãæ¹ã®éã
端çã«è¨ãã°ãsingle-versionã¯in placeã ãâãããã£ã¦âwriteã®ç«¶åãæ大ã®èª²é¡ã«ãªããreadã«ã¤ãã¦ã¯ãé¸æã®ä½å°ã¯ãªããç´åã®write(ã³ãããã®æç¡ã«ããããã)ãèªãã®ã¿ã§ãããæ¤è¨èª²é¡ã«ã¯åºæ¬çã«ã¯ãªããªãã対ãã¦ãMVCCã¯in placeã§ã¯ãªããwriteã®ç«¶åã¯ããããåé¡ã§ãããªãããã®ä»£ããreadã«ã¤ãã¦ã¯ãã©ã®versionãèªããï¼ã¨ããé¸æãçºçããæåªå
ã«æ¤è¨ãã¹ãäºé
ã«ãªããçµæ両è
ã§çè«ã®ãã¬ã¼ã ã¯ã¼ã¯ãç°ãªãã
1.âRead Fromâ Relation(以ä¸RF)
ã¾ããRFãå®ç¾©ãããããã¯ã©ã®readãã©ã®writeãèªãã§ããããã¨ãããã¨ã表ãã
Read from Relation
RF(m) := (ti,x,tj | rj(xi)âop(m))
ããªãã¡history m ã«å«ã¾ããæç¶ããã§ãã¤transactionï¼ä»¥ä¸txï¼ jã«å«ã¾ããreadããtx i ã§çæãããxãèªããã¨ãããã¨ãæå³ãããåä¸txå
é¨ã®writeã¯å½ç¶readã§ãããã®ã¨ããããã®å ´åã¯ç¹ã«RFã§ã¯å®ç¾©ããªãã
2.View equivalence
RFã«ããviewãçæãããã®ã§ãåä¸ã®RFãåå¨ããhistoryéã§ã¯ãviewã®äºæããããã®ã¨èããããããView equivalenceã¨ããã
View equivalence m to mâã«ã¤ãã¦ãRF(m)= RF(mâ)ãæç«
Serializableãå°å ¥ãããåºæ¬ç·ã¨ãã¦ã¯ãserialãªã¹ã±ã¸ã¥ã¼ã«ã¨åä¸ã®viewãæä¾ã§ããã®ã§ããã°ãããªãã¡view equivalenceã§ããã°ãããã¯serializableã§ãããããã¯ä¸è¬çã«View Serializableã¨ãããVSRã¨ç§°ããããã¨ãå¤ãã
ããã§ãmultiversionã«æ¡å¼µããã
multiversionã®å®ç¾©ã¨ãã¦
Let T = {t1, . . . , tn} be a (finite) set of transactions.
1. A multiversion history (or complete multiversion schedule) for T is a pairãm = (op(m), ï¼m), where ï¼m is an order on op(m) and
(a) op(m) = h(âªi=1ân op(ti))ãfor some version function h (h has been canonically extended from single operations to sets of operations)
ï¼ãã¹ã¦ã®opã¯ãªãããã®versionã«å²ãå½ã¦ãã
(b) for all tâT and all operations p, qâop(t) the following holds:ãp ï¼t q â h(p) ï¼m h(q)
ï¼åä¸txå
é¨ã§ã¯opé ã¯versioné
(c) if h(rj(x)) = rj(xi ), i != j, and cj is in m, then ci is in mãand ci ï¼m cj .
ï¼ãªããèªãã§ããã¨ããã°ãèªã¾ãã¦ãããã®ãå
ã«ã³ããããããï¼æ³¨æï¼ããã¦ããã§ã¯ãªãï¼ã
2. A multiversion schedule is a prefix of a multiversion history.
multi-versionã§ã®serializabilityï¼
èªåã®ã¹ã±ã¸ã¥ã¼ã«ã¨ãåä¸ã®ã¹ãããã§æ§æããããserialããªãmonoversionãã«ããã¦ãåä¸ã®RFãããå ´åãï¼æ£ç¢ºã«ã¯ãèªåã®ã¹ã±ã¸ã¥ã¼ã«ã®ã¹ããããå©ç¨ãã¦ãRFãåä¸ãªãserialããªãmonoversionããä½æãããã¨ãã§ããå ´åããã¤ãã®ã¨ãã«éãï¼ããã®èªåã®ã¹ã±ã¸ã¥ã¼ã«ãserializableããã¨è¨ãããããä¸è¬ã«multiversion view serializableã¨ãããMVSRã¨ç¥ãã
ãã®ãserialããªãmonoversionãã®serialã«ãªãtxã®è«ççãªé åºãserialization orderã«ãªããå¾è¿°ãããããããmultiversionã®version orderã«ä¸è´ããï¼corollaryï¼ï¼æ£ç¢ºã«ã¯ä¸è´ã§ã¯ãªãå å«ãæ£ããï¼
以ä¸ï¼mono-versionã®å®ç¾©ã¨ãRFã«ã¤ãã¦è£è¶³ããã¦ãã
âmonoversion
ç´åã®writeããããã®ãèªããã¨ï¼ã³ãããã®æç¡ã¯é¢ä¿ãªãï¼ãversionã¯å
¨é¨dropãã¦ããã
ã»ç´åã®å®ç¾©ã¯ãªã«ãï¼version orderã«ä¹ã£åã£ãç´åã®ãã®ãã¨ããæå³ã§ã¯ãªããï¼
ããã§ã¯ãªããåç´ã«ç´åã®write stepãè¦ããå
·ä½çãªMVTOãè¦ãã¨ãversion orderã«ä¹ã£åã£ããã®ã«ãããã¨ããããã«è¦ãã¦ããããããã¯ãããã³ã«ã®çµæã«ãããã³ãããã®æç¡ãããªãã¡ãã³ãããã®ãªã¼ãã¼ã«ãªãã¨ãããããããã¯ãããã³ã«ã«ãããåç´ã«ç´åã®writeãèªãã¨ããç解ã§ãããserialãªmonoversionã¨ãããã¨ã§ããã°ãæ®éã«ã³ãããã®orderï¼å ´åã«ãã£ã¦ã¯version orderï¼ã«ãªãã®ã¯çµæã§ãã£ã¦ãå®ç¾©ã§ã¯ãªãã
âRF
ããããRFã¨ã¯ä½ããåºæ¬çã«åç´ã«viewã§ããããã ãããã®viewã®çµæããã©ã使ãããããã§æ¡å¼µãã§ããã
ã»èªãã çµæãä½ããã®å¤ãæ¸ããå ´åï¼åä¸txã§ãªãããã®writeãçºçããªããå¥æ®µèªãã å¤ãä¸æ¸ãããã¨ã¯éããããªãããã®å¤ãæ¸ãå ´åï¼ããããusefulã¨ããã
ã»ããã«usefulãªRFã«ããã¦ããã®å½±é¿ã®çµæãæå¾ã®DBã®ç¶æ ã«ã¾ã§å½±é¿ãåã¼ãå ´åï¼ããªãã¡RF-usefulã®closureãtxâã¾ã§åã¶å ´åï¼ããããaliveã¨ãããéã«ããã®å½±é¿ã®çµæãæå¾ã®DBã®ç¶æ ã«å½±é¿ãåã¼ããªããããªãã¡å½è©²txãæ¸ããå¤ãã¾ã£ããå¥ã®txãä¸æ¸ããããå ´åããããdeadã¨ããã
usefulã®æ¦å¿µã¯DBããèªä½ã«å½±é¿ãåã¼ããã¨ãæå³ãããåã«èªãã ãã ããã§ã¯DBã®å é¨ã«ã¯å½±é¿ã¯ãªãããã¡ããå¤é¨ã§ã®å½±é¿ããè¦ãå ´åã«ã¯ããã§ã¯ãªããDBã®å é¨ã®ç¶æ ã«çç®ããããhistoryã«ã¤ãã¦ãusefulãªRFã®ãã¡ãaliveãªãã®ã ãã®RFãserialãªhistoryã¨äºæã§ããå ´åããã®historyãfinal state serializableã¨ãããFSRã¨ç§°ãããããªãã¡ãVSR-dead useful RF=FSRã¨ãªããRFã«ã¤ãã¦å ¨é¨ã®äºæãã¨ãå¿ è¦ã¯ãªããusefulã§ãã¤aliveãªã®ãã®ã ãã®äºæãã¨ãã°ããã®ã§ãå½ç¶FSRã®æ¹ããVSRããã¹ã±ã¸ã¥ã¼ãªã³ã°ãã¯ã¼ã¯å¼·ãã
anomalyããã®è£è¶³ã¨ãã¦
FSRã§ã¯lost updateã¯æé¤å¯è½ãæçµçã®æ¸ãæ®ããã¼ã¸ã«ã¤ãã¦ã®ã³ã³ãã¯ã¹ããå¤ããã®ã§ã
r1(x)r2(x)w1(x)w2(x)c1c2âããã¯FSRã§ã¯ãªããw0(x)r2(x)w2(x)ãaliveãªusefulRFï¼ä»¥ä¸LRFï¼
t1t2 r1(x)w1(x)r2(x)w2(x)c1c2 w0(x)r1(x)w1(x)r2(x)w2(x)ã®LRF
t2t1 r2(x)w2(x)r1(x)w1(x)c2c1 w0(x)r2(x)w2(x)r1(x)w1(x)ã®LRF
ã©ãã¨ãä¸è´ããªãã®ã§ãFSRã«ã¯ãªããªãã
ã¨ãããinconsistency readã¯æé¤ã§ããªã
s=r2(x)w2(x)r1(x)r1(y)r2(y)w2(y)c1c2ãã§ãLRFã¯ãw2(x)r1(x)ãw0(y)r2(y)w2(y)
t2t1ã r2(x)w2(x)r2(y)w2(y)r1(x)r1(y)c2c1ãLRFã¯ãw2(x)r1(x) w0(y)r2(y)w2(y)r1(y)
ã§åãã»ãã³ãã£ã¯ã¹ãã£ã¦FSRãæç«ãFSRã®ã»ãã³ãã£ã¯ã¹ã ã¨serializable
ããããr1(y)ã¯ãsã§ã¯w0(y)ããã§ãt2t1ã§ã¯w2(y)ãªã®ã§éããã®ãèªãã§ããã
sã®FSRã§ã¯ãw0(y)r1(y)r2(y)w2(y)ã ãã©ãw0(y)r1(y)ãw2(y)ã§ä¸æ¸ããããã®ã§ãdead stepã§ãããLRFã«ã«ã¦ã³ããããªããFSRã¯æ¸ãã¦ï¼å«ãåæï¼èªãã§ããã®ç¶æ ãæå¾ã¾ã§å½±é¿ããããã¾ãã¯ãèªãã§ãã®txã§æ¸ãã¦ãã®ç¶æ ãæå¾ã¾ã§å½±é¿ããããã®ã®ã¿æå³ãããã¨ã«ã¦ã³ããããã®ã§ãéä¸ã®ãªã¼ãã§ããã®çµæãæå¾ã«å½±é¿ããªããã®ã¯èæ ®ãããªããããªãã¡ãèªã¿ã®ã³ã³ãã¯ã¹ããéã£ã¦ããçµæã«å½±é¿ãã§ãªããã°ãæ£ããã®å¤å®ã«ã¯å½±é¿ããªãããªã®ã§ãinconsistency readã¯æé¤ã§ããªã
ã¤ã¾ãFSRã¯ç¾å¨ã®anomalyãã¼ã¹ã®èãæ¹ã§ã¯æç¨ã§ã¯ãªããä½ãèªãããæçµã®ç¶æ ã¨ããã«ã¾ã¤ããã³ã³ãã¯ã¹ããä¿åãããã°ãããã¨ããsemanticsã§ããã°æå³ãããããã®åã¹ã±ã¸ã¥ã¼ãªã³ã°ãã¯ã¼ããããä¸è¬ã« VSRâFSRã§ãããå·®åã®ä¾ã¯ä¸è¨ã®éãã®inconsistency readçã«ãªãã
multiversionã«ãããFSR
ä¸ã®çµæããããã¨ç°¡æ½ã§ãmultiversionã«ããã¦ã¯ãFSRï¼VSRã«ãªããè¦ã¯dead stepã®æ±ãã®éãã«ãããmultiversion ã«ããã¦ã¯ä¸æ¸ãã¯å¸¸ã«å¥ versionã®çæã«ãªããããªãã¡dead stepãåå¨ããªãããã£ã¦FSRï¼VSRã«ãªããè¨ã£ã¦ã¿ãã° MFSR=MVSRã
MVSRã«ã¤ãã¦
ã»å¾æ¥ããã®Anomalyã®æé¤
å
¸åãªanomalyã¨ã㦠lost update, inconsistency read, dirty read, write skewã§æ¤æ»ãããç´æçã©ããRFã¯serialãªãã®ã¨ã¯äºææ§ã¯ãªãã ãããªãã¨ããã®ã¯ããããããããã©ãã©ã®æç§æ¸ã«ããªãã®ã§ãsanitizationçã«ãã£ã¦ããã ï¼ã¾ãè¨ã£ã¦è¦ãã°ANSI SQL92 Critics ã®MVCCãã¼ã¸ã§ã³ã ï¼
lost update
S=r1(x)r2(x)w1(x)w2(x)
RF: w0âr1ãw0âr2ãw2ârâ
t1t2ã r1(x)w1(x)r2(x)w2(x)ãRF w0âr1 w1âr2 w2ârâ
t2t1ãr2(x)w2(x)r1(x)w1(x)ãRF w0âr2 w2âr1 w1ârâ
ã¾ã£ããä¸è´ããªãããã£ã¦æ¤åºå¯è½ã
inconsistency read
S=r2(x)w2(x)r1(x)r1(y)r2(y)w2(y)ã
RFãx:w0âr2 w2âr1 y:w0âr1 w0âr2 w2ârâ
t1t2ãr1(x)r1(y)r2(x)w2(x)r2(y)w2(y)ãRF x:w0âr1 w0âr2 w2ââ y:w0âr1 w0âr2 w2ârâ
t2t1ãr2(x)w2(x)r2(y)w2(y)r1(x)r1(y)ãRF x:w0âr2 w2âr1 y:w0âr2 w2âr1
ä¸ã®é åºã ã¨yã¯ä¸è´ãããxãä¸ä¸è´ãä¸ã®é åºã ã¨xã¯ä¸è´ãããyãä¸ä¸è´ããã£ã¦æ¤åºå¯è½
dirty read
S=r1(x)w1(x)r2(x)w2(x)a1c2
RF w0âr1 w1âr2 w2ârâ
t1t2ãr1(x)w1(x)a1r2(x)w2(x)c2 tx1ã¯abort RF w0âr2 w2ârâ
t2t1ãr2(x)w2(x)c2r1(x)w1(x)a1 tx1ã¯abort RF w0âr2 w2ârâ
abortããããã®ãèªãRFããªãªã¸ãã«ã«ããã®ã§ãããã¯serialã«ãªãã°åå¨ããªãããã£ã¦æ¤åºå¯è½
write skew
S=r1(x)r2(y)w1(y)w2(x)
RF x:w0âr1ãw2ârâ y:w0âr2ãw1ârâ
t1t2 RF r1(x)w1(y)r2(y)w2(x) RF x: w0âr1ãw2ârâ y: w1âr2
t2t1 RF r2(y)w2(x)r1(x)w1(y) RF x: w2âr1 y:w0âr2 w1ârâ
ä¸è´ããªãããã£ã¦æ¤åºå¯è½ã
æ£ç´ãã¾ãããã ãããªã¨ããã®ã¯ç´æçã«ããããanomalyã¯ã»ã¼viewã®èª¤è¬¬ã«ãããã®ã«ãªããã¨ãèããã°å½ç¶ã¨ãè¨ããããã ãä½è«ã ããããã¯ããããMVSR以åã®VSRã¬ãã«ã§æé¤ã§ãã話ãªã®ã§ãä¾ã®ANSI SQL92 Criticsã®æ´çãå½æã¯ä»æ¹ããªãã¨ã¯ãããRFãã¡ããã¨å®ç¾©ãã¦ããã°æ®éã«æ´çã§ãã話ã§ã¯ããããã®anomalyã®æ®æ»ãç¾ç¶ã®RDBã¯å¼ã£å¼µã£ã¦ãããããIsolation levelã®å®ç¾©ãããã¾ããªã¾ã¾ãããªãã¡ formalizeãããªãã¾ã¾ãæ®ã£ã¦ãããå人çã«ã¯é常ã«ãããããªãã¨æã£ã¦ãããç¾ç¶ã®DBãå©ç¨ããã¤ã³ãã°ã¬ã¼ã·ã§ã³ã§ã¯ãIsolationã¬ãã«ã®è¨å®ããããããããªããããã«ãã¾ãããã©ã¼ãã³ã¹ãã§ãã¬ãã«ã¨ãã¦read committedããããé©å½ã«è¨å®ãã¦ããªã«ãã¨é¢åãªã¨ããã¯åå¥ã«lockå¶å¾¡ãã¢ããªå´ã§è¡ãï¼å®éã¯2PLï¼ã¨ãããã¨ãå¤ãããã«è¦åãããããããæ°ããã®ãã
ã»MVSRããèªä½ã«ã¤ãã¦
ã»VSRâMVSR
ããã«ã¤ãã¦ã¯ç°è«ã¯ãªãã¨æããVSRãåä¸ã®versionã®ã¿ãåç
§å¶ç´ãããã®ã«å¯¾ãã¦ãMVSRã¯ããåºãversionãåç
§ãããã¨ãã§ããã®ã§ãã¹ã±ã¸ã¥ã¼ãªã³ã°ã»ãã¯ã¼ãåºããã¨ã¯èªæã ã証æã¯ç°¡åãªã®çç¥ãããéåãã®åä¾ã¯m = w0(x0)w0(y0)c0r1(x0)w2(x2)w2(y2)c2r1(y0)c1ãMVSRã ã¨t0ï¼t1ï¼t2ã§serializeå¯è½ã ããVSRã§ã¯r1(y0)ãr1(y)ã«ãªã£ã¦ãã¾ã解決ã§ããªãã
ã»VSR/MVSRã®åé¡ç¹
ã¾ãVSRã®åé¡ç¹ã ããå¤å®ã®ä¸è¬è§£ãNPå®å
¨ã«ãªãã¨ãããã¨ã ãã¾ãæ®éã«èãã¦ãã°ã©ãã®ç·å½ããä½æ¦ã«ãªãã®ã§ã¢ã¦ããã¨ãããã¨ã¯ããå¶ç´ãç·©ãMVSRã¯å°ãªãã¨ãNPå®å
¨åçã§ãããã¨ã容æã«æ¨å®ã§ãããã¨ãããã¨ã§ãMVSRã¯ã»ã¼ç¡æµã®ãã¼ã«ã§ã¯ãããããã®ä¸è¬çãªå¤å®ææ³ã¯ãçµå±ç¡çã²ã¼ã«ãªããï¼å³å¯ã«ã¯VSRã®å¤å®ã¯Polygraphã®é循ç°ã®æ¤åºåé¡ã«ãªããï¼
ãªã追å ã ããVSRç³»ã®åé¡ç¹ã¨ãã¦ãmonotonicã§ã¯ãªããã¨ãæããããMVSRã§ã¯å½ãããªããããã«ãããããå®è£ ä¸ã¯one-shotãªã¯ã¨ã¹ããåæã§ããã°ãããã«åé¡ã«ãªããªãã
ä¸è¬è§£ã¯ç¡çã²ã¼ãªã®ã§ãããç¨åº¦å¶ç´ãã¤ãã¦ãheuristicã«æã£ã¦ããããã®ã§ãããå°ãå®å¼åãããã
Serialãªmonoversionã§åãRFã®ãã®ãããã°ãmã¯MVSRã«ã¯ãªãããã ãããã ãã ã¨å¤å®ãNPå®å
¨ãªã®ã§ã»ã»ã»
(wi(xi), rj(xi))ã«ãã㦠tiâtj)ã®ã°ã©ãGãèãããããã§ã®conflictã¯RFãªã®ã§ãw-rã®ã¿
m ≈v mâ²âãG(m) =G(mâ) ãã ãéã¯æç«ããªãã
ãããå®å¼åãã¦ãversion orderãå°å
¥ããã
â MVSG
ã¹ã±ã¸ã¥ã¼ã«mãversion order ï¼ï¼ãã«ããã¦ãconflict graph G(m)ãã¤ãã(MVSG)
Vertexï¼TxãEdgeï¼TxâTx
rk(xj ) and wi (xi )㧠if xiï¼ï¼xj , then (ti, tj ) â E, otherwiseã(tk, ti ) â E.
mâMVSR iff there exists a version order ï¼ï¼ such that MVSG(m ï¼ï¼) is acyclic.
注æï¼MVSGã®å¼æ°ãm(RF)ã¨ï¼ï¼(version order)ããã£ã¦ã°ã©ãã®edgeã¯ãäºç¨®é¡ãåå¨ãããRFã«ããedgeã¨version orderã«ããedgeã
MVSGé循ç°ã§ãããããªversion orderãããã°ããã®ã¹ã±ã¸ã¥ã¼ã«mã¯MVSRã§ãããï¼ããã¦ãã®ã¨ãã«éãï¼ããªãã¡ãmã¨ããªãRFããã¤ãserial monoversion historyãåå¨ãããçæãã¹ãã¯version orderã¯åä¸ã§ã¯ãªããã¨ãããã¨ã ãããversion orderã§ã¯cyclicã§ãå¥ã®version orderã§ããã°acyclicã§ãããã¨ã¯ããããã
ã»version orderã«ã¤ãã¦
ããã¹ã±ã¸ã¥ã¼ã«ã§ãããã¼ã¿ãæ¸ãããâè«ççãªâé åºãå®è¡ã¹ãããã¨ã¯é¢ä¿ãªããè«ççãªserialization orderã«ãªããããªãã¡ãå®éã®ã¹ã±ã¸ã¥ã¼ã«ããserialãªmonoversionã¨æ´åçãªversion orderãã¨ããã°ãããwi wj ã®ã¹ãããé ã§ã wj ï¼ï¼ wiã«version orderãã¨ã£ã¦ãRFã«ã¤ãã¦éãããªããããªã±ã¼ã¹ãå½ç¶ãããï¼ãã ãããããã¡ãªãããã³ã«ã®çµæã¨ãã¦åºæ¬çã«åTxã®éå§æç¹ã®time stampã§orderãåããã¨ãå¤ãããã®å ´åã¯èªããversionã«ã¤ãã¦ã¡ããã¨è¨¼æãããã¨ãå¿
è¦ã§ãããã«ãã£ã¦MVSRã®è¨¼æã«å®¹æã«ãã£ã¦ãããï¼
注æï¼è£è¶³ããã¨ãããããversion orderãã©ãã¤ãããï¼ã¨ãã話ããã£ã¦ãããã¯serialization orderã®ã¤ããããã¨åãã
èãæ¹ã¨ãã¦ã¯ã»ã»ã»
1. ã¾ã天ä¸ãçã«transactionãªããcommitãªãã®é åºãã¨ããããorderã¨ãã¦è¨å®ãï¼ãã ãæ®éã¯TOï¼ãããã«ããããã©ããã§å¤æããæ¹æ³ï¼å®ã¯ãããMCSRï¼ãããã³ã«ã ãã§ã¯ããè¦ããªãããè«ççã«ã¯åå¤ï¼
2. ããã§ã¯ãªãã¦ä»»æã®orderãã¤ãã£ã¦ï¼ã¤ãããã°serialãªmonoversionãã§ããï¼ã¨ãè©ä¾¡ããhistoryã§æ´åæ§ãã¨ããããã©ã¤ããæ¹æ³ï¼ãããMVSRã®æ¬ç
以ä¸ã®2éãããã£ã¦ãããããããããã³ã«ä¾åã«ãªããåºãã®ã¯å½ç¶å¾è
ã§ããã®åè¨ç®éãå¢ããã
çµå±version orderãäºåã«å¶ç´ã¨ãã¦æ±ºããã°ããã¨ã®æ´åæ§ç¢ºèªã¯ã³ã¹ããä½ãããå½ç¶abortçãããããversion orderãåºãã¨ããæ¹ã scheduling powerãããã®ã§ãabortçã¯ä½ãããã ãããã®åã®è¨ç®éãå¢ããããããããã®version orderã®ç®¡çã³ã¹ããä½è¨ã«ããããï¼ãã®èª¬æã¯Txæ¬ã®ã¿ã§ããCCæ¬ã§ã¯ããã¾ã§è¿°ã¹ã¦ããªãï¼
è£è¶³ããã¨ããã¨ãã°ãå®è¡é åºãwj(xj) rk(xj) wi(xi)ã§ãã£ãã¨ã㦠ãã®å ´åã¯mustã§tj â tkã¯å¿
ãdependency (conflict)åå¨ãããï¼ããã¯RFï¼
ãã®æãxi ï¼ï¼ xj ãªãã° ti â tj ãã£ã¦ tiâtjâtkããã®ã¹ã±ã¸ã¥ã¼ã«ã®monoversionãåå¨ããã¨ããã°ããã¯å¿
ãwi(xi)wj(xj)ããã®å ´åã¯tk â tiä¾åé¢ä¿ã®ç¶æã¯å¿
è¦ãªããããªãã¡MCSRã§ã¯ãªãï¼version orderã¯xiâxjãmustï¼
ã¾ããxj ï¼ï¼ xi ãªãã° tk â ti ãã£ã¦ãtjâtkâtiããã§ããã®ã¹ã±ã¸ã¥ã¼ã«ã®monoversionãåå¨ããã¨ããã°ããã¯å¿
ãwj(xj)wi(xi)ã«ãªãããã®å ´åã¯tk â tiä¾åé¢ä¿ã®ç¶æãå¿
è¦ã§ãããããªãã¡MCSRã«ãªããããã¦version order xjâxiãmustãwj(xj)wi(xi)ãç¶æããå¿
è¦ããã£ã¦ãããã¯rk(xj) wi(xi)ã®é åºç¶æã§å¿
è¦ãï¼ãã¨ãã°ãã²ã£ããè¿ããwj(xj)rk(xj)ã¨ããã¨wi(xi)wj(xj)rk(xj)ã«ãªããversion orderãxi ï¼ï¼ xjã«ãªãï¼
大äºãªã®ã¯è¨¼æãªã®ã§ ifã¯ã¨ãããonly ifãªããªãé¢åã ãããã®å®çã¯ä¾ã®2PLï¼serializableã¨åããããéè¦ã証æã¯Txæ¬ãããPhil.B御大ã®CCæ¬ã®æ¹ãããããããã®ã§ãã¡ãããå¼ã
Theorem 5.4: An MV history H is 1SR iff there exists a version order ï¼ï¼ãsuch that MVSG(H, ï¼ï¼) is acyclic.
dependency(conflict)ã循ç°ããªããããªserial graphã«ããã¦version orderãåå¨ããã°ãããã¯serializableã§ããã¤ãã®æã«éãã
注ï¼1SR=one copy serializable
ã
Proof: (If) Let Hs be a serial MV history Ti, Ti1..Tin, where Ti1,Ti2,..Tin is a topological sort of MVSG(H, ï¼ï¼).
Since C(H) is an MV history, it follows that Hs, is as well.
Since Hs has the same operations as C(H), by Proposition 5.1, Hs == C(H).
注æï¼C(H)ã¯committed projection
Prop5.1
Two MV histories over a set of transactions are equivalent iff the histories have the same operations.
It remains to prove that Hs is l-serial.
Consider any reads-from relationship in Hs, say Tk reads x from Tj, k!=i.
Let wi(xi) (i!=j and i!=k) be any other Write on x.
If xi ï¼ï¼ xj, then MVSG(H, ï¼ï¼) includes the version order edge Ti -> Tj,
which forces Tj to follow Ti in Hs.
If xj ï¼ï¼ xi, thenMVSG(H, ï¼ï¼) includes the version order edge Tk -> Ti,
which forces Tk to precede Tj in Hs.
Therefore, no transaction that writes x falls in between Tj and Tk in Hs. Thus, Hs is l-serial.
(Only if) Given H and ï¼ï¼,
let MV(H, ï¼ï¼) be the graph containing only version order edges.
Version order edges depend only on the operations in H and ï¼ï¼ ;
they do not depend on the order of operations in H.
Thus, if H and Hâare MV histories with the same operations, then MV(H, ï¼ï¼)=MV(Hâ,ï¼ï¼) for all version orders ï¼ï¼,
注æï¼version orderãæä¸ã§operationãåä¸ãªãgraphã¯ä¸è´ãä¸ç¬ãã£ãã£ã¦ãªããã©å·éã«ã
Let Hs be a l-serial MV history equivalent to C(H).
All edges in SG(Hs) goâleft-to-right;â that is, if Ti ->Tj then Ti precedes Tj in Hs.
Define ï¼ï¼ as follows:
xi ï¼ï¼ xj only if Ti precedes Tj in Hs.
All edges in MV(Hs,ï¼ï¼) are also left-to-right.
Therefore all edges in MVSG(Hs, ï¼ï¼) = SG(Hs)âªMV(Hs,ï¼ï¼) are left-to-right.
This implies MVSG(Hs, ï¼ï¼) is acyclic.
By Proposition 5.1, C(H) and Hs, have the same operations.
Hence MV(C(H), ï¼ï¼) = MV(Hs, ï¼ï¼).
Proposition 5.2: Let H and Hâ be MV histories. If H== Hâ, then SG(H) = SG(Hâ).
By Proposition 5.1 and 5.2
SG(C(H)) = SG(Hs). Therefore MVSG(C(H), ï¼ï¼) = MVSG(Hs, ï¼ï¼).
Since MVSG(Hs, ï¼ï¼ ) is acyclic, so is MVSG(C(H), ï¼ï¼), which is identical to MVSG(H, ï¼ï¼).
â MCSRã®å®å¼å
rwã®dependencyã®ã¿ã§conflict graphãã¤ãããããªãã¡ri (xj )ã®wk(xk) ã¹ãããã«ã¤ãã¦ãri (xj )ï¼m wk(xk)ã®ä¾åé¢ä¿ãconflictã¨ããããã®rwã®ã³ã³ããªã¯ãããåãé åºã§åºãmonoversionãã§ããã°MCSRã«ãªã
s = r1(x0)w1(x1)r2(x0)r2(y0) w2(y2)r1(y0)w1(y1)c1c2
version order x t0ât1 y t0ât2ât1ãr-wï¼r2(y0) â w1(y1)ãå½ç¶yã®version order㯠t0<<t1
sâ= r2(x)r2(y)w2(y)r1(x)w1(x)r1(y)w1(y)c1c2
r-w: r2(y)âw1(y)ããã«r2(x)âw1(x)ã®conflictãçºçããããt2ât1ã§å
ã®ã¹ã±ã¸ã¥ã¼ã«ã¨äºæãªã®ã§åé¡ãªã
ã¡ãªã¿ã«ri (xj )<m wk(xk)ã«ã¤ãã¦ãããããmultiversionã¨ãã¦ã®æç«æ¡ä»¶ãããªãã¡ãri(xj)ã§ciãåå¨ããã®ã§ããã°ãcj<ciããããã¨ã«çæããã
ä¾ãã°ãsâ = r1(x0)w1(x1)r2(x1)r2(y0)w2(y2)r1(y0)w1(y1)c1c2ãã¨ãã¦ã¿ãã¨ï¼ãã£ãããªã®ã§concurrentã«èµ°ã£ã¦å è¡ãã¦ããt1ã®xã®æ¸ãè¾¼ã¿ãt2ã§èªãã¨ããï¼
version order x t0ât1 y t0ât2ât1 r-wï¼r2(y0) â w1(y1)
serial monoversionã§ãr2(x)r2(y)w2(y)r1(x)w1(x)r1(y)w1(y)c2c1
r-wã r2(x)âw1(x) r2(y)âw1(y) ãªã®ã§ãt2ât1ã§æç«ããããã«è¦ãããã
ãã®monoversionã§r2ãèªãã§ããã®ã¯x0ãªã®ã§ãããããx1ãèªãã§ãããã¨ã®versionã¨ã¯ç°ãªããããã¯r2(x1)ãåå¨ãã段é㧠c1<c2ãhistoryã¨ãã¦ã®æç«æ¡ä»¶ã«ãªãã®ã§ãt1ât2ãå¿
é ã«ãªãã®ã§æç«ããªããå°ãsã®å ´åã¯ããããªãã®ã§ãt2ât1ã§ãããã
ã»MCSRâMVSR
ä¸è¨ã®ã¨ããã§ãMCSRâMVSRã¯ç¹ã«åé¡ã¯ãªããRFã®äºææ§ãããã
MVSRâMCSRã§ã¯ãªãä¾ã示ããããã¯MVSRã§ããã®ã§æ¬æ¥ã¯serializableã§ã¯ããããMCSRã§ã¯ããã§ã¯ãªããããªãã¡å½é½æ§ã«ãªã£ã¦ãã¾ãã
s = w0(x0)w0( y0)w0(z0)c0 r2(y0) r3(z0)w3(x3)c3 r1(x3)w1(y1)c1 w2(x2)c2 râ(x2)râ(y1)râ(z0)câ
ãã®å ´åã§ãr1(x3)w2(x2)ã«ã¤ã㦠x: t1ât2ã«ãªã£ã¦ãããä»æ¹ãr2(y0) w1(y1)ãªã®ã§ã y:t2ât1ã«ãªãããã£ã¦ãmonoversionãæç«ããªãã®ã§ãsã¯MCSRã§ã¯ãªã
ãã ãããã¯version orderããã¿ãã¨
version x t0ât3ât2 y t0ât1 ãªã®ã§ãt0ât3ât2ât1âtâã§ããããåé¡ãªãã
version orderãé¸æãããã¨ã§ãMCSRã§ã®conflict x t1ât2ã®ä¾åé¢ä¿ãæé¤ãããã¨ãã§ããã¯ãã
å®éãsâ = w0(x)w0( y)w0(z)c0 r2(y)ãr3(z)w3(x)c3 r1(x)w1(y)c1 w2(x) c2ãrâ(x)râ(y)râ(z)câãã§åé¡ãªããè¦ã¯ãMCSRã§ã¯ã³ã³ããªã¯ãã ãMVSRã§ã¯ããã§ã¯ãªãã
ç¿»ã£ã¦è¦ãã«ãMCSRã§ã¯å¤å®ã«version orderã¯ç´æ¥è§¦ã£ã¦ããªããtx orderã®ã¿ã§å¤å®ãã¦ããããããã£ã¦å®è£ ä¸ã¯ããç°¡æã«å¦çãããã¨ãã§ãããããã®åçãã¯ãªããæ¬æ¥ã®multiversionã®ãã¯ã¼ãå®å ¨ã«çããã®ã§ããã°ããã¯ãMVSRãæã¾ããã®ã¯ééããªãããã¤é常ã®VSRãããããã¹ã±ã¸ã¥ã¼ãªã³ã°ãã¯ã¼ããããã¨ã¯ééããªãã
ç¾å®çãªå®è£ ã¨ãã¦ã¯MCSRã§validation checkãã¦ã¢ã¦ãã®å ´åã¯version orderã®å¤æ´ã§ããããã©ããã¨ãã確èªãè¡ãããæ¹ãããããªãã¨æããï¼ãããªãã¨ããã¯back-offã®retryã§ååã ã¨ããã説ããããï¼å人çã«ã¯ãã§ãã©ããèªãã§ãªããã ããããã®ã¾ã¾versionç¶æããã°ãããããã¼ã®ããããããããmultiversionã®ããã¨ããã ããããã¨ã¯æããã§ããããserial historyã®æã«read txã®å¾ãã«é åºã§ãããã¨ããããã°ããã§ããã¾ãã®ã¯ãã人éãè¦ãã°ç´æçã«ãããã®ã§ãã¾ã ã¾ã 人é¡ã®ç¥ããªãè¿éãããã®ã¯ééããªãã®ã ãã
ã¨ãããããããªããã§MVCCã®åºç¤çè«ã¯ããã¨æãã