CAPå®ç
ãã®å®çã¯ã2000幎ã®Eric Brewerã«ããåæ£ã³ã³ãã¥ãŒãã£ã³ã°ã®ååã«é¢ããã·ã³ããžãŠã ã§çºè¡šãããŸããã 2002幎ãã»ã¹ã®ã«ããŒããšãã³ã·ãŒãã³ã·ãŒãªã³ãã¯ãããŒã«éžé 家ã®ä»®èª¬ã®å ¬åŒãªèšŒæ ãå ¬éããå®çãšããŸããã
Breweræ°ã«ãããšã圌ã¯ã³ãã¥ããã£ã«åæ£ã·ã¹ãã ã®äŸµå®³ã«ã€ããŠã®è°è«ãéå§ããŠã»ãããšèããŠãããæ°å¹ŽåŸã圌ã¯ããã«å¯ŸããŠä¿®æ£ãšäºçŽããå§ããŸããã
CAPã®èåŸã«ãããã®
CAPã¯ãåæ£ã·ã¹ãã ã§ã¯3ã€ã®ããããã£ã®ãã¡2ã€ããéžæã§ããªããšè¿°ã¹ãŠããŸãã
- CïŒäžè²«æ§ïŒ-äžè²«æ§ã å枬å®å€ã¯ãææ°ã®ãšã³ããªãæäŸããŸãã
- AïŒå¯çšæ§ïŒ-å¯çšæ§ã åããŒãïŒç«ã¡äžããã§ã¯ãªãïŒã¯åžžã«ïŒèªã¿åãããã³æžã蟌ã¿ã®ïŒèŠæ±ãæ£åžžã«å®è¡ããŸãã
- PïŒããŒãã£ã·ã§ã³èš±å®¹å€ïŒ-ååžèš±å®¹å€ã ããŒãéã«æ¥ç¶ããªããŠãããããã¯äºãã«ç¬ç«ããŠæ©èœãç¶ããŸãã
ãã§ã«ãã®å®çã®ååãªæ確ãªèšŒæ ãããã®ã§ãç§ã¯ããŠãã³å€§åŠãžã®ãªã³ã¯ãšãµãŒãã¹ãã³ãŒã«ãç§ã¯æãåºãããŸãïŒãã®åœ¢ã§èšŒæãæäŸããŸãã
åºæ¬çã«ã¯ãã¹ãŠäžè§åœ¢ã§ã
å€ãã®èšäºã¯ããã®ãããªåçŽãªäžè§åœ¢ã«åž°çããŸãã

