ãªãã§ïŒ
èªã¿åãå°çšã¬ããªã«ã®äœæã¯ç°¡åã§ã誰ãããã®æ¹æ³ãç解ããŠããŸãã ã¬ããªã«ã«æžã蟌ãããšãã§ããã®ã¯é£ããããšã§ãã ãã®ãããªCAPå®çããããŸããããŒã¿ã®äžè²«æ§ïŒæç¶æ§ïŒãå¯çšæ§ïŒå¯çšæ§ïŒãåé¢ãžã®æµæïŒããŒãã£ã·ã§ã³èš±å®¹åºŠïŒ-ä»»æã®2ã€ãéžæããŸãã CRDTã§ã¯ããã®ã¿ã¹ã¯ã¯åŒ·åãªçµææŽåæ§ïŒ SEC ïŒãšç¶æ ã®å調æ§ãæäŸããããšã«ãã£ãŠéæãããŸãã
匷ãçµææŽåæ§
äœããã®æ¹æ³ã§äº€æããã¬ããªã«ã«å€æŽãå ããããšãã§ãããšããŸãã æçµçãªäžè²«æ§ãšã¯ãçžäºäœçšãšããŒã¿ã¹ãã¬ãŒãžã®ãããªçµç¹ã§ãããããããã®ã¬ããªã«ã«å€æŽãå ããåŸããã¹ãŠã®ã¬ããªã«ã¯æçµçã«åçã®ç¶æ ã«ãªããŸãã
匷ãæçµæŽåæ§ã«ã¯å¥ã®å¶éããããŸããåãæŽæ°ãåä¿¡ããã¬ããªã«ïŒé åºã«é¢ä¿ãªãïŒã¯ãæŽæ°ãåä¿¡ãããšããã«åçã®ç¶æ ã«ãªããŸãã
SECãšé 次æŽåæ§ãæ··åããªãã§ãã ãããããšãã°ãèŠçŽ ãè¿œå ããã³åé€ã§ãããªã¹ãã§ã¯ãSECãæºããããã«è¿œå ãšåé€ã®é åºãä¿èšŒããå¿ èŠã¯ãããŸããïŒããšãã°ãè¿œå ã«ããåé€ã®åªå é äœãããå ŽåããããŸãïŒã
察ç«ãšå調ã
ECã·ã¹ãã ã«ç«¶åãããå¯èœæ§ããããŸãã 競åãšã¯ãç°ãªãã¬ããªã«ã«é©çšããããšãããããäžè²«ããç¶æ ã«å°ãå€æŽã§ãããã¬ããªã«ã®ç¶æ ãçµåããããšãç¹å®ã®ã·ã¹ãã äžå€æ¡ä»¶ã«éåããŸãã 競åã¯ãç¶æ ã®ããŒã«ããã¯ãŸãã¯ãã®ä»ã®æ¹æ³ã§è§£æ±ºãããŸããããã«ã¯ããŠãŒã¶ãŒã®æäœãå«ãŸããå ŽåããããŸãã
CRDTã¯ãã·ã¹ãã ãSECãæäŸãããã®ç¶æ ã競åã«ã€ãªããããšãªãå調ã«é²è¡ããããšãåæãšããŠããŸãã ãã®æå³ã§ã®å調æ§ã¯ãããŒã«ããã¯ããªãããšãæå³ããŸããã·ã¹ãã ã以åã®ç¶æ ã«æ»ãããšã§æäœãå ã«æ»ãããšã¯ã§ããŸããã ãã®ãããªã·ã¹ãã ã®ç¶æ ã¯ãåé åºé¢ä¿ã«ãã£ãŠæ¥ç¶ãããŠããŸããæ°åŠã§ã¯ããŠããªã³æäœãå®çŸ©ããããã®ãããªã·ã¹ãã ã¯åæ ŒåãšåŒã°ããŸãã
æ Œåãšåæ Œå
åæ Œåã¯ãäºé æŒç®ãå¯æã§ã¹ãçã§ããå矀ã§ãïŒ ãã·ã¢èª ã ããã«è©³ããã¯è±èªã§ãããããã§ã¯æ°åŠã䜿çšã㊠ãWikipediaã«æ£åŒãªèª¬æããããŸã ïŒã
åæ Œåã¯ãéšåçã«é åºä»ããããã»ããã§ããèŠçŽ ïŒå¿ ããããã¹ãŠã§ã¯ãªãïŒã¯ãããã©ããŒãé¢ä¿ã«ãã£ãŠæ¥ç¶ãããŸãã
æäœã¯åæ Œåã§å®çŸ©ãããŸãïŒ
- ã¹ãçïŒaâa = a
- é£æ³ïŒïŒaâbïŒâc = aâïŒbâcïŒ
- å¯æïŒaâb = bâa
ãã®æäœã¯ãäžéšïŒçµåïŒåæ Œåã®æ£ç¢ºãªäžéïŒLUBïŒããŸãã¯äžéšïŒæºããïŒåæ Œåã®æ£ç¢ºãªäžéïŒæ倧äžéïŒã®ããããã§ãã
æšãšåæ Œåã®éãïŒ
ããã¯å®å šãªã©ãã£ã¹ã§ãããLUBãšGLBã®äž¡æ¹ãåæã«å®çŸ©ããŸãã
äžéšåæ Œåã®äŸãKDPVã«æãããŠããŸãã éãã¯ãèŠçŽ ãçµåããããã«å ±éã®ç¥å ãå¿ èŠãªãããšã§ãã ãããã¯çŸåšç§ãã¡ãèå³ãæã£ãŠãã代æ°æ§é ã§ãã
gitãsvnãªã©ãããŒãžã§ã³ç®¡çã·ã¹ãã ã®å€ãã®ç¶æ ã¯ãããæå³ã§ã¯å®å šãªã©ãã£ã¹ã§ããåé åºé¢ä¿ãå®çŸ©ãããŠããããªããžã§ã³ã«ã¯å ±éã®ç¥å ããããé£æ¥ããŠããå ŽåããããŸãã äžéšåæ Œåã®èŠçŽ ã䜿çšããŠãçµåæäœãå®è¡ãã2ã€ã®èŠçŽ ãçµåã§ããŸãã
CvRDTãšCmRDT
ããŸããŸãªã¿ã¹ã¯ã«å¯ŸããŠãçžäºäœçšãšããŒã¿ã¹ãã¬ãŒãžãæŽçããããŸããŸãªæ¹æ³ã䟿å©ã§ãã CRDTã¯éåžž2ã€ã®ã¯ã©ã¹ã«åããããŸãã
- å¯æïŒ c o m mutativeãCmRDTãopããŒã¹ïŒïŒãªã¹ãããããšä»®å®ããŸãã ã¢ã€ãã ãè¿œå ããå Žåããã®å€æŽãããç¶æ ïŒè¿œå ãããã¢ã€ãã ïŒã®ã¿ããã¹ãŠã®ã¬ããªã«ã«éä¿¡ããŸãã ã¬ããªã«ã®ç¶æ ãæŽæ°ãåä¿¡ããæé ã«äŸåããªãããã«ãæäœã¯å¯æã§ãªããã°ãªããŸããã
- ã¹ãã¬ãŒãžããŒã¹ã®ç¶æ
ïŒ c on v ergentïŒCvRDTãç¶æ
ããŒã¹ïŒïŒãã®å Žåãåå¥ã®æŽæ°ã¯éä¿¡ãããŸããããããŒã¿æ§é å
šäœïŒã€ãŸãããªã¹ãã®å Žåã¯ãªã¹ãå
šäœïŒãéä¿¡ãããŸãã ããŒã¿æ§é ã¯æ¬¡ã®æäœããµããŒãããå¿
èŠããããŸãã
- ã¯ãšãª-ç¶æ ãå€æŽããã«äœããèªã¿ãŸãïŒäŸïŒãªã¹ãã«ã¢ã€ãã ããããŸããïŒïŒ
- æŽæ°-æ§é ã®å€æŽïŒäŸïŒãªã¹ããžã®ã¢ã€ãã ã®è¿œå ïŒ
- ããŒãž-å¥ã®ã¬ããªã«ããã®ç¶æ ãåçµããŸãã ãã®æäœã¯ãå¯æãé£æ³ãããã³å åšçã§ããå¿ èŠããããŸããããããæ¹åã®ç¶æ ã®ãããžã¯ãã·ã¹ãã ã以åã®ç¶æ ã«ãæ»ãããŸããããã·ã¹ãã ã®ç¶æ ãå調ã«å¢ãããŸãã ãã¹ãŠã®ã¬ããªã«ãçµåãããšãã¬ããªã«ã§è¡ããããã¹ãŠã®å€æŽãçµåããŠãåçã®ç¶æ ã«ãªããŸãã
èŠèŠçæ¯èŒïŒ
ã¯ã©ã¹CvRDTãšCmRDTã¯åçã§ãïŒãã®å®çã®èšŒæã¯ã以äžã®ããªã³ã¯ãã«ããMarc Shapiroã®ç 究ã«ãããŸãïŒã ãã¹ãŠã®CRDTæ§é ã¯ãCvRDTãšCmRDTã®äž¡æ¹ãšããŠè¡šãããšãã§ããŸãã
ãã ããããŒã¿è»¢éæ¹æ³ã®èŠä»¶ã®èŠ³ç¹ããã¯ããããã¯ç°ãªããŸãïŒCmRDTã¯ã¬ããªã«ã«éç¥ãé ä¿¡ããäœããã®æ¹æ³ãå¿ èŠãšããŸãããCvRDTãå¿ èŠãšããã®ã¯ç¶æ ã®æžã蟌ã¿ãšèªã¿åãã ãã§ãïŒãã ãããã®ç¶æ ã¯éåžžã«å€§ããå ŽåããããŸãïŒã
CRDTã®äŸãšèšé²
ã¢ã€ãã ãè¿œå ããã³åé€ã§ãããªã¹ããäœæããŸãããã 2Pã»ãããšåŒã°ããŸãã
ã¬ããªã«ã«ã¯2ã€ã®ã»ããããããŸããè¿œå ãããèŠçŽ ïŒAïŒãšåé€ãããèŠçŽ ïŒRããã®ã»ããã¯å»æ£æšèã»ãããšåŒã°ããããšãå€ãïŒã§ããæåã¯ç©ºã§ãã èŠçŽ ãè¿œå ãããšãããããAã«è¿œå ãããããåé€ãããšãã«Rã«è¿œå ããŸããã»ããã«å«ãããã©ããã®ç¢ºèªã¯ãRã«èŠçŽ ããããã©ãããããã³Aã«ãããã©ããã確èªããããšãããªããŸããè¿œå ãããåé€ãéèŠã§ããããšãããããŸãããã®éïŒèŠçŽ ã¯Rããã³Aããåé€ãããŸããã
æ°åŠã¬ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
ããã¯ãåæäœã®å®è¡ã®ããã«ãªã¹ãå šäœãæž¡ãCvRDTæ§é ã§ãã æãããªæ¹æ³ã§ãCmRDTã«çžåœãããã®ãå€æã§ããŸãã ç°¡åã«ããããã«ãåé€ã®åã«åžžã«addãé ä¿¡ãããéåžžã«åçŽãªã±ãŒã¹ãæ³å®ããŸãã CmRDTæ°åŠã¬ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
ç解ããæ¹æ³
ãã€ããŒã-ã¬ããªã«ã«ãããã®
initial-åæç¶æ
query-ã·ã¹ãã ã®ç¶æ ãå€æŽããã«ç §äŒããããšã¯ãã¬ããªã«äžã§ããŒã«ã«ã«å®è¡ãããŸã
æŽæ°-ã·ã¹ãã ã®ç¶æ ãå€æŽããæäœ
atSource-ã€ãã·ãšãŒã¿ãŒã¬ããªã«ã§å®è¡ãããæŽæ°ã®äžéš
ããŠã³ã¹ããªãŒã -ãã®æäœã®ã¬ããªã«ã§å®è¡ãããæŽæ°
initial-åæç¶æ
query-ã·ã¹ãã ã®ç¶æ ãå€æŽããã«ç §äŒããããšã¯ãã¬ããªã«äžã§ããŒã«ã«ã«å®è¡ãããŸã
æŽæ°-ã·ã¹ãã ã®ç¶æ ãå€æŽããæäœ
atSource-ã€ãã·ãšãŒã¿ãŒã¬ããªã«ã§å®è¡ãããæŽæ°ã®äžéš
ããŠã³ã¹ããªãŒã -ãã®æäœã®ã¬ããªã«ã§å®è¡ãããæŽæ°
ãã®ä»ã®æ§é
ããç¥ãããäœåã§èª¬æãããã©ã€ãã©ãªã«å®è£ ãããŠãããã®ã«ã¯ã次ã®ãããªæ§é ããããŸãã
- Gã«ãŠã³ã¿ãŒïŒïŒæé·ã®ã¿ïŒå調ã«å¢å ããã«ãŠã³ã¿ãŒ
- PN-CounterïŒæžããããšãã§ããïŒæ£è² ïŒã«ãŠã³ã¿ãŒ
- LWW-RegisterïŒïŒlast-writer-winsïŒæåŸã®ãšã³ããªã®ååã§ç»é²ããããšã®åªå 床ãé«ã
- MV-RegisterïŒïŒè€æ°å€ïŒè€æ°å€ã¬ãžã¹ã¿
- Gã»ããïŒåé€ããã«å€ãã®ã¢ã€ãã
- 2Pã»ããïŒåªå åé€ãã
- PN-SetïŒenable-deleteæäœã«ãŠã³ã¿ãŒã䜿çšããŸã
- LWW-SetïŒåªå æäœæé
- ORã»ããïŒïŒobserved-removeïŒèå¥åä»ãã®ãªã¹ã
ãªã¹ãã«åºã¥ããŠã°ã©ãå ã®é ç¹ãšé¢ä¿ãèšè¿°ããæ§é ããããŸãã
CRDTæé©å
CRDTæ§é ãäœæããéåžžã®æ¹æ³ã¯ãä»ããCRDTæ§é ãçµã¿ç«ãŠãããšã§ããããšãã°ã2Pã»ããã¯ãè¿œå ãšåé€ã®2ã€ã®ãªã¹ãã§æ§æãããŸãã å®éã«ã¯ãããŒã¿è»¢éã®æäœãŸãã¯éã«å¶éã課ãããå ŽåããããŸãã ãã®å Žåãããã€ãã®è²æ©ãããããšãã§ããŸãã ããšãã°ãã¢ã€ãã ããªã¹ãã«é »ç¹ã«è¿œå ããã³åé€ãããå Žåãåé€ãããã¢ã€ãã ã®ãªã¹ãã¯æéã®çµéãšãšãã«å€§ããæ¡å€§ããŸãã åé€ããããã®ãäœããã®åççãªæ¡ä»¶ã§åé€ããã¬ããŒãžã³ã¬ã¯ã¿ãäœæã§ããŸãã ããšãã°ã1幎以äžåã«åé€ããããã®ãããã¹ãŠã®ã¬ããªã«ã«ãã£ãŠéç¥ãåä¿¡ããããã®ã
CRDTãšOT
æäœå€æã¯ãããã¹ãç·šéã§äžè¬çã«äœ¿çšãããã¢ãããŒãã§ãã ã©ã¡ãã®ã¢ãããŒããäžè²«æ§ïŒECïŒãæäŸããŸãã OTã«ã¯ãããé«ããµãŒããŒèŠä»¶ãããè€éã§å®å®æ§ã®äœãã¢ã«ãŽãªãºã ããããŸãã ãŸããããã€ãã®ç 究ã¯ãå®è£ ã§è¿°ã¹ãããŠããããã«ãOTã¢ã«ãŽãªãºã ãæã åæããªãïŒåæããïŒããšã瀺ããŠããŸãã ããããæ確ã«éžæããŠãã©ã¡ããè¯ãããšèšãããšã¯äžå¯èœã§ãã ããç¥ãããŠããããã¹ãç·šéCRDTã«ã¯ãããšãã°ãWOOTïŒWithout Operational TransformationïŒãTreedocãããã³LogootããããŸãã
KeePassã®CRDT
KeePassã«ã¯ãã¡ã€ã«ã®ããªãŒãºæ©èœããããŸããåæã䜿çšããŠäººéããªãã©ã€ã³ã«ããã«ã¯ã WebããŒãžã§ã³ã®ããŒãžã«ç¹å¥ãªæ³šæãæããªããã°ãªããŸããã§ããã KeePassã¯ãã¹ãŠã®ãªããžã§ã¯ãã«äžæã®èå¥åãå²ãåœãŠãåé€ããããã¹ãŠã®IDãDeletedObjectsã«ä¿åããŸãã ãã£ã¬ã¯ããªã°ã©ããåæããããã«ãæåŸã«äœçœ®ãå€æŽãããæ¥ä»ïŒå Žæã®å€æŽæ¥ïŒãä¿åãããŸãã
ãããããã¥ã¢ã³ã¹ããããŸãã ã¬ã³ãŒãã«ã¯ãã¢ã€ãã ãåé€ã§ããå€æŽå±¥æŽãæ®ã£ãŠããŸãã å±¥æŽãšã³ããªã¯æéã«ãã£ãŠã®ã¿èå¥ãããŸãã å±¥æŽããåé€ããããšã³ããªã¯ãåæäžã«ã©ãã«ãä¿åãããŸããã ããã¯äœã§ããïŒ ã¹ããŒãªãŒããã¬ã³ãŒããåé€ããŠä»¥åã®ç¶æ ã«ãšã©ãŸããšãéæ³ã®ããã«æ»ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®äž»ãªã·ããªãªãšããŠã®åæã®æ¡ä»¶ã§ã¯ãã¹ããŒãªãŒããã°ãã°æ»ã£ãŠããããšãããããŸãã
ã©ããã
ãªããªã ä»ã®é¡§å®¢ã«åœ±é¿ãäžããããšã¯ã§ããŸãããå¶éãå ¥åã§ããŸãã 以äžã®ä»®å®ãèæ ®ããŠãã ããã
- ãã¡ã€ã«ã¯p2pã§ã¯ãªãäžå€®ã¹ãã¬ãŒãžãä»ããŠåæãããŸã
- ãã¡ã€ã«ãšãšãã«ãã¡ã¿ããŒã¿ãã¬ããªã«ã«ãã€ã§ãä¿åã§ããŸã
ããã«åºã¥ããŠãåé€ããã³è¿œå ãããå±¥æŽç¶æ ã®ãªã¹ããä¿æããããã«ããã¡ã€ã«ã«å€æŽãå ããç¬éãããªããžããªã«å€æŽãéä¿¡ããããŸã§æ±ºå®ãè¡ãããŸããïŒããŒã«ã«ãã¥ãŒã ã¹ããŒã³ã»ããïŒã åæã«ããã¡ãããéå»ã®ä»»æã®p2pãã¡ã€ã«ãšã®åæã¯äŸç¶ãšããŠå¥åŠã§ãããããã¯äž»ãªã·ããªãªã§ã¯ãããŸããã
ãªããžããªã«å€æŽãéä¿¡ããã«ã¯ãã¯ã©ã€ã¢ã³ãã¯æ¬¡ã®ããšãè¡ãå¿ èŠããããŸãã
- ãã¡ã€ã«ã®ãªããžã§ã³ïŒversionTagïŒãæåŸã«åä¿¡ãããã®ãšæ¯èŒããŸã
- å€æŽãããŠããå Žåã¯ãããŒãããŠããªãŒãºããŸã
- ããŒã«ã«ã«å€æŽãããå Žåã¯ãversionTagãã§ãã¯ã§ã¢ããããŒãããŸã
- 競åããå Žågoto 2
- ããŒã«ã«ç¶æ ã®ã¯ãªã¢ïŒå¢ç³ã»ããïŒ
åç §è³æ
CRDT-ãŠã£ãããã£ã¢
CRDTã®èªã¿ç© -å€ãã®äŸ¿å©ãªCRDTåºçç©
CRDT-æ°åŠã®å°ãªã説æïŒGitHubïŒ -æ°åŠã®ãªãCRDTã®ç°¡åãªèª¬æ
crdt_notesïŒGitHubïŒ -1ããŒãžã«åéãããCRDTã¢ã«ãŽãªãºã
競åã®ãªãè€è£œãããããŒã¿åïŒããŒããŒïŒ -CRDTã®æŠèŠ
åæããã³å¯æè€è£œããŒã¿åã®å æ¬çãªç 究ïŒããŒããŒïŒ -æ°åŠãšåçã«ãã詳现ãªèª¬æã40ããŒãž
æé©åããã競åã®ãªãè€è£œã»ãã -CRDTæ§é ã®æé©åã®äŸ
kdbxwebïŒGitHubïŒ -åé¡ã®ã»ã€ãŠãã®ãµããŒãã§KeePass圢åŒãæäœããããã®js-lib