å®è·µãã
CAPå®çãå®éã«é©çšããããã«ãç§ã®æèŠã§ã¯ã3ã€ã®æãé©åã§éåžžã«äººæ°ã®ããããŒã¿ããŒã¹ã·ã¹ãã ãéžæããŸãããPostgresqlãMongoDBãCassandraã§ãã
Postgresqlãã芧ãã ãã
次ã®é ç®ã¯ãæœè±¡åæ£PostgresqlããŒã¿ããŒã¹ã«é¢é£ããŠããŸãã
- ãã¹ã¿ãŒã¹ã¬ãŒãã¬ããªã±ãŒã·ã§ã³ã¯ã1ã€ã®äžè¬çãªãœãªã¥ãŒã·ã§ã³ã§ãã
- éåæ/åæã¢ãŒãã§ã®ãã¹ã¿ãŒãšã®åæ
- ãã©ã³ã¶ã¯ã·ã§ã³ã·ã¹ãã ã¯ãäžè²«æ§ã確ä¿ããããã«2ãã§ãŒãºã³ãããã䜿çšããŸãã
- ããŒãã£ã·ã§ã³ãçºçããå Žåãã·ã¹ãã ãšå¯Ÿè©±ã§ããŸããïŒäž»ãªå ŽåïŒ
ãããã£ãŠãããŒãã£ã·ã§ã³ã®å Žåãã·ã¹ãã ã¯åäœãç¶ç¶ã§ããŸãããã匷åãªäžè²«æ§ãšå¯çšæ§ãæäŸããŸãã ããã¯CAã·ã¹ãã ã§ãïŒ
MongoDBãèŠãŠã¿ãŸããã
以äžã®é ç®ã¯ãMongoDBæœè±¡åæ£ããŒã¿ããŒã¹ã«é¢é£ããŠããŸãã
- MongoDBã¯1ã€ã®ãã¹ã¿ãŒããŒããæã€ã·ã¹ãã ã§ãããããã©ã«ãã§ãã¹ãŠã®ãšã³ããªãããã«ç§»åããããã匷åãªäžè²«æ§ãæäŸããŸãã
- ä»ã®ããŒãããåé¢ããå Žåã®ãã¹ã¿ãŒã®èªåå€æŽã
- ãããã¯ãŒã¯ãåé¢ããå Žåãã·ã¹ãã ã¯ã¬ã³ãŒããå®å šã«å®äºããããšãã§ãããŸã§ãã¬ã³ãŒãã®åãå ¥ããåæ¢ããŸãã
ãããã£ãŠãã·ã¹ãã ã¯ãããã¯ãŒã¯åé¢ã®å Žåã§ãåäœãç¶ç¶ã§ããŸããããã¹ãŠã®ããŒãã®CAPå¯çšæ§ã¯å€±ãããŸãã ããã¯CPã·ã¹ãã ã§ãïŒ
Cassandraãã芧ãã ãã
Cassandraã¯ãã¹ã¿ãŒ/ãã¹ã¿ãŒã¬ããªã±ãŒã·ã§ã³ã¹ããŒã ã䜿çšããŸããããã¯ãå®éã«ã¯ããããã¯ãŒã¯åé¢ã«ãããã¹ãŠã®ããŒããèªçµŠèªè¶³ã§æ©èœããAPã·ã¹ãã ãæå³ããŸãã
ããã¯ç°¡åã«æããŸã...ããããããã§ã¯ãããŸããã
CAPã®åé¡
ããã§Habréã®CAPå®çã®åé¡ã«é¢ããå€ãã®è©³çŽ°ã§èå³æ·±ãèšäºãæžãããŠããã®ã§ã CAPãžã®ãªã³ã¯ã¯ããé¢ä¿ããªã ãCAPå®çã«é¢ããç¥è©±ã¯æ®ããŠãããŸãã å¿ ãèªãã§ãã ãããããããåèšäºãæ°ããå€èŠ³ã®ããã«æ±ããããªãã®å¿ã«è¿ã¥ããããªãããã«ããŠãã ããã ç§èªèº«ã¯ããŸãæ·±ããªããŸããããå¿ èŠãªç·šéãããã€ãè¡ã£ãŠãã ããã
ãããã£ãŠãCAPå®çã®åé¡ã¯æ¬¡ã®ãšããã§ãã
- çŸå®äžçããé ãé¢ããå®çŸ©
- éçºã®äžç°ãšããŠãäž»ã«CPãšAPãéžæããŸã
- å€ãã®ã·ã¹ãã ã¯åãªãP
- çŽç²ãªAPããã³CPã·ã¹ãã ã¯æåŸ ãããã®ã§ã¯ãªãå ŽåããããŸã
å®çŸ©ã®äœãåé¡ã«ãªã£ãŠããŸããïŒ
CAPã®äžè²«æ§ã¯ãå®éã«ã¯ç·åœ¢åå¯èœæ§ãæå³ããŸãïŒãããŠãéæããã®ã¯æ¬åœã«é£ããã§ãïŒã ç·åœ¢åå¯èœæ§ãšã¯äœãã説æããããã«ã次ã®å³ãèŠãŠã¿ãŸãããã

説æããå Žåã審å€ã¯ã²ãŒã ãçµäºããŸãããããã¹ãŠã®ã¯ã©ã€ã¢ã³ããåãçµæãåŸãããã§ã¯ãããŸããã ã·ã¹ãã ãç·åœ¢åããã«ã¯ãã¬ããªãŒãä»ã®ããŒã¿ãœãŒã¹ãšå³åº§ã«ããŒã¿ãåæããã¬ããªãŒãã²ãŒã ãçµäºãããšãã«åã¯ã©ã€ã¢ã³ããæ£ããæ å ±ãåãåãããã«ããå¿ èŠããããŸãã
å®çŸ©äžãCAPã®å¯çšæ§ã«ã¯2ã€ã®é倧ãªåé¡ããããŸãã 1ã€ç®-éšåçãªå¯çšæ§ã®æŠå¿µã¯ãªããããçšåºŠã®å²åïŒããšãã°ãããŒã»ã³ããŒãžïŒããããŸãããå®å šãªå¯çšæ§ãããããŸããã 2çªç®ã®åé¡ã¯ãç¡å¶éã®å¿çæéã§ãã ã·ã¹ãã ã1æéå¿çãããšããŠããå©çšå¯èœã§ãã
ååžãžã®æµæã«ã¯åããããŒãã¯å«ãŸããŸããããã®çç±ã¯æ¬¡ã®ãšããã§ãã
- å®çŸ©ã«ãããŸãã å¯çšæ§ã§ã¯ãã...ïŒãã¹ãŠã®ããŒãïŒå€±æããŠããªãå ŽåïŒåžžã«...ïŒã
- 蚌æ ã«åºã¥ããŠããŸãã CAPå®çã®èšŒæã¯ãããŒãã§ããã€ãã®ã³ãŒããå®è¡ããå¿ èŠãããããšã瀺ããŠããŸãã
- ããŠãç§ã®æšæž¬ã®ããã€ãïŒãããŠããã ãã§ã¯ãªãïŒã ããŒããã¯ã©ãã·ã¥ããå Žåãã·ã¹ãã ã¯å埩ããä»ã®ããŒããšéä¿¡ããäœãèµ·ãããªãã£ããã®ããã«åäœãç¶ç¶ã§ããŸãã ãããã¯ãŒã¯åé¢ã®å Žåãæ¥ç¶ã埩å ããããŸã§åŸ ã€å¿ èŠããããŸãã
ãããã£ãŠãã·ã¹ãã ã®å埩èœåãèŠããŠããå¿ èŠããããŸãããCAPå®çã®ç¯å²ãè¶ ããŠããŸãã
AP / CPã®éžæ
éåžžãããŒãéã®éä¿¡ã¯ãã¡ãã»ãŒãžãé 延ãŸãã¯åé€ããå¯èœæ§ã®ããéåæãããã¯ãŒã¯ãä»ããŠè¡ãããŸãã ã€ã³ã¿ãŒãããããã³ãã¹ãŠã®ããŒã¿ã»ã³ã¿ãŒã«ãã®ç¹æ§ãããããããã¯ããããããªãåºæ¥äºã§ã¯ãªãã®ã§ãCAã·ã¹ãã ã¯éçºãã¬ãŒã ã¯ãŒã¯ã§ã»ãšãã©èæ ®ãããŸããã
å€ãã®ã·ã¹ãã ã¯åãªãP
2ã€ã®ããŒãïŒãã¹ã¿ãŒãã¹ã¬ãŒãïŒãšã¯ã©ã€ã¢ã³ããããªãã·ã¹ãã ãæ³åããŠãã ããã ãã¹ã¿ãŒãšã®æ¥ç¶ãçªç¶å€±ãããå Žåãã¯ã©ã€ã¢ã³ãã¯ã¹ã¬ãŒãããèªã¿åãããšã¯ã§ããŸãããæžã蟌ãããšã¯ã§ããŸãã-CAPãå©çšã§ããŸããã
ããããŸãããCPã·ã¹ãã ãšåæ§ã§ããããã¹ã¿ãŒãšã¹ã¬ãŒããéåæã§åæããå Žåãã¯ã©ã€ã¢ã³ãã¯åæãæåããåã«ã¹ã¬ãŒãããããŒã¿ãèŠæ±ã§ããŸã-CAPã®æŽåæ§ã倱ãããŸãã

çŽç²ãªAPããã³CPã·ã¹ãã
çŽç²ãªAPã·ã¹ãã ã«ã¯ãåçŽã«2ã€ã®çªå·ãžã§ãã¬ãŒã¿ãŒãå«ããããšãã§ããŸãã çŽç²ãªCPã·ã¹ãã ã¯ã ç§ã¯åæãããç¶æ ã«å°éããããšããŸãããç§ãã¡ã«ã¯çããŸããã ããã«é²ãã§ãCPã·ã¹ãã ã¯åŒ·ãäžè²«æ§ã§ã¯ãªããæçµçãªäžè²«æ§ãæäŸããŸãã 圌ã«ã€ããŠã¯å°ãåŸã§è©±ããŸãããã
ãããšäžç·ã«æ®ããæ¹æ³
çµå±ã®ãšãããããã¯æœè±¡çãªãã®ãåé¡ããããã®è©Šã¿ã«éããªããããè»èŒªãåçºæããå¿ èŠã¯ãããŸããã åæ£ããŒã¿ããŒã¹ã䜿çšããå Žåã¯ã次ã®ã¢ãããŒãã䜿çšããããšããå§ãããŸãã
- CAPå®çŸ©ãšãã®å¶éã«æ³šæããŠãã ããã
- CAPã®ä»£ããã«PACELCå®çã䜿çšãããšãå¥ã®è§åºŠããã·ã¹ãã ãèŠãããšãã§ããŸãã
- ACID / BASEã®ååãšãããããã·ã¹ãã ã«ã©ã®ããã«é©çšãããããèŠããŠãããŠãã ããã
- ããªããåãçµãã§ãããããžã§ã¯ããèãããšãäœã®åããããå¿ èŠããããŸãã
ãã»ã«ã¯
PACELCã®å®çã¯ã2012幎ã«ã€ã§ãŒã«å€§åŠã®ãããšã«J.ã¢ããã£ã«ãã£ãŠæåã«èšè¿°ããã圢åŒåãããŸããã PACELCå®çã¯CAPã«åºã¥ããŠããããããã®å®çŸ©ã䜿çšããŸãã
å®çå šäœã¯IF P->ïŒCãŸãã¯AïŒãELSEïŒCãŸãã¯LïŒã«ãªããŸãã
åŸ ã¡æé-ããã¯ãã¯ã©ã€ã¢ã³ããå¿çãåä¿¡ããæéã§ãããäžå®ã¬ãã«ã®äžè²«æ§ã«ãã£ãŠèŠå¶ãããŸãã ã¬ã€ãã³ã·ãŒïŒã¬ã€ãã³ã·ãŒïŒã¯ãããæå³ã§ãå¯çšæ§ã®çšåºŠãè¡šããŸãã

BASEã«ã€ããŠ
BASEã¯ACIDã®ç¬ç¹ãªã³ã³ãã©ã¹ãã§ãããçŸå®ã®äžçã§ã¯çã®äžè²«æ§ãå®çŸã§ãããé«åºŠã«ã¹ã±ãŒã©ãã«ãªã·ã¹ãã ã§ã¢ãã«åã§ããªãããšã瀺ããŠããŸãã
BASEã®èåŸã«ãããã®ïŒ
- åºæ¬çãªå¯çšæ§ã ã·ã¹ãã ã¯ãã¹ãŠã®èŠæ±ã«å¿çããŸããããã®åçã«ã¯ãšã©ãŒãŸãã¯ççŸããããŒã¿ãå«ãŸããå ŽåããããŸãã
- ãœããç¶æ æçµçãªäžè²«æ§ã®å€åã«ãããã·ã¹ãã ã®ç¶æ ã¯æéãšãšãã«å€åããå ŽåããããŸãã
- æçµçãªäžè²«æ§ã ã·ã¹ãã ã¯æçµçã«ã¯äžè²«ãããã®ã«ãªããŸãã 圌女ã¯åŒãç¶ãããŒã¿ãåãå ¥ãããã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ã®äžè²«æ§ããã§ãã¯ããŸããã
ç§ã¯ACIDãBASEãããåªããŠãããã®ã«ã€ããŠäœåºŠãå°ããããŸãã-ããã¯ããªãã®ãããžã§ã¯ãã«äŸåããŸãã ããšãã°ãããŒã¿ãéèŠã§ã¯ãªãããŠãŒã¶ãŒãã€ã³ã¿ã©ã¯ã·ã§ã³ã®é床ãæ¬åœã«éèŠããŠããå ŽåãBASEãæé©ãªãªãã·ã§ã³ã§ãã å察ã®å ŽåãACIDã¯ããŒã¿ã«é¢ããŠã·ã¹ãã ã®ä¿¡é Œæ§ãå¯èœãªéãé«ããã®ã«åœ¹ç«ã¡ãŸãã
æ°é®®ãªè¡šæ
èœãšãç©Žã®ã»ãšãã©ã«ã€ããŠããã£ãã®ã§ãåŸãããç¥èã®ããªãºã ãéããŠåã人æ°ã®ããããŒã¿ããŒã¹ã·ã¹ãã ãèŠãŠã¿ãŸãããã
Postgresql
Postgresqlã¯å€ãã®ç°ãªãã·ã¹ãã æ§æãèš±å¯ããŠããããããããã説æããããšã¯éåžžã«å°é£ã§ãã Slonyãä»ããŠå®è£ ããåŸæ¥ã®ãã¹ã¿ãŒã¹ã¬ãŒãã¬ããªã±ãŒã·ã§ã³ãèŠãŠã¿ãŸãããã
- ã·ã¹ãã ã¯ACIDã«åŸã£ãŠåäœããŸãïŒ2ãã§ãŒãºã³ãããã«ã¯ããã€ãã®åé¡ããããŸãããããã¯èšäºã®ç¯å²å€ã§ãïŒã
- æ¥ç¶ãåæãããå ŽåãSlonyã¯æ°ãããã¹ã¿ãŒã«åãæ¿ããããšããäžè²«æ§ã®ããæ°ãããã¹ã¿ãŒãäœæãããŸãã
- ã·ã¹ãã ãæ£åžžã«åäœããŠããå ŽåãSlonyã¯åŒ·åãªäžè²«æ§ãå®çŸããããã«ããããããšãè¡ããŸãã å®éãACIDããã®ã·ã¹ãã ã®å€§ããªé 延ã®åå ã§ãã
- ã·ã¹ãã åé¡-PC / ECïŒAïŒã
ã¢ã³ãŽãã
MongoDBã«ã€ããŠäœãæ°ããããšãèŠã€ããŸãããã
- ããã¯ãããã¥ã¡ã³ãã¬ãã«ã§ã®éå®çãªæå³ã§ã®ACIDã§ãã
- åæ£ã·ã¹ãã ã®å Žå-ããã¯ãã¹ãŠãã®BASEã§ãã
- ãããã¯ãŒã¯ããŒãã£ã·ã§ã³ããªãå Žåãã·ã¹ãã ã¯èªã¿åããšæžã蟌ã¿ã®äžè²«æ§ãä¿èšŒããŸãã
- ãã¹ã¿ãŒããŒããèœã¡ãããã·ã¹ãã ã®æ®ãã®éšåãšã®æ¥ç¶ã倱ã£ããããå Žåãäžéšã®ããŒã¿ã¯è€è£œãããŸããã ã·ã¹ãã ã¯ãæ°ãããŠã£ã¶ãŒããéžæããŠãèªã¿åãããã³æžã蟌ã¿ã«äœ¿çšå¯èœãªãŸãŸã«ããŸãã ïŒæ°ãããã¹ã¿ãŒãšå€ããã¹ã¿ãŒã¯ççŸããŠããŸãïŒã
- ã·ã¹ãã ã¯PA / ECïŒAïŒãšèŠãªãããŸããããã¯ãã»ãšãã©ã®ããŒããäžæããå Žåã«CAPãå©çšå¯èœãªãŸãŸã«ãªãããã§ãã CAPã§ã¯ãMongoDBã¯éåžžCPãšèŠãªãããããšã«æ³šæããŠãã ããã PACELCã®äœæè ã§ãããããšã«J.ã¢ããã£ã¯ãã¢ã¯ã»ã·ããªãã£ãããäžè²«æ§ã«é¢ããŠã¯ããã«å€ãã®åé¡ããããšèšããŸãã
ã«ãµã³ãã©
- ãé«éãã€ã³ã¿ã©ã¯ã·ã§ã³ïŒäœé 延ã€ã³ã¿ã©ã¯ã·ã§ã³ïŒçšã«èšèšãããŠããŸãã
- ã¬ã³ãŒãã¬ãã«ã®ACIDã
- åæ£ã·ã¹ãã ã®å Žå-ããã¯ãã¹ãŠãã®BASEã§ãã
- åæãçºçããå Žåãæ®ãã®ããŒãã¯æ©èœãç¶ããŸãã
- éåžžã®åäœã®å Žåãã·ã¹ãã ã¯äžè²«æ§ã®ã¬ãã«ã䜿çšããŠé 延ãåæžããŸãã
- ã·ã¹ãã ã¯PA / ELïŒAïŒãšèŠãªãããŸãã
çµè«
- åæ£ã·ã¹ãã ã®ãã¬ãŒããªãã¯ãèšèšããã»ã¹ãéå§ããå Žæã§ãã
- æœè±¡ã·ã¹ãã ãåé¡ããã®ã¯ååã«å°é£ã§ãããŸããæè¡ä»æ§ã«åºã¥ããŠèŠä»¶ãçå®ãããã®åŸã§ç®çã®ããŒã¿ããŒã¹ã·ã¹ãã ãæ£ããæ§æããããšããå§ãããŸãã
- æ°ã«ããªãã§ãã ãããç§ãã¡ã¯å¥œå¥å¿developersçãªéçºè ã§ããçåãããå Žåã¯ãå°é家ã«ãåãåãããã ããã
ãæž èŽããããšãããããŸããïŒ
æçšãªãœãŒã¹
dzone.com/articles/better-explaining-cap-theorem
blog.thislongrun.com/2015/03/the-confusing-cap-and-acid-wording.html
neo4j.com/blog/acid-vs-base-consistency-models-explained
databases.about.com/od/databasetraining/a/databasesbegin.htm
brooker.co.za/blog/2014/07/16/pacelc.html
www.postgresql.org/files/developer/transactions.pdf
www.airpair.com/postgresql/posts/sql-vs-nosql-ko-postgres-vs-mongo
jennyxiaozhang.com/nosql-hbase-vs-cassandra-vs-mongodb
blog.thislongrun.com/2015/04/the-unclear-cp-vs-ca-case-in-cap.html
www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
cs-www.cs.yale.edu/homes/dna/papers/abadi-pacelc.pdf
blog.thislongrun.com/2015/03/dead-nodes-dont-bite.html
queue.acm.org/detail.cfm?id=2462076
blog.thislongrun.com/2015/03/the-confusing-cap-and-acid-wording.html
neo4j.com/blog/acid-vs-base-consistency-models-explained
databases.about.com/od/databasetraining/a/databasesbegin.htm
brooker.co.za/blog/2014/07/16/pacelc.html
www.postgresql.org/files/developer/transactions.pdf
www.airpair.com/postgresql/posts/sql-vs-nosql-ko-postgres-vs-mongo
jennyxiaozhang.com/nosql-hbase-vs-cassandra-vs-mongodb
blog.thislongrun.com/2015/04/the-unclear-cp-vs-ca-case-in-cap.html
www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
cs-www.cs.yale.edu/homes/dna/papers/abadi-pacelc.pdf
blog.thislongrun.com/2015/03/dead-nodes-dont-bite.html
queue.acm.org/detail.cfm?id=2462076