p.vi
ã³ã³ããã¥ãŒãã£ã³ã¯ãã¯ãããããã«ã«ãã£ãŒãŠããã(...)ãããããã«ã«ãã£ãŒã¯ãæŽå²ãéããã ãŸããããããããã«ã«ãã£ãŒã¯ãã¢ã€ããã³ãã£ãã£ãšåœäºè æèã«ä»ãªããŸãããããã¯ä»è ãšã®ååãéå»ãæªæ¥ãšã¯é¢ä¿ãªããä»ãçããããšãŠããã
ãã£ã¡ããã
p.xii
- ãªããã®æ¬ãæžããïŒ
- 忣ã·ã¹ãã ã®èšèšã«ã€ããŠã®å®çªã®æžç±ãç¡ãã£ã
- ãã®æ¬ãèªããšã©ããªãïŒ
- ããŒã¿ãæ±ãäžã§ã®åºæ¬çãªæŠå¿µãå¹ççã«åŠç¿ã§ãã
- æ¢åã® OSS ãããžã§ã¯ãã®äœçœ®ã¥ã
- ãããåŠçãšã¹ããªãŒã åŠçã®éã
- ããŒã¿ã®å岿¹æ³
- æŽæ°ãã°ã®æŽ»ç𿹿³
- (p.8)100% 皌åããã·ã¹ãã æ§ç¯ã®é£ãããåããã99.99% ã®çšŒåçãªããæåŸ ã©ããã«åãã·ã¹ãã ãäœãããã®èãæ¹ãé€ããã
- ããŒã¿ãæ±ãäžã§ã®åºæ¬çãªæŠå¿µãå¹ççã«åŠç¿ã§ãã
p.xiii
- CAPå®çã¯å®çšäžæçã§ãªã
- 察象ãšãªãã·ã¹ãã ãçã
- CAPå®çãšã¯ïŒ
- 忣ã·ã¹ãã ã«ãããæ å ±è€è£œã«é¢ããå®çã以äžã®3ã€ãåæã«æºããããšã¯ã§ããªãããšãããã®
-
- Consistency => ããŒã¿ã®èªã¿æžãã«ãããŠåãåããã®ã¯ææ°ã®æžã蟌ã¿ããŒã¿ãããã¯ãšã©ãŒã®ã¿ã§ãã
-
- Availability => ããŒãã«é害ãçºçããŠãä»ã®ããŒããå¿çãããåäžé害ç¹ãç¡ã
-
- Partition-tolerance
- 察象èªè *
p.ix
- 忣ã·ã¹ãã ã«ã€ããŠã®ç€ŸäŒèæ¯
- ã ãŒã¢åã®åŽ©å£
- äžæ¹ã§ CPU ã¯ã¡ããŒã³ã¢åããããã¯ãŒã¯ã¯é«éåããŠãã
- ããŒã¿éã»ãã©ãã£ãã¯éã®å¢å ïŒTwitter ãšãïŒ
- æ©æãªãããã¯ãéçºã«å¯Ÿå¿ã§ããæè»ãªããŒã¿ã¢ããªã³ã°ãžã®èŠæ±
- OSS ãå©çšãã人éãã¡ãå¢ãã
- AWS ãªã©ã® IaaS ã«ããå€ãã®çŸå Žã容æã«è€æ°å°åã«è·šã忣ã·ã¹ãã ãæ§ç¯ã§ããããã«ãªã£ã
- ãŠãŒã¶ãŒãæåŸ ããå¯çšæ§ã®æ°Žæºãé«ãŸã£ãŠãã
- ã ãŒã¢åã®åŽ©å£
- æŒç®æåã¢ããªã±ãŒã·ã§ã³ãšããŒã¿æåã¢ããªã±ãŒã·ã§ã³
- æŒç®æå => CPU ãµã€ã¯ã«ãããã«ããã¯ã«ãªãã¢ããªã±ãŒã·ã§ã³
- ããŒã¿æå => ããŒã¿éããã®è€éããå€åé床ãäž»ãªèª²é¡ãšãªãã¢ããªã±ãŒã·ã§ã³
p.3
- 仿¥ãå€ãã®ã¢ããªã¯æŒç®æåã§ãªãããŒã¿æå
- CPU matter ã§ã¯ãªãããŒã¿ã®è€é床ã»éã»å€åé床 matter
- ããŒã¿æåã¢ããªã±ãŒã·ã§ã³ã«ãããŠæ±ããããæ©èœ
- ããŒã¿ãä¿åããèªèº«ã»ä»ãããã®ããŒã¿ãèŠã€ããããããã«ããïŒDBïŒ
- åŠçéã®å€ãçµæãèšæ¶ããèªã¿åãé床ãé«ããïŒãã£ãã·ã¥ïŒ
- ããŒã¿æ€çŽ¢æã«ããŒã¯ãŒãæ€çŽ¢ãªã©ãã£ã«ã¿ãªã³ã°ã§ããããã«ããïŒæ€çŽ¢ã€ã³ããã¯ã¹ïŒ
- ä»ã®ããã»ã¹ã«ã¡ãã»ãŒãžãéãåŠçãéåæåããïŒã¹ããªãŒã åŠçïŒ
- èç©ããã倧éã®ããŒã¿ã宿çã«åŠçããïŒãããåŠçïŒ
- ããããåœããåã«æããç°å¢ = ããŒã¿ã·ã¹ãã ãšããæœè±¡åãäžæããã£ãŠã
p.4
- "æ¬æžã¯ãããŒã¿ã·ã¹ãã ã®åçãšå®çšæ§ã®åæ¹ããããŠããŒã¿æåã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ããããäœ¿ãæ¹æ³ãå·¡ãæ
ã§ã"
- (ravelll) ããŒã¿ã·ã¹ãã ãšããŒã¿æåã¢ããªã±ãŒã·ã§ã³ãç¬ç«ããŠæããå¿ èŠãããããã
- 1ç« ã§ã¯ reliability ãš scalability ãæã¡ã€ã€ã¡ã³ããã³ã¹æ§ãé«ãããŒã¿ã·ã¹ãã ã®åºç€ã調ã¹ã
- (ravelll) å¯çšæ§ => availability
- ããã©ãŒãã³ã¹ç¹æ§ïŒã¢ã¯ã»ã¹ãã¿ãŒã³ïŒãå®è£
ãç°ãªãããŒã«ãã¡ããªã ããŒã¿ã·ã¹ãã ãšããçšèªã§ãŸãšããŠèããã¹ãã
- äŸãã° DBããã¥ãŒããã£ãã·ã¥
- ã©ãã©ããŠãŒã¹ã±ãŒã¹ã«ç¹åããããŒã«ãçãŸããŠãã
- åé¡ãã¥ãã
- ã¢ããªã±ãŒã·ã§ã³åŽãããŒã¿åŠçãã¹ãã¬ãŒãžã«èŠæ±ããããšãå¹
åºããªãåäžããŒã«ã§ã¯ã«ããŒã§ããªããªã£ãŠã
- è€æ°ãçµã¿åãããŠå¹çåãã
- (ravelll) åã ã«èªããšããããã¯ãŸãšããŠæããŠç«ã¡äœçœ®ãææ¡ããã»ããè¯ããšããããšïŒ
p.5
èªæžäŒ 2019/09/02
- nginx ã® 99 percentile ã®å€åãããšæã£ããã© DataDog ã®ååŸã匱ã㊠95 ã MAX ããããããäžæãåããªã
- ä»ã¯ MongoDB ã¯ã·ã£ãŒãã£ã³ã°ããŠãªãïŒ => ããŠãªã
- Primary, Replica, Hot Stanby
- i3en 12 (Primary, Secondary)
- Performance Service ã«ãã£ãŠã©ãã軜ããªãïŒ
- MongoDB ã«å ¥ã£ãŠã *Usage ããŒã¿ãå€éšã«ãµãŒãã¹ããšåãåºã
- å
šäœã®ã¹ã«ãŒãããã R/W åãã㊠20,000 è¶
ããã®ã¯ããŒã¯ã¬ãã«
- api ãžã®æžã蟌ã¿ã 40,000 reqs/min ãã£ãŠããããæ°èšé²
- ãšããããšã¯ Mongo ãžã®ã¢ã¯ã»ã¹ã¯ãã£ãšãã
- api ãžã®æžã蟌ã¿ã 40,000 reqs/min ãã£ãŠããããæ°èšé²
- éçšããã¢ããªã±ãŒã·ã§ã³ã®ç¹æ§ã«åãããŠã¹ãã¬ãŒãžãšã³ãžã³ã广çã«åããããã«ã¯ã¹ãã¬ãŒãžãšã³ãžã³ã®æåã倧ãŸãã«ç¥ã£ãŠããå¿
èŠããã
- ãã©ã³ã¶ã¯ã·ã§ã³ã«æé©åãããã¹ãã¬ãŒãžãšã³ãžã³ãããã°åæã«æé©åãããã¹ãã¬ãŒãžãšã³ãžã³ããã
- ããã§èŠãŠãããšã³ãžã³: log-structured ã¹ãã¬ãŒãžãšã³ãžã³ãB-tree ãªã©ã®ããŒãžæåãªã¹ãã¬ãŒãžãšã³ãžã³
- ãã°ïŒè¿œèšã®ã¿ãè¡ãããããŒã¿ãã¡ã€ã«
- ãã° = ã¢ããªã±ãŒã·ã§ã³ãã°ã§ã¯ãªã
- ãã®æ¬ã§ã¯ãã° = 远èšã ããè¡ãããã¬ã³ãŒãã®äžŠã³
- 人éãå¯èªãåŠãã¯åããªããäŸãã°ä»ã®ããã°ã©ã ãèªãããšãç®çãšãããªãã°ãã€ããªã§è¯ã
- 远èšã¯ããªãããã©ãŒãã³ã¹ãè¯ãæäœ
- äžæ¹ã§æçŽãªæ¢çŽ¢ã¯ããªãããã©ãŒãã³ã¹æªã(O(n))
- ããŒã¿ã«ã¡ã¿ããŒã¿ãä»äžããŠããŒã¿æ¢çŽ¢ã®å¹çãäžãã => ã€ã³ããã¯ã¹
- key ãšããã«å¯Ÿå¿ãã value ãæ ŒçŽãããŠãããã¡ã€ã«äžã®äœçœ®ãã»ããã«ãããã®ãæã£ãŠããïŒããã·ã¥ãããïŒ
- ããŒã¿æ¿å ¥æã«ã¯ããã·ã¥ããããæŽæ°ãã
- åããŒã«å¯Ÿå¿ããå€ãé »ç¹ã«æŽæ°ããããããªã¯ãŒã¯ããŒãã«åããŠã
- äŸïŒåç»ã«å¯Ÿãããã®èŠèŽåæ°
- ãã°ãè¥å€§åããããã¡ã€ã«ãã¯ããŒãºãåããŒã®ææ°è¡ã ããæ®ããŠå¥ã»ã°ã¡ã³ãã«ç§»ã(ã³ã³ãã¯ã·ã§ã³)
- (ravelll)ããã§èšã "ã»ã°ã¡ã³ã" ãšã¯äœãæããŠããâŠïŒ
- ã¡ã¢ãªã®ã»ã°ã¡ã³ãïŒ
- ã¹ãã¬ãŒãžã»ã°ã¡ã³ããšããèšèãåºãŠããã®ã§éãâŠïŒ
- (ravelll)ãã°ã人éãèªãŸãªããªãCSVãšããããªããŠè¯ãã®ã ãªãŒ
- key/value ãåé€ãããšãã¯åé€ã瀺ãããŒã¿ãæ¿å ¥ããŠãã以åã®å€ãæšãŠãããããã«ããŒã¯ãã
- (ravelll)ããã·ã¥ãããã¯ã€ã³ã¡ã¢ãªã§ããå¿
èŠãããã®ã¯ãªãïŒ
- ãã£ã¹ã¯ã2åèŠãïŒ1åç®ã¯ããã·ã¥ãããã®åç §ã2åç®ã¯å€ã®åç §ïŒã®ã¯ããã©ãŒãã³ã¹çã«èš±å®¹ã§ããªãã¬ãã«ãšããããšïŒ
- ãã°ã倧ããã®ã§ããã°ãã£ã¹ã¯ã«ä¿ç®¡ããŠããããã·ã¥ãããã1ååã£ãŠããããããªãããã©ãŒãã³ã¹çã«ãåé¡ã§ã¯ãªãã®ã§ã¯
- ãã£ã¹ã¯ã«ããã·ã¥ããããèšé²ãç¶ããããšã«ããããã©ãŒãã³ã¹å£åãåé¡ïŒ
- Bitcask ã ãšã¹ãããã·ã§ããããã£ã¹ã¯ã«ä¿åããŠåèµ·ååŸã«ã¡ã¢ãªã«èªã¿èŸŒããããã«ããŠãã
- ã¡ãããšæžããŠãã£ããããã©ãŒãã³ã¹çã«ç¡çãšãã話ã ã£ã
- (ravelll)åã»ã°ã¡ã³ãã«ããã·ã¥ãããã眮ãçç±ãããåãã£ãŠãªã
- ã€ã¡ãŒãžããããªããã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã
- SSD ã§ãããçšåºŠã·ãŒã±ã³ã·ã£ã«ãªæžã蟌ã¿ã®ã»ããæãŸããããããªãã
- 远èšã ãã«ããéå»ã®å€ãäžæžããã仿§ã«ãããšãæŽæ°äžã«ã¯ã©ãã·ã¥ãããšèŸãæãã«ãªã
- 远èšã ãã ãšæ°ã«ããå¿ èŠãªããŠæ¥œ
- é·æéããã»ã°ã¡ã³ãã«ããŒã¿çœ®ããšããšãã©ã°ã¡ã³ããŒã·ã§ã³ãèµ·ããå¯èœæ§ãé«ãŸãïŒ
- ããã·ã¥ãããã§ã¯ç¯å²ã§ååŸããã¯ãšãªã¯å¹çæªã
- åããŒãçŽ æŽã«ã«ãã¯ã¢ããããæãã«ã«ãªã£ãŠããŸã
- ã»ã°ã¡ã³ããã¡ã€ã«ãžã®æžã蟌ã¿ãããŒã§ãœãŒããããããã«è¡ã
- ãœãŒãæžã¿æååããŒãã«ïŒSorted String TableïŒ
- ããŒãžæã«ã¯åã»ã°ã¡ã³ããã¡ã€ã«ã®ããŒãé ããèŠãŠããæå°ã®ãã®ããæ°ããã»ã°ã¡ã³ããã¡ã€ã«ã«æžã蟌ãããšã§æ°ãã SSTable ãç°¡åã«ã§ãã
- ããã·ã¥ãããã¯æããªã
- ããã·ã¥ããããšéããå
šãŠã®ããŒã«ã€ããŠã®ãªãã»ãããã¡ã¢ãªã«æããªããŠããã
- éåŒãã圢ã§ããŒãšãªãã»ããã®ãªã¹ããä¿æããŠãããŠæ¢ãããããŒã«è¿ããã®ãæ¢ãã°æ¯èŒçè¿ãã®ãªãã»ãããèŠã€ããããã®ã§ããããã¹ãã£ã³ãã
- (ravelll)å§çž® = ããŒã®éè€ããŠããã¬ã³ãŒããæ¶ããšããããšïŒ
- ãœãŒããããŒãããŠããŒã¿ãèšé²ããã«ã¯èµ€é»æšãAVLããªãŒãšãã®ããªãŒæ§é ã䜿ãã
- ãœãŒããããããŒã¿ã管çããã®ã¯ãã£ã¹ã¯äžãããã¡ã¢ãªäžã®ã»ããé¥ãã«å®¹æãšã®ããš
- ããŒã¿è¿œå ã®é åº
- balaced tree ã«å¯ŸããŠããŒã¿ã远å ãã
- äžå®ä»¥äžæšã倧ãããªã£ãããã¡ã€ã«ã«æžãåºã
- ããŒãžã»ã³ã³ãã¯ã·ã§ã³ã¯ããã¯ã°ã©ãŠã³ãã§ããŸã«ãã
- ãã®ãŸãŸã§ã¯ããŒã¿ããŒã¹ãã¯ã©ãã·ã¥ãããšãã«çŽè¿ã® balanced tree ã«ãããªãã£ãããŒã¿ãæ¶å€±ããŠããŸã
- ãã°ãå¥éãã£ã¹ã¯ã«æã£ãŠããïŒããã¯ãœãŒãæžã¿ã§ã¯ãªãïŒããšã§ balanced tree ã埩æ§ã§ããããã«ããŠãããšåé¿ã§ãã
- LSM: Log-Structured Merge-Tree
- ãœãŒãæžã¿ã®ãã¡ã€ã«ã®ããŒãžãšã³ã³ãã¯ã·ã§ã³ãåºç€ãšããã¹ãã¬ãŒãžãšã³ãžã³: LSMã¹ãã¬ãŒãžãšã³ãžã³
- Lucene ã® "èªã®èŸæž" ã®ä¿åæ¹æ³ã¯ããããæã
- ããã©ãŒãã³ã¹ãæãªããããšããžã±ãŒã¹ãèãã
- äŸãã° LSM ããªãŒã®ã¢ã«ãŽãªãºã ã¯ååšããªãããŒã®æ¢çŽ¢ã«æéããããå Žåããã
- çš®ã ã®ã¹ãã¬ãŒãžãšã³ãžã³ã¯ãã«ãŒã ãã£ã«ã¿ã䜿ã£ãŠååšããªãããŒãæ€ç¥ããŠãã
- äŸãã° LSM ããªãŒã®ã¢ã«ãŽãªãºã ã¯ååšããªãããŒã®æ¢çŽ¢ã«æéããããå Žåããã
- æãäžè¬çãªã€ã³ããã¯ã¹æ§é
- SSTable ãšåæ§ã«ããŒãšå€ã®ãã¢ããœãŒããããç¶æ
ã§ä¿æãã
- ããŒãšå€ã®ã«ãã¯ã¢ãããåŸæ
- ç¯å²ã«å¯Ÿããã¯ãšãªãåŸæ
- log-structured index ãšéãã®ã¯ãããŒã¿ããŒã¹ãåºå®ãµã€ãºã®ãããã¯ãããã¯ããŒãžã«åå²ããããš
- log-structured index: å¯å€ã®ã»ã°ã¡ã³ãã«åå²
- 1ããŒãžã«ããå°ããŒãžãžã®åç
§ã®æ° => åå²ä¿æ°(Branching Factor)
- éåžžæ°çŸçšåºŠ
- æ°ããªå€ã远å ãããšãã¯å¯Ÿå¿ããããŒãžã«ããŒãå ¥ããã空ãããªããšãã¯æ°ããªããŒãžãäœãæ¢åã®ããŒãžã«ããåç §ã®ååãæã£ãŠãã
- æšãåžžã« balanced ãªã®ã§ n åã®ããŒãæã€ B ããªãŒã®æ·±ãã¯åžžã« O(log n) ã«ãªã
- ã»ãšãã©ã®ããŒã¿ããŒã¹ã§ã¯æ·±ã3~4ã§åãŸã
- ããŒãžãµã€ãº4KB, æ·±ã4ã¬ãã«ãåå²ä¿æ°500 ã ãš 256TB ã®ããŒã¿ãæ ŒçŽã§ãã
- ããŒãžæŽæ°ã¯ããªãã¡ããŒã¿ã®æŽæ°ãªã®ã§å±ãªã
- è€æ°ã®ããŒãžã®æŽæ°äžã«ã¯ã©ãã·ã¥ãããšã€ã³ããã¯ã¹ãã¶ã£å£ãã
- 察å¿ãšããŠãããªãŒãžã®å€æŽå 容ã远èšããŠãã redo ãã°ãæ®ããŠããããšã§ B ããªãŒã埩æ§å¯èœã«ããŠããæ¹æ³ããã
- log-structured ã€ã³ããã¯ã¹ã®å Žåããã䞊è¡åŠçãžã®å¯Ÿå¿ãè€éã«ãªã
- ããã¹ã¬ããããèŠããšãã«ã€ã³ããã¯ã¹ããªãŒã®æŽåæ§ãä¿ãããŠããªãèŠãããããããªã
- é²åæ§(1ç« ã§ç޹ä»)
- RDB => å šäœãäžè²«ããã¹ããŒãã«åŸã
- NoSQL => éšåããšã«ã¹ããŒããç°ãªããã
- ã¹ããŒãã®å€æŽããããšãã¯ã¢ããªã±ãŒã·ã§ã³ãã³ãŒãã倿Žããå¿
èŠãããå Žåãå€ã
- ãã©å€§èŠæš¡ãªã¢ããªãã察å¿ããã³ãŒã倿Žãã·ã¥ããšããã¥ãããã©ãããïŒ
- ããŒãªã³ã°ã¢ããããŒã
- ã¯ã©ã€ã¢ã³ãã¢ããªã¯ã¢ããããŒããããã©ãããŠãŒã¶ãŒæ¬¡ç¬¬ã«ãªã£ãŠããŸã
- ãã©å€§èŠæš¡ãªã¢ããªãã察å¿ããã³ãŒã倿Žãã·ã¥ããšããã¥ãããã©ãããïŒ
- 倿ŽååŸã®ã¢ããªãåæã«åããããšã¯ã©ãããããšã
- æ°æ§ã®ããŒã¿ãã©ãŒããããã·ã¹ãã ã«å ±åãããã®ã§äºææ§ãåé¡ã«ãªã
- ããã°ã©ã ãæã€ããŒã¿è¡šçŸ
- ã¡ã¢ãªäžã§ã¯ CPU ã«ããã¢ã¯ã»ã¹ãæäœãå¹ççã«ãªãããæé©åãããŠä¿æããã
- ãã€ã³ã¿ãå«ãã€ã³ã¡ã¢ãªãªè¡šçŸ
- IO ã«åºåãããšãã«ã¯èªå·±å®çµãªåœ¢ã§è¡šçŸããã
- JSON ãªã©ã®ãã€ãåãšããŠã®è¡šçŸ
- ã¡ã¢ãªäžã§ã¯ CPU ã«ããã¢ã¯ã»ã¹ãæäœãå¹ççã«ãªãããæé©åãããŠä¿æããã
- 衚çŸã®å€æ => ãšã³ã³ãŒãã£ã³ã°ïŒã·ãªã¢ã©ã€ãºãããŒã·ã£ãªã³ã°ãšãïŒ
- ã¡ãªã¿ã«æå衚çŸã«é¢ãããšã³ã³ãŒãã£ã³ã°ã¯ Character Encoding = æåå笊å·åæ¹åŒ
- äŸãã° UTF-8 㯠Unicode Code Point ããã€ãåã«å€æããã«ãŒã«ã®1ã€
- ã¡ãªã¿ã«æå衚çŸã«é¢ãããšã³ã³ãŒãã£ã³ã°ã¯ Character Encoding = æåå笊å·åæ¹åŒ
- Ruby ã ãš Marshal 䜿ããšããŒã·ã£ãªã³ã°ã§ãã
data = Marshal.dump("asdffdsa")
- ãšã³ã³ãŒãã£ã³ã°ã«é¢ããåé¡
- ããããã®èšèªããšã®ãã©ãŒããããæã€ã®ã§ä»ã®èšèªããèªãã®ãé£ããçžäºéçšãã¥ãã
- çšéãèãããšãã«ãJSON ããŒã¹ã§ã®äŒè©±ããã€ãåã§çœ®ãæããŠå¹çåããšãã¯ãããã
- 人éãèªãŸãªããªã JSON ãšãã«ããå¿ èŠç¡ããã
- çšéãèãããšãã«ãJSON ããŒã¹ã§ã®äŒè©±ããã€ãåã§çœ®ãæããŠå¹çåããšãã¯ãããã
- ã»ãã¥ãªãã£
- ãŠãŒã¶ãŒå ¥åã絶察ã¢ã³ããŒã·ã£ãªã³ã°ããŠã¯ãããªã
- ããŒã·ã£ãªã³ã°ãæäŸããã©ã€ãã©ãªã¯åŸæ¹äºææ§ãç¡èŠããã¡
- ããŒã·ã£ãªã³ã°ã®å®è£
ãããã©ãŒãã³ã¹ãç¡èŠããã¡
- ãããªã®âŠ
- ããããã®èšèªããšã®ãã©ãŒããããæã€ã®ã§ä»ã®èšèªããèªãã®ãé£ããçžäºéçšãã¥ãã
- JSON, XML, CSV => ããã¹ããã©ãŒããã
- XML, CSV ã¯æ°å€ãšæååã®æ°å€ãåºå¥ã§ããªã
- JSON ã¯æŽæ°ãšæµ®åå°æ°ç¹æ°ãåºå¥ã§ããªããç²ŸåºŠã®æå®ãã§ããªã
- 2^53 㯠IEEE754 ã®å粟床浮åå°æ°ç¹æ°ã§ã¯è¡šçŸã§ããªã
- ãã€ãŒãã® ID 㯠64bit ã®æ°å€ = IEEE754å粟床ã§ã¯è¡šçŸã§ããªã
- ãã€ãŒãã衚ã JSON ã«ã¯è¡šçŸã®ããŒã¹ãã¹ãé²ãããã« ID ã2ã€å«ãŸããŠããã(1) JSON ã®æ°å€å (2) 10鲿°ã®æåå
- JSON/XML ã¯ãã€ããªæååã¯ãµããŒããããŠããªã
- base64 ãšã³ã³ãŒãããŠæååãšããŠæ ŒçŽããŠåé¿
- ããŒã¿ãµã€ãºã33%å¢å ããŠããŸãâŠ
- base64 ãšã³ã³ãŒãããŠæååãšããŠæ ŒçŽããŠåé¿
- JSON Schema 誰ã䜿ã£ãŠãªã
- OpenAPIâŠ
- CSV ã¯ãŸãã¹ããŒãããªã
- ãšã¯èšãããã®ããŒã¿ãããåããããéã§åæãããŠãããªããããªã«åé¡ãããªã
- 倧ããªããŒã¿ïŒãã©ãã€ãçŽãšãïŒãæ±ããšãã«ã¯å¹ççãªããŒã¿ãã©ãŒããããå¹ããŠãã
- ããã§ãã€ããªãšã³ã³ãŒãã£ã³ã°
- æ¢åã®ããã¹ããã©ãŒãããã«å¯Ÿå¿ãããã€ããªãšã³ã³ãŒãã£ã³ã°ãååšãã
- JSON ãªã MessagePack, BSON, BJSON ãšãããã
- JSON ãš MessagePack ã¯ãããŸã容éã«å·®ããªã
- MessagePack ã§ã¯ãã£ãŒã«ãåããã€ããªãšããŠè¡šçŸããŠãããããããã§ã¯ãã£ãŒã«ãçªå·ããæããªãããšã§å€§ãã容éãåæžããŠãã
- ãã£ãŒã«ãçªå·ãšãã£ãŒã«ãåã®å¯Ÿå¿ä»ãã¯éä¿¡ãã人ããã
- required/optional ã¯ãã€ããªã«ã¯åæ ãããªã
- schema evolution
- éèŠããã«ããããŠãã = 1ãžã£ã³ã«ãšããŠç¢ºç«ããŠãããšããããšïŒ
- ãšã³ã³ãŒããããããŒã¿ããã£ãŒã«ãåãæããªã => ãã£ãŒã«ãçªå·ãå€ããªãéãã¯ååãå€ããŠã倧äžå€«
- å€ãã³ãŒãã¯èªèã§ããªãã¿ã°çªå·ãæã€æ°ãããã£ãŒã«ããç¡èŠãã
- æ¬åœã«ïŒå®è£ ã«ãããããªæ°ããã
- æ°ãã远å ãããã£ãŒã«ããããã©ã«ãå€ç¡ãã® required ã«ã§ããªã
- ãã£ãŒã«ããåé€ãããšãã«çªå·ãä»ãæ¿ããªãããæ³šæ
- Protobuf ã«ã¯ãªã¹ããé
åã®ããŒã¿ã¯æããã« repeated ããŒã«ãŒãããã ã
- optional => repeated ãžã®å€æŽãã·ã¥ããšã§ãã
- optional ãã repeated ã«ããŒã¿åã倿Žãããšããoptional ã®ã€ããã§ååŸããŠããã³ãŒãã¯é åã®æ«å°Ÿãåç §ããããšã«ãªã
- Thrift ã«ã¯ãªã¹ãããŒã¿åããã
- ãã¹ããããªã¹ãããŒã¿ã衚çŸã§ãã
- Thrift ã Hadoop ã®ãŠãŒã¹ã±ãŒã¹ã«ããããªãã£ãããäœã£ã
- ãã£ãŒã«ãã¿ã°ïŒãã£ãŒã«ãçªå·ïŒãç¡ã
- ã¹ããŒããšããŒã¿ãšã®ãºã¬ãå
šã蚱容ããªãèšèšã«ããããšã§ãã£ãŒã«ãçªå·ãããŒã¿åã®äžéšãããŒã¿ããçç¥ããŠãã
- äºææ§ä¿ã€ã®é£ãããïŒ
- ã©ã€ã¿ãŒãšããŠã®ã¹ããŒããšãªãŒããŒãšããŠã®ã¹ããŒããååšãããããã¯äžèŽããŠããªããŠãããããšããèšèš
- ã©ã€ã¿ãŒã®ã¹ããŒããšãªãŒããŒã®ã¹ããŒããããããæºããããã«ããŒã¿ã倿ããå±€ããã
- Avro ã«ãããåæ¹äºææ§ = æ°ã¹ããŒããã©ã€ã¿ãŒãšããŠæã€ + æ§ã¹ããŒãããªãŒããŒãšããŠæã€
- 远å ã»åé€ã§ãããã£ãŒã«ãã¯ããã©ã«ãå€ãæã£ãŠãããã£ãŒã«ãã ã
- éä¿¡ããåŽã¯ãªãŒããŒãšããŠã®ã¹ããŒãã ããæã¡ãããŒã¿ã®å é ã«ã©ã€ã¿ãŒã®ã¹ããŒããå ¥ã£ãŠãã®ã§ãããšæ¯èŒãå·®åãåžåãããã倿ãã§ãã
- ã¹ããŒããã®ãã®ãå«ãããšããã¹ããŒãã®ããŒãžã§ã³ãšå¯Ÿå¿ããã¹ããŒãæ§é ã DB ã«ä¿åããããŒã¿ã«ã¯ã¹ããŒãã®ããŒãžã§ã³ã ããå ¥ããããšããããšãã§ãã
- ãããŸãããŒãžã§ã³ãããšãããã°ãã°ãã
- Avro ã¯ãã£ãŒã«ãçªå·ããªã = ããŒã¿ãå«ãŸãã JSON ããåçã«ã¹ããŒããçæã§ãã
- ã³ãŒãçæã®æ©æµã¯éçåä»ãèšèªã®ã»ãããã匷ãåãããã
- åãã§ãã¯ããã
- Thrift ã Protobuf ãçš®ã ã®èšèªã§ãµããŒãããããŸã§ã«ãªã£ãçç±: JSON Schema ã¿ããè€éãªèŠçŽã»äœ¿ãæ¹ã§ãªãã£ããã
- å€ã㯠ASN.1 ãšããã¹ããŒãå®çŸ©èšèªãããããããšæšä»ã®èšèªã¯å
±éç¹ããã
- ãããã¯ãŒã¯ãããã³ã«ã®å®çŸ©ã«å©çšãããŠã
- ãã€ããªãšã³ã³ãŒãã£ã³ã°ã¯ X.509 ã®ãšã³ã³ãŒãã«å©çšãããŠã
- ã¹ããŒãã«åºã¥ããã€ããªãšã³ã³ãŒãã£ã³ã°ã䟿å©ã§ãã
- ããŒã¿ãã³ã³ãã¯ã
- ã¹ããŒããããã¥ã¡ã³ãã«ãªãããææ°ç¶æ ãå¿ ãä¿ãããïŒãã³ãŒãã«å©çšãããããïŒ
- éçåä»ãèšèªãªãã¹ããŒãããã³ãŒããçæããŠåãã§ãã¯ãå ¥åè£å®ã«äœ¿ãã
- ã¹ããŒããé²åãããš IO ããããŒã¿ã®ä¿èšŒã»æè»æ§ãé«ãŸã
- DB ã«ãããŠã©ã€ã¿ãŒãšãªãŒããŒã¯åäžããã»ã¹ãªå Žåããã
- åŸæ¹äºææ§ãç¡ããšèªåèªèº«ãããŒã¿ããã³ãŒãã§ããªããªã£ãŠããŸã
- ããŒãªã³ã°ã¢ããããŒãã®éçšã§æ°æ§ã®ã³ãŒããåæã« DB ã«ã¢ã¯ã»ã¹ããã
- æ°ã³ãŒãã§å ãã倿Žãæ§ã³ãŒããèªãå¯èœæ§ããã
- åæ¹äºææ§ãå¿ èŠ
- æ°ã³ãŒãã§å ãã倿Žãæ§ã³ãŒããèªãå¯èœæ§ããã
- ã³ãŒãã¯çªç¶ã¹ããŒãã«ãã£ãŒã«ããå¢ããŠããããç¡èŠããŠæŽæ°ã§ããæ©æ§ã«ãã¹ã
- æ°ã³ãŒããæ°ãã£ãŒã«ãã®å€ãæŽæ° => æ§ã³ãŒããæ°ãã£ãŒã«ããç¡èŠããŠæŽæ°ãã§æ¶ãããå°ã
- ãããŸããã³ãšããªããã©ã誰ããé²ãã§ãããããæ°ã«ããªãããšããã®ã¯è¯ããªããšããæãïŒ
- DB ã«ãã£ãŠã¯æ°ããæ¥ã远å ãããšãã«æ¢åã¬ã³ãŒãã®è©²åœè¡ã null ã§æŽæ°ããªããŠãã
- PG ã¯ããªãïŒMySQL ã¯ããã£ãœã
- æŽæ°ããªã DB ã®å Žåã¯ãã³ãŒãæã« null ãè£å®ãã
- ãµãŒãã¹ïŒãµãŒããŒãå ¬éããAPI
- DB 㯠SQL ã«ãã£ãŠã¯ã©ã€ã¢ã³ãã«ä»»æã®æäœãå¯èœã«ãããããµãŒãã¹ã¯ API ã«ãã£ãŠã¯ã©ã€ã¢ã³ããã§ããããšãå¶éãã
- SOA, Microservices ãããã«ããŠããã®ç®çã¯åå²ããå°ããªãµãŒãã¹ã«ããããã®ãªãªãŒã¹ãµã€ã¯ã«ããããé²åãå éããããš
- æ°æ§ã®ãµãŒããŒãæ··åšãããã®ã§ããŒã¿ã®ãšã³ã³ãŒãã£ã³ã°ã®äºææ§ãéèŠã«ãªã
- REST 㯠HTTP äžã«æ§ç¯ãããèšèšå²åŠã§ãããããã³ã«ã§ã¯ãªã
- ãªãœãŒã¹èå¥ã« URL ã䜿ã
- ãã£ãã·ã¥ã®å¶åŸ¡
- èªèšŒ
- HTTP ãçšããã³ã³ãã³ãã¿ã€ãã®ããŽã·ãšãŒã·ã§ã³
- SOAP ã¯ãããã¯ãŒã¯ API ãªã¯ãšã¹ãã®ããã® XML ããŒã¹ã®ãããã³ã«
- HTTP ã®æ©èœãã»ãŒäœ¿ããªãããšãç®æšãšããŠãã
- SOAP ã®é¢é£æšæº = WS-*
- SOAP ãå©çšãã Web API ã®ä»æ§ã¯ WSDL ã§èšè¿°ããã
- WSDL ã¯äººéã«ã¯èªããªã => åçš®ããŒã«çŸ€ã IDE ãžã®åŒ·ãäŸå
- ããŒã«ã«ã®é¢æ°åŒã³åºããšåãããã«ééçã«ãªã¢ãŒããµãŒããŒã®ã¡ãœãããåŒã³åºã
- ããããæ§è³ªãå
šãéãã®ã«ééçã«åŒã³åºããšè²ã
åé¡ããã
- æåã»å€±æããã©ã¡ãŒã¿ã®ã¿ã«ãã£ãŠæ±ºãŸããªããªã
- é·ç§»ããç¶æ ãéãïŒã¿ã€ã ã¢ãŠããããïŒ
- åªçæ§ã®ãªã颿°ããªãã©ã€ã§è€æ°å®è¡ããããšã«ããåé¡
- äžå®å®ãªåŠçæé
- ã¡ã¢ãªå ã®ãªããžã§ã¯ããžã®åç §ãæž¡ããŠå¹çåããããšãã§ããªã
- 飿ºããã·ã¹ãã ãå¥ã ã®èšèªã§å®è£ ãããŠããå Žåã倿ããæ©æ§ãå¿ èŠã§ãè³ªãæªããšæ»ã¬
- ããããæ§è³ªãå
šãéãã®ã«ééçã«åŒã³åºããšè²ã
åé¡ããã
- æè¿ã® RPC ãã¬ãŒã ã¯ãŒã¯çŸ€ïŒi.e. gRPCïŒã¯ãªã¢ãŒããªã¯ãšã¹ããšããŒã«ã«é¢æ°ã®åŒã³åºããæç¢ºã«åºå¥ããŠãã
- ãµãŒãã¹ãã£ã¹ã«ããªã®æ©æ§ãæã£ãŠãããã¬ãŒã ã¯ãŒã¯ããã
- gRPC ãªã¯ãšã¹ãã®ãã£ãã·ã¥ã£ãŠã©ããªã£ãŠããã ããïŒ
- ãããªãã¯ãª API 㯠RESTful APIãã€ã³ã¿ãŒãã«ãª API ãªã RPC ãããšããã®ãçŸç¶
- ãµãŒããŒã»ã¯ã©ã€ã¢ã³ããç¬ç«ããŠãããã€ã§ããªã => é²åæ§ã®é»å®³
- ã¯ã©ã€ã¢ã³ããå©çšããã API ã®ããŒãžã§ã³ããµãŒããŒåŽãšã©ãåæããã
- URL ã«ããŒãžã§ã³ãå«ãã
- ACCEPT ããããŒã«ããŒãžã§ã³ãå ¥ãã
- [48][49] èå³ãã
- ã¡ãã»ãŒãžãããŒã«ãŒãããããšã§éä¿¡è
ã¯åä¿¡è
ã®IPãç¥ãå¿
èŠããªããªã
- IPãå€ãããããç°å¢äžã§äŸ¿å©ãšãããã©ãããŒã«ãŒã¯ç¥ã£ãŠããå¿ èŠãããããã§ãããªã«äŸ¿å©âŠïŒ
- ã¡ãã»ãŒãžãããŒã«ãŒã«ãã£ãŠéä¿¡åŽãšåä¿¡åŽã¯è«ççã«åé¢ããã
- Kafka ã£ãŠã¡ãã»ãŒãžãããŒã«ãŒãªã®ã
- "çŽ æ©ãã¢ããªã±ãŒã·ã§ã³ã®é²åãšãé »ç¹ãªãããã€ãç®æããŸãããã"
- ã¹ã±ãŒã«ã¢ããã®åé¡ã¯ã³ã¹ãã®äžæãæ§èœã®åäžã«å¯ŸããŠæ¯äŸä»¥äžã«ãªã£ãŠããããš
- ãŸãçš®ã ã®ããã«ããã¯ã«ãããµã€ãºã2åã«ããŠãã¹ã«ãŒãããã2åã«ãªããšã¯éããªã
- ã·ã§ã¢ãŒãããã·ã³ã°ã¢ãŒããã¯ã㣠= ã¹ã±ãŒã«ã¢ãŠã
- ããŒãã£ã·ã§ãã³ã° = ã·ã£ãŒãã£ã³ã°
- 3ã€ã®ã¬ããªã±ãŒã·ã§ã³ã¢ã«ãŽãªãºã
- ã·ã³ã°ã«ãªãŒããŒ
- ãã«ããªãŒããŒ
- ãªãŒããŒã¬ã¹
- åïŒãã¹ãŠã®ã¬ããªã«ãææ°ã®ããŒã¿ãæã£ãŠããããšãã©ã®ããã«ä¿èšŒãããïŒ
- 解決çãšããŠãªãŒããŒããŒã¹ã¬ããªã±ãŒã·ã§ã³ããã
- = ãã¹ã¿ãŒã»ã¹ã¬ãŒãã¬ããªã±ãŒã·ã§ã³
- 解決çãšããŠãªãŒããŒããŒã¹ã¬ããªã±ãŒã·ã§ã³ããã
- Apache Kafka ãªã©ã®åæ£ã¡ãã»ãŒãžãããŒã«ãŒã«ããã®ä»çµããã
- DB ããšã«èšå®ã§ãããããŒãã³ãŒããããŠããããã
- PostgreSQL ã§ã¯ïŒ
- MySQL ã§ã¯ïŒ
- "éåžžã¬ããªã±ãŒã·ã§ã³ã¯ããããŠé«éã§ããå€ãã®ããŒã¿ããŒã¹ã·ã¹ãã ã¯ã倿Žããã©ãã¯ãŒã«å¯ŸããŠ1ç§ä»¥å ã«é©çšããŸãã"
- åæåã®ã¬ããªã±ãŒã·ã§ã³ãå©çšããããšã§ãã©ãã¯ãŒãæã£ãŠããããŒã¿ãææ°ã§ããããšãä¿èšŒã§ãã
- åæåã¬ããªã±ãŒã·ã§ã³ã䜿ããšãã¯éåžž1ã€ã®ãã©ãã¯ãŒã«å¯ŸããŠåæåãä»ã®ãã©ãã¯ãŒã«å¯ŸããŠéåæåã®ã¬ããªã±ãŒã·ã§ã³ã䜿ã
- éåæåã¬ããªã±ãŒã·ã§ã³ã¯ãã©ãã¯ãŒãå€ãå Žåããã©ãã¯ãŒãå°ççã«åæ£ããŠããå Žåã«å©çšãããŠãã
- åïŒæ°ãã«è¿œå ãããã©ãã¯ãŒããªãŒããŒã®ããŒã¿ã®æ£ç¢ºãªã³ããŒãæã£ãŠããããšãã©ã®ããã«ä¿èšŒã§ãããïŒ
- ããŒã¿ã³ããŒã§ã¯ãã®éã«èµ·ãã倿Žãåæ ãããªã
- ããŒãã«ããã¯ããã°ããŠã³ã¿ã€ã ãçºçãã
- 解決ç
- ãªãŒããŒãåã£ãèªèº«ã®ã¹ãããã·ã§ãããã³ããŒ
- ã¹ãããã·ã§ããã¯ããŠã³ã¿ã€ã ãªãã§åãã
- ãã®åŸã¹ãããã·ã§ãããåã£ãæç¹ä»¥éã®å€æŽããªãŒããŒã«èŠæ±ãã
- ãªãŒããŒãåã£ãèªèº«ã®ã¹ãããã·ã§ãããã³ããŒ
- åïŒããŒãã¯ã©ããã®ã¿ã€ãã³ã°ã§å¿ ãæ»ã¬ãããªãŒããŒããŒã¹ã®ã¬ããªã±ãŒã·ã§ã³ã®é«å¯çšæ§ãéæããã«ã¯ã©ãããããããïŒ
- ãã©ãã¯ãŒãæ»ã¬å Žå
- ãã©ãã¯ãŒã埩垰ããããšã«ãã©ã³ã¶ã¯ã·ã§ã³ãã°ããæåŸã«åŠçãããã©ã³ã¶ã¯ã·ã§ã³ãæ¢ãã以éã®å€æŽããªãŒããŒã«èŠæ±ãã
- ãã£ããã¢ãããªã«ããª
- ãªãŒããŒãæ»ã¬å Žå
- ãã©ãã¯ãŒããªãŒããŒã«ææ ŒããïŒãã§ã€ã«ãªãŒããŒïŒ
- ã¯ã©ã€ã¢ã³ãã®æžã蟌ã¿å ãæ°ãããªãŒããŒã«åãã
- å€ããªãŒããŒã埩垰åŸã«èªèº«ããã©ãã¯ãŒãšçè§£ã§ããããã«ãã
- ãã§ã€ã«ãªãŒããŒã«ãããåé¡
- éåæã¬ããªã±ãŒã·ã§ã³ã䜿ã£ãŠãããšãã«ãææ ŒãããªãŒããŒãå€ããªãŒããŒã®é害ããæç¹ãŸã§ã®ãã¹ãŠã®ã¡ãã»ãŒãžãåä¿¡ããŠããªãå¯èœæ§ããã
- åä¿¡ãããªãã£ãããŒã¿ãç Žæ£ããéžæè¢ãããããRedis ãªã©å€éšã®ã¹ãã¬ãŒãžãšåæçã«ããŒã¿ãæ±ãããã·ã¹ãã ã®å Žåãããããšã®ããŒã¿ã®æŽåæ§ã倱ãããå±éºããã
- ã¹ããªãããã¬ã€ã³
- ãªãŒããŒãèœã¡ãŠãããšå€æããã¿ã€ã ã¢ãŠãæéãèšå®ããã®ãé£ããåé¡
- ãªãŒããŒææ Œã®ã³ã¹ããäžããããã°ã¿ã€ã ã¢ãŠãæéçãããŠã¬ã³ã¬ã³ææ Œãããéçšãã§ããã
- éåæã¬ããªã±ãŒã·ã§ã³ã䜿ã£ãŠãããšãã«ãææ ŒãããªãŒããŒãå€ããªãŒããŒã®é害ããæç¹ãŸã§ã®ãã¹ãŠã®ã¡ãã»ãŒãžãåä¿¡ããŠããªãå¯èœæ§ããã
- ãªãŒããŒããã¹ãŠã®æŽæ°ç³»ã¯ãšãªããã°ã«æ®ãããã©ãã¯ãŒã«æµã
- éãããæ¹ã仿¥ã§ã¯å¥œãŸããŠãã
- NOW() ãšã RAND() ã厩å£ãã
- æ¢åã®ããŒã¿ã«äŸåããã¯ãšãªã®å Žåãå®è¡é åºãå£ãããšçµæãããŒãéã§å€ãã£ãŠããŸã
- MySQL 5.1 以åã§æ¡çšãããŠãã
- ä»ã¯ã¹ããŒãã¡ã³ãäžã«éæ±ºå®æ§ããããåŠãã«ãã£ãŠæåãå€ããŠãã
- ããŒã¿ããŒã¹ãžã®æžã蟌ã¿ããã¹ãŠãã°ãšããŠæã£ãŠããã®ã¯ã¹ããŒãã¡ã³ãããŒã¹ã®ã¬ããªã±ãŒã·ã§ã³ãšåãã§ã¯ïŒ
- ã¹ããŒãã¡ã³ãã§ã¯ãªããã£ãšäœã¬ãã«ãªãã°ã§ããããšããã€ã³ãã£ãœã
- PostgreSQL ã§æ¡çšãããŠãã
- ãã°ãããªãäœã¬ãã«ãªåœä»€ã«ãªã£ãŠããã®ã§ããŒãžã§ã³ã¢ããã«æ³šæããå¿
èŠããã
- ãªãŒããŒããã©ãã¯ãŒãå¥ã ã®ããŒãžã§ã³ã«ããããšãèš±ãããªã
- ã¬ããªã±ãŒã·ã§ã³ãã¹ãã¬ãŒãžãšã³ãžã³çšã«ç¬ç«ãããã°ã®ãã©ãŒããããäœ¿ãææ³
- ã¬ããªã±ãŒã·ã§ã³ãã°ã®ã¹ãã¬ãŒãžãšã³ãžã³ã«å¯ŸããäŸåããªããªã
- ã¹ãã¬ãŒãžãšã³ãžã³ãç©ççãšã¿ãªããšãã®ãã°ã¯è«çç => è«çãã°ãšåŒã°ãã
- ãã°ã¯è¡ãåäœãšããŠããŒãã«ãžã®æžã蟌ã¿ãèšè¿°ããã¬ã³ãŒãã®äžŠã³
- è€æ°ã®æŽæ°ãå«ãã¯ãšãªã®å ŽåãæŽæ°ãããåè¡ã«å¯Ÿããã¬ã³ãŒããšãã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ãããã«å¯Ÿå¿ãããã°ãèšé²ããã
- MySQL ã® binlog ã¯ãã®æ¹åŒ
- ã¹ãã¬ãŒãžãšã³ãžã³ãšåãé¢ãããŠããã®ã§ãªãŒããŒãšãã©ãã¯ãŒã§å¥ã ã®ããŒãžã§ã³ãã¹ãã¬ãŒãžãšã³ãžã³ã䜿ãããšãã§ãã
- ããªã¬ã䜿ã£ãŠããŒã¿ã®å€æŽãã¢ããªã±ãŒã·ã§ã³ããã»ã¹ããèªã¿åãå¿ èŠãªå€æŽãå ããäžã§ã¬ããªã±ãŒã·ã§ã³ãè¡ã
- é»éè¡ã£ãœã
- éåæã¬ããªã±ãŒã·ã§ã³ãé å»¶ããããšã§èŠããããŒã¿ã«å·®ãçãããã®ã®ãåæ ãåŸ ãŠã°ã¡ãããšçµæãèŠãã => çµææŽåæ§(eventual consistensy)
- read-after-write (read-your-write) äžè²«æ§
- èªèº«ã®æŽæ°ãããŒãžæŽæ°æã«åæ ãããŠããããšãä¿èšŒããäžè²«æ§
- ãªã¯ãšã¹ãã®éœåºŠã«å¥ã
ã®ãã©ãã¯ãŒãåç
§ãããšæãããã®ãŒã£ãŠå€ãããŒã¿ãèŠããŠããŸãå±éºããã
- ã¢ããããã¯ãªèªã¿åãã«ãã£ãŠãã®ç°åžžãèµ·ããªãããšãä¿èšŒããå¿
èŠããã
- é£ç¶ããèªã¿åãã«ãããŠæéãå·»ãæ»ããªãããšãä¿èšŒãã
- ã¢ããããã¯ãªèªã¿åãã«ãã£ãŠãã®ç°åžžãèµ·ããªãããšãä¿èšŒããå¿
èŠããã
- äžè²«æ§ã®ãããã¬ãã£ãã¯ã¹èªã¿åã
- ããé çªã§è¡ãããäžé£ã®æžã蟌ã¿ã«ã€ããŠããããæ£ããé åºã§ããããèŠããããšãä¿èšŒãã
- ã·ã£ãŒãã£ã³ã°ãã DB ã§åé¡ã«ãªã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®ååšæçŸ©
- ã¢ããªã±ãŒã·ã§ã³éçºè ãã¬ããªã±ãŒã·ã§ã³ã®åŸ®åŠãªåé¡ãæ°ã«ããå¿ èŠãªããåçŽã«ããŒã¿ããŒã¹ãé©åã«åŠçãè¡ããã®ãšä¿¡ããããããã«ããããš
- ãŠãŒã¹ã±ãŒã¹ã¯éå®ç
- ãã«ãDCã®äŸ
- ã¯ã©ã€ã¢ã³ãã®æŽæ°ãäžæçã«åãä»ããããŒã«ã«DBããªãŒããŒãšã¿ãªããã¿ãŒã³
- ãªãã©ã€ã³ã§ãæŽæ°ãåãä»ããã«ã¬ã³ããŒ
- Google Docs ã¿ãããªãã€
- æžã蟌ã¿ã®è¡çªãã©ããããããæå€§ã®åé¡
- ããã¬ã³ãŒããžã®æžã蟌ã¿ããã³ãã«ãããªãŒããŒãåºå®ããããšã§è¡çªãåé¿ãã
- æžã蟌ã¿ã®ã¿ã€ã ã¹ã¿ã³ããæ¯èŒããŠå€§ããæ¹ãåè
ãšããŠæ±ãé©çšãã
- æåŸã®æžã蟌ã¿ãåããã = Last Write Wins (LWW)
- ãªã©
- ãã«ããªãŒããŒã¬ããªã±ãŒã·ã§ã³ããŒã«ã§ã¯è¡çªã解決ããããžãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã§ãããããã«ãªã£ãŠã
- ãããã°ã®æž©åºã«ãªãããã
- Amazon ã¯ãã®éšåã®ãã°ã§ã«ãŒãããã®åé€ãåæ ãããªãã±ãŒã¹ãèµ·ãã
- Google Docs ã®è¡çªè§£æ±ºã¢ã«ãŽãªãºã ïŒæäœå€æ(Operational transformation)
- æãäžè¬çãªã¬ããªã±ãŒã·ã§ã³ããããžãŒã¯ All-to-All
- MySQL ã¯ããã©ã«ãã§ã¯åŸªç°åããããžãŒã®ã¿ããµããŒã
- ã¹ããã³ã°ããªãŒã£ãœã話ãåºãŠããïŒç¡éã«ãŒãåé¿ïŒ
- è¡çªæ€åºã«é¢ããŠã¯å€ãã®ããŒã«ã貧匱ãªã®ã§é 匵ãå¿ èŠããã
- å
šã¬ããªã«ã«æžã蟌ã¿ãå
šã¬ããªã«ããååŸãã
- 倱æã¯ç¡èŠããå€ãããŒã¿ãååŸãããšãã¯æ°ããããŒãžã§ã³çªå·ãæã€ãã®ãçãšãã
- Dynamo ãšãããã£ãŠãã¹ã¿ã€ã«
- ææ°ããŒã¿ãå
šã¬ããªã«ã«åæ ããã2ã€ã®ææ³
- ããŒã¿æ¬ æã®è£ä¿®ã¯ã¢ããªã±ãŒã·ã§ã³åŽãååŸã«æ°ã¥ããéã«æŽæ°ãè¡ãææ³ (èªã¿åã修埩)
- DB åŽã§è£ä¿®ããããã®ããã¯ã°ã©ãŠã³ãããã»ã¹ãåãããŠããææ³ããã (åãšã³ããããŒåŠç)
- (èªã¿åã修埩ãšèªã¿åºã修埩ãšã§è¡šèšããããã)
- å
šã¬ããªã«æ° n, èªã¿èŸŒã¿ã»æžã蟌ã¿ããããã«ã€ããŠæåãšã¿ãªãããŒãæ°ã r, w ãšçœ®ãããããã®å€ã«åºã¥ããŠèªã¿æžããèšå®ããããæ¹: ã¯ãªã©ã èªã¿åãã»æžã蟌ã¿
- Dynamo ã§ã¯ãããã®å€ãèšå®ã§ãã
- äžè¬çãªéžæè¢ãšã㊠n ã奿°åïŒç¹ã« 3 ã 5)ã«ããw = r = (n+1)/2 ã«ããæ¹æ³ããã
- çµå± Dynamo ã¹ã¿ã€ã«ã§ãè¡çªã¯èµ·ããã®ã§ããæãã«è§£æ±ºããå¿
èŠããã
- äŸïŒåãããŒã«å¯ŸããŠè€æ°ã®ã¯ã©ã€ã¢ã³ããã䞊è¡ã«ãªã¯ãšã¹ããè¡ããããšã
- è€æ°ã¯ã©ã€ã¢ã³ããã䞊è¡ã«ãªã¯ãšã¹ããããç°å¢ã«ãããŠãLWW ã«ããã Last ããªã¯ãšã¹ãã®é åºã«ããã Last ã§ããããšãä¿èšŒã§ããªã
- åçŽã«ã¿ã€ã ã¹ã¿ã³ããèŠãŠ Last ãåãããããšãã劥åç¹
- ããŒã¿ã絶察倱ããããªã => LWW ã¯å³ãã
--
- partitioning -> for scalability
- åæçšéã§ãããŒãã£ã·ã§ãã³ã°ããããšã¯ãã
- å€§èŠæš¡ãªããŒã¿ã»ãããã©ãããŒãã£ã·ã§ãã³ã°ãããã ã£ããã©ãã€ã³ããã¯ã¹ä»ãããã ã£ã
- æ®éããŒãã£ã·ã§ãã³ã°ããåããŒãã£ã·ã§ã³ã¯å¥ã ã®ããŒãã«é 眮ããã
- å³6-1 ã¯ããªãã£ãããã¯ã®ãªã RAID 5 ã£ãœã
- ã¬ããªã±ãŒã·ã§ã³ã«ã€ããŠè¿°ã¹ãããšïŒ5ç« ïŒã¯ãã¹ãŠããŒãã£ã·ã§ãã³ã°ã«ãçããåœãŠã¯ãŸã
- 倧éã®ããŒã¿ãããŒãã£ã·ã§ãã³ã°ãããšããåã¬ã³ãŒãã¯ã©ã®ããŒãã§ä¿ç®¡ãã¹ãïŒ
- ããŒãã£ã·ã§ãã³ã°ã®ç®æšïŒ ããŒã¿ãšã¯ãšãªã®è² è·ãããŒãéã§åäžã«åæ£ãããããš
- åããããç¶æ ïŒ Skew
- åã£ãŠå¿ãããªã£ãŠããããŒãïŒ Hot Spot
- ã©ã³ãã ã«ã¬ã³ãŒããããŒãã«å
¥ããŠããããšã§åçã«åæ£ã§ããããã¯ãšãªãããšãã«ã©ã®ããŒã¿ãã©ã®ããŒãã«ãããããããªãããå
šéšã«æããå¿
èŠãããå³ãããã©ãããïŒ
- ã€ã³ããã¯ã¹ãäœãæ¹æ³ïŒæåã»èªåïŒ
- Bigtable, HBase, RethinkDB, MongoDB
- ããŒãã®å¢çãæ¥ä»ã«ãããšæžã蟌ã¿ã1ã€ã®ããŒãã«éäžããããšã«ãªã
- äžæãããšãã£ãŠåæ£ããããšè¯ã
- é£ç¶ããããŒã¿ãé£ç¶ããŠé 眮ãããã®ã§ç¯å²éžæã«åŒ·ã
- ã€ã³ããã¯ã¹ãäœã£ãäžã§ããŒã®ããã·ã¥ã«ãã£ãŠå©çšããããŒããšèšé²ããäœçœ®ã決å®ããæ¹æ³
- ããŒãã£ã·ã§ã³éã§åçã«ããŒã忣ããããã
- ã³ã³ã·ã¹ãã³ãããã·ã¥
- å¢çãåçã«èšãããäŸãã°ããŒãã®IDãããŒã¿ã®ããŒãšåæ§ã«ããã·ã¥åããŠå¢çãšãããšã
- é£ç¶ããããŒã¿ãé£ç¶ããŠé
眮ãããªã
- ç¯å²éžæã®ã¯ãšãªã¯ãã¹ãŠã®ããŒãã£ã·ã§ã³ã«å¯ŸããŠå®è¡ããã
- è€åã€ã³ããã¯ã¹ã䜿ããå
é åã®ããã·ã¥å€ã§ããŒãã£ã·ã§ã³ã決å®ã以éã®åã®å€ã¯ SSTable ãšããŠæ ŒçŽããæ¹æ³
- åããŒãã£ã·ã§ã³ã«ããããŒã¿ã«ã€ããŠã¯ç¯å²éžæã容æã«ã§ãã
- åããŒãã£ã·ã§ã³ããŠãŒã¶ãŒã衚ããããŒãã£ã·ã§ã³äžã®ããŒã¿ã¯æ¥ä»é ã«ãªã£ãŠãããã¿ãããªæã
- ã€ã³ããã¯ã¹ãäœãæ¹æ³ïŒæåã»èªåïŒ
- ããŒã¿ãé©åã«åæ£ã§ããŠããããã¹ãããã¯ã§ãã
- i.e. ããããŒã«å¯Ÿãã倿Žããã®ãããéçºçãã
- ããããã¯ãŒã¯ããŒãã«ã€ããŠã¯ããŒã¿åŽã§èªåçã«å¯ŸåŠããããšãã§ããªãã®ã§ã¢ããªã±ãŒã·ã§ã³åŽã§äœãšãããæããã
- äŸãã°ã¢ããªã±ãŒã·ã§ã³åŽã§ããŒã«ä¹±æ°ãä»äžããŠç¹å®ããŒãžã®åŠçã忣ãããããšãã§ãããã©èªã¿èŸŒã¿ã倧å€ã«ãªã
- å°æ¥çã«ããŒã¿ããŒã¹ãããæãã«ãã£ãŠãããã§ãããâŠ
- ã¬ã³ãŒãããã©ã€ããªããŒã«ãã£ãŠã®ã¿ååŸããããªã楜ã ãã©ã»ã«ã³ããªã€ã³ããã¯ã¹ã䜿ãããå Žåã¯ãã£ãšè€éã«ãªã
- ã»ã«ã³ããªã€ã³ããã¯ã¹ã¯ Solr ã Elasticsearch ãªã©ã®ååšæçŸ©ããšã¯ã©ãããããšïŒ
- ã»ã«ã³ããªã€ã³ããã¯ã¹ãšããŠäœ¿ãããŠãããšããããšïŒ
- ã»ã«ã³ããªã€ã³ããã¯ã¹ãæã€ã·ã¹ãã ã®ããŒãã£ã·ã§ãã³ã°æ¹æ³ã¯å€§ããåããŠ2ã€
-
- ããã¥ã¡ã³ãããŒã¹ã®ããŒãã£ã·ã§ãã³ã°
- åããŒãã£ã·ã§ã³ãèªèº«ã ãã察象ç¯å²ãšããã»ã«ã³ããªã€ã³ããã¯ã¹ïŒããŒã«ã«ã€ã³ããã¯ã¹ïŒãæã€
- MongoDB, Cassandra, Elasticsearch ãªã©ã§äœ¿ãããŠãã
- ã»ã«ã³ããªã€ã³ããã¯ã¹ã®éšåã ããæ€çŽ¢æ¡ä»¶ã«ãããšçµå±å šéšã®ããŒãã£ã·ã§ã³ã«ã¯ãšãªãæµãå¿ èŠããã倧å€
-
- èªããŒã¹ã®ããŒãã£ã·ã§ãã³ã°
- ã»ã«ã³ããªã€ã³ããã¯ã¹ã®åããŒã«ã€ããŠãåããŒãã£ã·ã§ã³ã決ãŸã£ãå¢çãåãæã€çšã«ã€ã³ããã¯ã¹ãæã€
- ã€ã³ããã¯ã¹ãä»ã®ããŒãã£ã·ã§ã³ã®ã¬ã³ãŒããå«ãããïŒã°ããŒãã«ã€ã³ããã¯ã¹ïŒ
- æžã蟌ã¿ãè€æ°ã®ããŒãã£ã·ã§ã³ã«åœ±é¿ãåãŒãããäœéã«ãªã
-
- ã©ããããŒãã£ã·ã§ã³ãæ»ãã ã誰ãããã®åœ¹å²ãåŒãç¶ãã ããããã¹ãããã«ãªããªãããååé ãããããªããšãããªããã©ãããŒã¿ãé 眮ããïŒ
-
- ããã·ã¥å€ã®å°äœã§æ±ºãã
- ãªãã©ã³ã·ã³ã°æã«åããå¿ èŠã®ããããŒã¿å€ããŠæ»ã¬
-
- 1ããŒããå€ãã®ããŒãã£ã·ã§ã³ãæã€ããã«ããã¬ã³ãŒãã§ã¯ãªãããŒãã£ã·ã§ã³ãå¿ èŠã«å¿ããŠåãã
- ããŒãã£ã·ã§ã³æ°ã¯åºå®ã§ã1ããŒããæã€ããŒãã£ã·ã§ã³æ°ãå€ãã
- Elasticsearch ããã
- ããŒãã£ã·ã§ã³ããšã«éçšã³ã¹ãã¯ãããã®ã§ãããŸãããããããŒãã£ã·ã§ã³äœããšæ»ã¬
- ããŒãã£ã·ã§ã³ã¯ããŠã³ã¿ã€ã ãªãã«å¢ãããã®ã㪠:thinking_face:
- ããŒã¿ãµã€ãºã®å€åã倧ããç¶æ³ã§ã¯é©åãªããŒãã£ã·ã§ã³æ°ã®å€åãæ¿ããã®ã§é£ãã
-
- åçãªããŒãã£ã·ã§ãã³ã°
- BããªãŒã®ãã©ã³ã·ã³ã°ã¿ãããªããšãããŒãã£ã·ã§ãã³ã°ã§ãã
- ããŒã¿ã®éã«å¿ããŠé©åœãªããŒãã£ã·ã§ã³ã®ãµã€ãºã«ããããšãã§ãã
- MongoDB, HBase, RethinkDB
- ããŒã¿ãµã€ãºã ãã§ãªãã©ã³ã·ã³ã°ãããšããŒããšã®åŠçéã®åãã«å¯Ÿå¿ã§ããªãã
-
- åããŒããæã€ããŒãã£ã·ã§ã³æ°ãåºå®ã«ããããŒãã墿žããã
- ããŒãã远å ãããæ¢åã®ããŒãã«ããããŒãã£ã·ã§ã³ãåå²ããçæ¹ããããæãã§ãã
- Cassandra ã®åããŒãã®ããŒãã£ã·ã§ã³æ°ã¯256ãããã©ã«ãïŒãããããµã€ãºæãªã®ã
- ãªãã©ã³ã·ã³ã°ã¯è² è·ãé«ã圱é¿ç¯å²ã倧ããã®ã§èªååãããšã«ã¹ã±ãŒãé害ãæããæåãè¯ãã®ã§ã¯
- ãã®ãªã¯ãšã¹ãã¯èª°(ã©ã®IP)ã«éãã¹ãïŒ -> ãµãŒãã¹ãã£ã¹ã«ããªã®åé¡
- ããŒãã£ã·ã§ã³ã®å²åœã«é¢ããæ
å ±ã誰ãæã€ã
- ã¯ã©ã€ã¢ã³ããåããŒããproxy
- ã©ããã£ãŠããŒãã£ã·ã§ã³ã®å²åœãå€ãã£ãããšãç¥ãã
- ããŒãã£ã·ã§ã³ã®å²åœã«é¢ããæ
å ±ã誰ãæã€ã
- ããŒãã£ã·ã§ã³ãšããŒãã®ãããã³ã°ã管çãããµãŒãã¹ã䜿ã
- i.e. ZooKeeper
- ZooKeeper ã«ãããã³ã°æ å ±ãä¿åããã«ãŒãã£ã³ã°å±€ïŒProxyïŒã«å€åãéç¥ãã
- MongoDB ã¯ç¬èªã«äŒŒãä»çµã¿ãå®è£ ããŠããïŒconfig server, mongosïŒ
- ã©ããã®ããŒãã«ãšããããåãåãããŠãééã£ãŠããæ£ãããªã¯ãšã¹ãå
ãæããŠããã
- Cassandra ã¯ãã
- èªåã§ãªãã©ã³ã·ã³ã°ãè¡ããªããªãã«ãŒãã£ã³ã°å±€ã決ãŸã£ããããã³ã°æ å ±ãæã€ã ãã§è¯ãã·ã³ãã«
- Envoy ã¯ã©ãããæãã§ãµãŒãã¹ãã£ã¹ã«ããªããã£ãŠããã ããïŒ
- ããŒãã£ã·ã§ãã³ã°ãå¿
èŠã«ãªãã®ã¯åäžã®ãã·ã³ã§ä¿åã»åŠçãããã®ãçŸå®çã§ãªãã»ã©ã®ããŒã¿ãããå Žå
- å ·äœçã«ã¯ã©ãããããªãã ãã
- 2ã€ã®ããŒãã£ã·ã§ãã³ã°ã¢ãããŒã
- ããŒã®ç¯å²ã«ããããŒãã£ã·ã§ãã³ã°ã§ã¯åçã«ããŒãã£ã·ã§ã³ãå²ã£ãŠããã®ãäžè¬ç
- ããã·ã¥ããŒãã£ã·ã§ãã³ã°ã§ã¯ããŒãã£ã·ã§ã³æ°ãåºå®ããŠããŒãã墿žãããã®ãäžè¬ç
- ã»ã«ã³ããªã€ã³ããã¯ã¹ã®2ã€ã®ãã¿ãŒã³
- ããã¥ã¡ã³ãããŒã¹ïŒããŒã«ã«ã€ã³ããã¯ã¹ïŒ
- èªããŒã¹ïŒã°ããŒãã«ã€ã³ããã¯ã¹ïŒ
- ã¯ãšãªã®ã«ãŒãã£ã³ã°
--
- "ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®èªã¿æžããè«ççãªåäœãšããŠãŸãšããæ¹æ³"
- 1åäœã¯æåïŒã³ãããïŒã倱æïŒããŒã«ããã¯ïŒããåããªã
- çµæãã¢ããªã±ãŒã·ã§ã³ã¯éšåçãªå€±æãèæ ®ããããšãªãã·ã³ãã«ã«å詊è¡ã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã®ããã°ã©ãã³ã°ã¢ãã«ãã·ã³ãã«ã«ããããšãç®çãšããŠçãŸãã
- (ravelll) 確ãã«ããŒã¿ãæ£ããä¿åã§ããããšã¯ã¢ããªã±ãŒã·ã§ã³ã®æ¬è³ªã§ã¯ãªãããã§ãDB åŽã§æ ä¿ãããŠããã®ãèªç¶ãã
- ãã©ã³ã¶ã¯ã·ã§ã³ãäžé·äžçãããå Žåã«ãã£ãŠã¯ãã©ã³ã¶ã¯ã·ã§ã³ãæäŸããªãã»ããè¯ãå Žåããã
- ACID = ãã©ã³ã¶ã¯ã·ã§ã³ãä¿èšŒããå®å
šæ§
- Atomicity - ååæ§
- Consistency - äžè²«æ§
- Isolation - å颿§
- Durability - æ°žç¶æ§
- ACID ã®å®è£ 㯠DB ããšã«éã
- ACID <=> BASE
- Basically Available
- Soft state
- Eventual consistency
- Atomicity
- DB ããããã©ã³ã¶ã¯ã·ã§ã³ã®åŠç以åãå®äºåŸã®ç¶æ
ããæããªãæ§è³ª
- äœããã®èŠå ã§ã³ãããã倱æããéã«ãã©ã³ã¶ã¯ã·ã§ã³ãäžæãéäžãŸã§è¡ããã倿Žãå šãŠç Žæ£ã§ããã®ã倧äº
- Abortability ã®ã»ããè¯ãã£ããã§ã¯ããšãã説ã
- DB ããããã©ã³ã¶ã¯ã·ã§ã³ã®åŠç以åãå®äºåŸã®ç¶æ
ããæããªãæ§è³ª
- Consistency
- ã¢ããªã±ãŒã·ã§ã³ãããŒã¿ã«å¯ŸããŠæã€äžè²«ããŠããã¹ãã«ãŒã«ã«åŸãããã«ããŒã¿ãä¿æãããããš
- ACID ã®äžã§ããã ãã¯ã¢ããªã±ãŒã·ã§ã³åŽã§æ ä¿ãã¹ãç¹æ§
- èªååããã®ããã«å ¥ã£ãŠãã ãã§ã¯ããšãã説ã
- Isolation
- 䞊è¡ããŠå®è¡ããããã©ã³ã¶ã¯ã·ã§ã³éã®åé¢ => ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®éäžã®ç¶æ ãèŠããªã
- åãããŒã¿ã䞊è¡ã«åç §ããå Žåã«ããããã®ãã©ã³ã¶ã¯ã·ã§ã³ãçŽååãããšããšåŠççµæãåãã«ãªãããæ¯ãèãããšãä¿èšŒããæ§è³ª
- Serializability ãšã
- å®éã«ã¯ Serializable ã«ãªãã»ã©ã®ä¿èšŒã¯ããã©ãŒãã³ã¹ã®åé¡ãããããªãããšãå€ã
- MySQL ã§æã峿 Œãªãã©ã³ã¶ã¯ã·ã§ã³åé¢ã¬ãã«ã¯ Serializable
- Durability
- ããŒã¿ãã¡ãããšãã£ã¹ã¯ã«æžã蟌ãŸããããšãä¿èšŒããæ§è³ª
- ãã£ã¹ã¯äžã®ããŒã¿æ§é ç Žæãã«ããŒãã write-ahead ãã°ã®çšæãããã«å«ãŸãã
- ç¹å®æ°ä»¥äžã®ã¬ããªã«ãžã®ã¬ããªã±ãŒã·ã§ã³ãå®äºãããŸã§ãæãå Žåããã
- å®å šãª durability ã¯ååšããªã
- ããŒã¿ãã¡ãããšãã£ã¹ã¯ã«æžã蟌ãŸããããšãä¿èšŒããæ§è³ª
- ãã©ã³ã¶ã¯ã·ã§ã³ã®å颿§ã¯ã€ã³ããã¯ã¹ãå æ¬ãã
- ãªãŒããŒã¬ã¹ã¬ããªã±ãŒã·ã§ã³ã¯ Atomicity ãç¡ããã®ãå€ã
- ã¢ããªã±ãŒã·ã§ã³ãã«ããŒãã
- è€æ°ã®ã¬ããªã«ããå€ãèªãã§ææ°ã®ãã®ãåã Dynamo Style ãšã
- ActiveRecord ãªã©ã® ORM ã¯äžæãããã©ã³ã¶ã¯ã·ã§ã³ããªãã©ã€ããŠãããªããŠæ®å¿µ
- ãšã¯èšãèªåãªãã©ã€ã¯å¿
ããããã¹ããã®ã§ã¯ãªã
- ã³ããããæ¿èªãããããšã DB åŽãè¿ãããšã«å€±æããããªãã©ã€ã2éæŽæ°ã«ãªã
- ãšã©ãŒã®åå ãéè² è·ãªãèªåãªãã©ã€ã¯åé¡ãå éãããŠããŸã
- Exponential Backoff => ãªãã©ã€ãææ°é¢æ°çã«äº€ä»£ãããŠããã¢ã«ãŽãªãºã
- ãšã¯èšãèªåãªãã©ã€ã¯å¿
ããããã¹ããã®ã§ã¯ãªã
- ãã©ã³ã¶ã¯ã·ã§ã³ãå®å
šã«çŽååå¯èœã«ããããšã諊ããããš = ãã©ã³ã¶ã¯ã·ã§ã³ã®äžŠè¡æ§ã«ãããåé¡å
šãŠã®è§£æ±ºãæŸæ£ããããšã§ã¯ãªã
- 䞊è¡ã®åé¡ã®äžéšããä¿è·ãã
- Read Committed
- Read (Only) Committed ãšèãããšçè§£ãããã
- æãåºæ¬çãªã¬ãã«ã®ãã©ã³ã¶ã¯ã·ã§ã³åé¢
- ã¬ã³ãŒãããã¯ã®æäŸ
- dirty read/write ã®é²æ¢
- Atomicity
- ã¹ãããã·ã§ããåé¢
- pg, MySQL ã§ã¯ "Repeatable Read" ã ãã© Oracle ã§ã¯ "Serializable"
- (ravelll) å³7-6ã®åé¡ããããé²ãã®ã¯ã¢ããªã±ãŒã·ã§ã³åŽã®è²¬åãªæ°ããããã©éãïŒ
- Consistency ãä¿èšŒããããã®ä»çµã¿
- äŸïŒããã¯ã¢ããã®æäžã«ãã©ã³ã¶ã¯ã·ã§ã³ãã³ããããããããã¯ã¢ããæžã¿ã®ããŒã¿ãšããããããã¯ã¢ããããããŒã¿ãšã§äžè²«æ§ãæãªãããŠããŸã
- ã¹ãããã·ã§ããåé¢ïŒããŒã¿å
šäœã§äžè²«æ§ã®ããæåŸã®ã¹ãããã·ã§ãããå©çšããïŒã§å¯Ÿå¿ãã
- å®éã«ã¹ãããã·ã§ãããäœãããã§ã¯ãªããåãã©ã³ã¶ã¯ã·ã§ã³IDããèªèº«ã®ãã©ã³ã¶ã¯ã·ã§ã³ããèŠããã¹ãããŒã¿ãå°ã
- ã¹ãããã·ã§ããåé¢ïŒããŒã¿å
šäœã§äžè²«æ§ã®ããæåŸã®ã¹ãããã·ã§ãããå©çšããïŒã§å¯Ÿå¿ãã
- ãªããžã§ã¯ã = ãã©ã³ã¶ã¯ã·ã§ã³å ã§è¡ãããã¯ãšãª1ã€ã®å 容
- (ravelll) ããã§èšã "ããŒãž" ã¯äœãæããŠããïŒããŒãžã³ã°ã®ããŒãžïŒ
- Skew ãããã¹ãããã䌎ãã¯ãŒã¯ããŒãã®ããšãæãã ãã§ãªãã¿ã€ãã³ã°ã®ç°åžžãæã
- skew: æªãã ãåŸãã ãªã©
- SQL æšæºã®ãã©ã³ã¶ã¯ã·ã§ã³åé¢ã¬ãã«ã«ã€ããŠã¯è«æäžã§å®çŸ©ããªãããŠããããããã«åŸã£ãŠããªãå®è£ ãå€ã
- "ååŸããããŒã¿ã«æãå ããŠæŽæ°" ã¯äžŠè¡æ§ã®åé¡ã«äŒã
- Atomic ãªæŽæ°ïŒåªç㪠Update ãšãïŒã䜿ãã°åé¿ã§ãã
- (ravelll) [38] ã®æç« æ°ã«ãªã
- ORM ã§ read-modify-write ãµã€ã¯ã«ãšãªãã¯ãšãªãæžãããããªã£ãŠããŸãåé¡ã«ã€ããŠ
- æç€ºçãªããã¯ãåã£ãŠ read-modify-write ããæ¹æ³ããã
- ããã¯ãåãã³ãŒããæžãæŒããªãããã«ããã®é£ããã
- DB åŽã§æŽæ°ã®ãã¹ããèªåæ€åºã§ãã
- pg ã®ãªããŒã¿ãã«ãªãŒãã¯æ€åºã§ããïŒMySQL ã¯ã§ããªãïŒ
- UPDATE æã® Where å¥ã«æŽæ°å¯Ÿè±¡ã®ãã£ãŒã«ããæŽæ°åã®å€ã§æå®ããããšã§åé¿ããæ¹æ³
- compare-and-set
- ã¹ãããã·ã§ããããã®èªã¿åããå¯èœã ãš where å¥ãåžžã« true ã«ãªã£ãŠããŸãã®ã§ãã¡
- æžã蟌ã¿ã¹ãã¥ãŒ
- pg ã®ãªããŒã¿ãã«ãªãŒããæ€åºã§ããªã
- ããªã¬ãŒã§è§£æ±ºã§ãããã
- (ravelll) çŸå®çã«ã¯ã§ããããã¯ãåããªã®ããªã
- (ravelll) äŒè°å®€ã®äŸã® "äžã®ã¯ãšãªã0ãè¿ããå Žåã®åŠç" ã®åå²ãå®çŸããäœãã端æãããŠããïŒ
- (ravelll) æžã蟌㿠-> èªã¿èŸŒã¿ã®é ã«ããŠåŸãããã©ã³ã¶ã¯ã·ã§ã³ãäžæ/ã³ãããã®å€æãããæ¹æ³ã§ãã¹ãããã·ã§ããåé¢ã®å Žåã¯ãã¡ãã
- pg ã®ãªããŒã¿ãã«ãªãŒããæ€åºã§ããªã
- ãã¡ã³ãã
- ãããã©ã³ã¶ã¯ã·ã§ã³ã®æžã蟌ã¿ãä»ã®ãã©ã³ã¶ã¯ã·ã§ã³äžã®å¥ã®ã¯ãšãªã®çµæãå€ãã广
- ããã¯ãæããã¹ãã¬ã³ãŒããç¡ãã®ãåé¡ãªãããã¯ãåããã ãã®ããŒã¿ãäœã£ãŠããã°ããã®ã§ã¯ïŒãšããçºæ³
- äŒè°å®€ã®äŸã ãšãäºçŽã®ã¬ã³ãŒããäœã£ãŠãããã§ãªããéžæè¢ã®ã¬ã³ãŒããäœã£ãŠããããã select for update ãããããšã§ããã¯ãåããããã«ãªã
- äžŠè¡æ§å¶åŸ¡ã®ä»çµã¿ãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã¢ãã«ã«æŒããããšãæå³ããã®ã§ããµã
- Serizlizable ã«ããã»ãããã·
- 決å®ç => å ¥åã«å¯ŸããŠåºåãäžæã«å®ãŸããã®
- 䞊è¡ããŠå®è¡ããããã©ã³ã¶ã¯ã·ã§ã³ããããã®çµæãã1ã€ãã€ããããå®è¡ãããšããšåãã«ãªãããšãä¿èšŒãã
- æžã蟌ã¿ã¹ãã¥ãŒãå«ããå šãŠã®ã¬ãŒã¹æ¡ä»¶ãåé¿ã§ãã
- å®çŸæ¹æ³
- æ¬åœã«1ã€ãã€ãã
- 2 Phase Lock (2çžããã¯)
- çŽååå¯èœãªã¹ãããã·ã§ããåé¢ãè¡ã
- (1.) æ¬åœã«1ã€ãã€ãã
- çŸå®çã«ãªã£ãèæ¯
- "RAM å®ããªã£ãŠå®ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡ã«å¿ èŠãªããŒã¿ã»ãããå šéšã¡ã¢ãªã«èŒãããããã§ã¯ïŒ"
- "ãªãé«éã«ãã©ã³ã¶ã¯ã·ã§ã³å®è¡ã§ããã1å1åãã£ãŠã£ãŠãåŠçæéçã«ãªããšããªããã§ã¯"
- "OLTPã¯å°æ°ã®èªã¿æžãããããªãã"
- "ã¹ãã¢ãããã·ãŒãžã£äœ¿ãã°ãããã¯ãŒã¯ã¬ã€ãã³ã·ãŒãæãããããä»ã¯ PL/SQL ãšããããªããªãããªèšèªã§æžãã"
- Redis ã¯ãã
- ããã¯ã«é¢ãããªãŒããŒãããããªãåã䞊è¡å®è¡ãããé«éã«åäœããå Žåããã
- ã¹ãã¢ãããã·ãŒãžã£ã®æŽ»çš
- (èªç©ºåžäºçŽãæ³åãã€ã€)沢山ã®ãŠãŒã¶ãŒå ¥åã1ãã©ã³ã¶ã¯ã·ã§ã³ã«ããããšãããšå ¥ååŸ ã¡ãé·ãéå¹ç
- ãã©ã³ã¶ã¯ã·ã§ã³ã现ããããŠãããšãããã¯ãŒã¯ã¬ã€ãã³ã·ãŒã銬鹿ã«ãªããªã
- ããã§åŠçãã¹ãã¢ãããã·ãŒãžã£ãšããŠãŸãšããŠ1ãªã¯ãšã¹ãã§ã¬ããšãã
- ã¹ãã¢ãããã·ãŒãžã£ã®æ¬ ç¹
- ã³ãŒãã DB äžã«ãã
- ãããã°ããã
- ãã¹ãããã
- ç£èŠãã¥ãã
- å¹çæªãã³ãŒããæžãããšãã®åœ±é¿ãã§ãã
- æè¿ã¯å€å°ããæãã«æžãã
- Redis ã ã£ãã Lua ã§æžãã
- Lua ãã¡ã€ã«ã Sha1 ã§ç»é²ã㊠eval ã§ããã£ãœã https://rest-term.com/archives/3038/
- ã³ãŒãã DB äžã«ãã
- æžã蟌ã¿ã®ã¹ã«ãŒããããé«ãã¢ããªã±ãŒã·ã§ã³ã®å Žåã¯ããŒãã£ã·ã§ãã³ã°ã§ã«ããŒã§ããå¯èœæ§ã
- ããŒãã£ã·ã§ãã³ã°ããäžã§èªã¿æžããåäžã®ããŒãã£ã·ã§ãã³ã°ã«å¶éã§ãããªã䞊è¡ã«åŠçã§ãã
- æžã蟌ã¿ã®æ¯éãé«ãã¢ããªã±ãŒã·ã§ã³ã§ã¯äœ¿ããªãããã ãã©ãæžã蟌ã¿ã®æ¯éãé«ãã¢ããªã±ãŒã·ã§ã³ã»ã© Serializeable ãæ±ããå Žåãå€ããããªæ°ããã
- ä»®æ³é貚ãšã
- ãã®èæ¯ããã£ãŠã®ãããã¯ãã§ãŒã³âŠïŒ
- çŸå®çã«ãªã£ãèæ¯
- (2.) 2 Phase Lock
- å€çš®ãè²ã ããã®ã§åºå¥ã㊠Strong Strict Two-Phase Lock ãšåŒã°ããå Žåã
- 2 Phase Commit ãšã¯éãã®ã§æ³šæ!
- ãããªããžã§ã¯ãã«ã€ããŠãæžã蟌ã¿ã»èªã¿åãé¢ä¿ãªããã©ã³ã¶ã¯ã·ã§ã³å®äºãŸã§æä»åŠçãšãªããããªããžã§ã¯ããããã¯ãã
- A transaction ã® write äžã« B transaction ã察象ãªããžã§ã¯ãã®å€ãç¶æ ã read ããããšãã§ããªã
- ã¹ãããã·ã§ããåé¢ã ãš W/R ã¯äºãã«ãããã¯ããªã
- MySQL ã SQL Server ã® Serializable 㯠2PL ãã
- 2 Phase => Start ãš Finish ã«ãããããã¯ã®æäœïŒååŸãšè§£æŸïŒ
- å
±æããã¯ãšæä»ããã¯
- Read => Shared, Write => Exclusive
- ãããããã¯ã容æã«èµ·ããã®ã§ DB ã«ã¯æ€åºãšè§£æ¶ã®ããã®æ©æ§ããã
- Predicate Lock ïŒè¿°èªããã¯ïŒ
- æ¡ä»¶ã«åœãŠã¯ãŸããªããžã§ã¯ãå
šãŠã«å¯ŸããŠããã¯ãåã
- å°æ¥çã«åœãŠã¯ãŸããªããžã§ã¯ãã«å¯ŸããŠãããã¯ãåãã
- (ravelll)ãããã©ã³ã¶ã¯ã·ã§ã³å ã§ Select where => insert ãšãããšãã«è¿œå ããããªããžã§ã¯ãã where ã«å«ãŸãããªãåæã«å ±æããã¯ãåããããšããããšïŒ
- å šéšããã¯ãããã©ãã1ãªããžã§ã¯ãã§ãããã¯ãåãããŠãããåŸ ã€
- æ¡ä»¶ã«åœãŠã¯ãŸããªããžã§ã¯ãå
šãŠã«å¯ŸããŠããã¯ãåã
- Range LockïŒã€ã³ããã¯ã¹ç¯å²ããã¯ïŒ
- è¿°èªããã¯ãç¹å®ã®æ¡ä»¶ã«å¯Ÿããããã¯ãªã®ã«å¯ŸããŠãæ¡ä»¶ãå«ãåçŽãªçµã蟌ã¿å¯Ÿè±¡ã«å¯ŸããŠããã¯ãåãã®ãã€ã³ããã¯ã¹ç¯å²ããã¯
- (3.) çŽååå¯èœãªã¹ãããã·ã§ããåé¢ïŒSSIïŒ
- 2PL ãæ²èŠ³çãªå¶åŸ¡ã§ããããšã«å¯Ÿã㊠SSI ã¯æ¥œèгçãªå¶åŸ¡
- ãšãããããã©ã³ã¶ã¯ã·ã§ã³ã䞊è¡å®è¡ãããŠãSerializable ã§ãªãçµæãšãªããšãã«äžæãã
- åäžã®ãªããžã§ã¯ãã«å¯ŸããæŽæ°ãå€ãèµ·ããå Žåãäžæããããããã©ã³ã¶ã¯ã·ã§ã³ã®å²åãé«ããªãããã©ãŒãã³ã¹ãæªã
- ãªãã©ã€ãèµ·ãããšè² è·ãé«ãŸã
- 2PL ã®å Žåã¯åŸ ã€
- ãããŠç«¶åããããšãå°ãªãå Žåã¯ããã©ãŒãã³ã¹ãé«ããªã
- ãã¬ãã¹: ããæç¹ã§ã¯çã ã£ãäºå®
- serializable ã§ãªããªã£ãããšãã©ãæ€åºããïŒ
- å€ããªã£ã MVCC èªã¿åããæ€åºãã
- ã³ãããã®çŽåã§ MVCC ããŒã¿ããŒã¹ã確èªããå€ããªã£ãæäœããã£ããäžæãã
- æŽæ°æã«ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®å
±æããã¯ã«å¯ŸããŠåœ±é¿ãããã°éç¥ãã
- ãããããŸã§ãäžæãèµ·ããã®ã¯ã³ãããæ
- å€ããªã£ã MVCC èªã¿åããæ€åºãã
- 2PL ãæ²èŠ³çãªå¶åŸ¡ã§ããããšã«å¯Ÿã㊠SSI ã¯æ¥œèгçãªå¶åŸ¡
- ãã©ã³ã¶ã¯ã·ã§ã³é¢ä¿ã®çšèªã®ç°¡åãªèª¬æãããã«æžãããŠãã®ã§å¿ãããšãã¯èŠããšäŸ¿å©
- p.288, 289
- ãããŸã§ã®æ°ç« ã§åºãŠããããŒã: ããããããªã£ãããšãã·ã¹ãã ãã©ãæ±ãã®ãã
- "ãããããªããããããªãããšã¯å¿ ããã€ããããããªããã®ãšèããŸããã"
- "ç§ãã¡ã®ã¿ã¹ã¯ã¯äœãããããããããªã£ããšããŠãä»äºãããªããŠãããã·ã¹ãã ãæ§ç¯ããããš"
- åªãããœãããŠã§ã¢ãæèŒãããåã
ã®ã³ã³ãã¥ãŒã¿ãéåžžåãããç¶æ
ã¯ãå®å
šã«åäœãããå®å
šã«å£ããŠããã
- 決å®çãªåŠç
- ééã£ãçããè¿ãããã¯ã©ãã·ã¥ããã»ããæãŸãã
- 忣ã·ã¹ãã ã®å Žåã¯ãããæ ¹æ¬ããéãã®ããâŠ
- 忣ã·ã¹ãã ã§éšåé害ãèµ·ãããšåŠçãéæ±ºå®çã«ãªãã®ã§ã ãºã
- äœãã©ãã§å€±æããã®ãè¬ããããã倱æã»æåãåãããªãããšã
- ãã€ããã©ãŒãã³ã¹ã³ã³ãã¥ãŒã¿ããã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ãžã®ã¹ãã¯ãã©ã
- éã®ã©ããã«ãšã³ã¿ãã©ã€ãºããŒã¿ã»ã³ã¿ãŒãå ¥ã
- ã¹ãã¯ãã©ã äžã®äœçœ®ã«ãã£ãŠãã©ãŒã«ããæ±ãããã®ã¢ãããŒããå€ãã
- ããŠã³ã¿ã€ã ã®èš±å®¹ãããŒããŠã§ã¢ã®ä¿¡é Œæ§ããããã¯ãŒã¯ã®åœ¢ç¶ãæ éãåæãšããããéšåé害ããã£ãŠãã·ã¹ãã ãç¶ç¶ã§ããããããŒããŠã§ã¢ã®å°ççãªåæ£ããªã©ã®é¢ã§éãããã
- "ä¿¡é Œæ§ã®ãªãã³ã³ããŒãã³ãããä¿¡é Œæ§ã®ããã·ã¹ãã ãæ§ç¯ãã"
- 人éãèšå®ããæ©åšã§åé¡ãèµ·ããŠãããªãåçŽã«ãã®å±æ©ãåé·åããã ãã§ã¯ãã©ãŒã«ãã¯æžããªã
- ããµã¡ãæµ·åºã±ãŒãã«ããã£ãŠãŠâŠããšããã®ã£ã°
- ãããã¯ãŒã¯ãªã³ã¯ã¯éä¿¡ãæåããŠãããããšãã£ãŠåä¿¡ãæåãããšã¯éãããïŒ
- æ®éã¯ãããã¯ãŒã¯ã®åé¡ã«å¯ŸããŠã¯ãšã©ãŒããŒãžãåºãã ãã§è¯ãããã ãã©ããœãããŠã§ã¢ããããã¯ãŒã¯é害ã«å¯ŸããŠã©ãããåããããã®ãã¯ç¥ã£ãŠãããã»ããããã -- p.305
- fault-tolerance: èé害æ§
- èé害æ§ãæã€åæ£ã·ã¹ãã ãåããã¹ãã¢ã«ãŽãªãºã ãšãããã³ã«ã®è©±
- 忣ã·ã¹ãã ãèé害æ§ãæã€ããã«ã¯ç¶ãã¹ãæœè±¡çãªã¢ã«ãŽãªãºã ã«åæ£ã·ã¹ãã ãäŸåããã
- äŸãã°åæãªã©ã«ã€ããŠãã¢ããªã±ãŒã·ã§ã³ãæèããªããŠæžãããã«ããïŒãã®èŸºã¯ DB ãšåãïŒ
- 忣ã·ã¹ãã ãæäŸã§ããä¿èšŒã«ã¯é床ããããäœãã§ããŠäœãã§ããªãããç¥ããšè¯ã
- "çµææŽåæ§(Eventual Consistency)"ã¯ãæçµçã«åãç¶æ ã«åæãããšããæå³ã§"åææ§(Convergement)"ã®ã»ããè¯ããã§ã¯
- ãã©ã³ã¶ã¯ã·ã§ã³åé¢ãšåæ£äžè²«æ§ã¢ãã«ã®å
±éç¹ã»éã
- ãã©ã³ã¶ã¯ã·ã§ã³åé¢ïŒäžŠè¡ãããã©ã³ã¶ã¯ã·ã§ã³ã«ãããã¬ãŒã¹æ¡ä»¶ãåé¿ãã
- 忣äžè²«æ§ã¢ãã«ïŒé å»¶ã»ãã©ãŒã«ãã«éããŠã¬ããªã«ã®æ¡ä»¶ã調æŽãã
- å¥åïŒatomic consistency, strong consistency, immediate consistency, external consistency
- "åºæ¬çãªçºæ³ã¯ãããŒã¿ã®ã³ããŒã1ã€ãããªãããã®ããŒã¿ã«å¯Ÿããå
šãŠã®æäœãã¢ãããã¯ã§ãããã®ããã«ã·ã¹ãã ãèŠãããšããããšã§ã"
- Atomicity: DB ããããã©ã³ã¶ã¯ã·ã§ã³ã®åŠç以åãå®äºåŸã®ç¶æ ããæããªãæ§è³ª
- "ç·åœ¢åå¯èœæ§ãæã€ã·ã¹ãã ã§ã¯ã1ã€ã®ã¯ã©ã€ã¢ã³ãã®æžã蟌ã¿ãæåããã°ãå³åº§ã«ãã®ããŒã¿ããŒã¹ããèªã¿åããè¡ããã¹ãŠã®ã¯ã©ã€ã¢ã³ããæžã蟌ãŸããã°ããã®å€ãèŠãããšãã§ããªããã°ãªããŸãã"
- 誰ãã®æžã蟌ã¿ãå³åº§ã«èŠãã => ã¬ããªã«ã1ã€ãããªããã®ãããªæ¯ãèã
- ç·åœ¢åå¯èœæ§ = ææ°æ§ã®ä¿èšŒ
- ç·åœ¢åå¯èœæ§ãæããªãã·ã¹ãã ã®äŸ
- Alice ãš Bob ã¯å¥ã ã®ã¬ããªã«ããããŒã¿ãèŠãŠããã¬ããªã±ãŒã·ã§ã³é å»¶ã®åœ±é¿ãåããŠã
- 1ã€ã®ã¬ããªã«ãããªãããã«ã¯èŠããææ°æ§ãä¿èšŒãããŠããªã => ç·åœ¢åå¯èœæ§ãæã£ãŠããªãã·ã¹ãã
- 忣ã·ã¹ãã ã®æç®ã«ãã㊠ã¬ãžã¹ã¿ 㯠KVS ã§èšãããŒ
- 1ã€ã ãããŒã¿ãä¿æã§ããããé åãæãäžææ§ã®ããå€ïŒ
- "ãããã£ãŠãããã¯ã©ã€ã¢ã³ãã®èªã¿åãã§æ°ããå€ã®1ãè¿ããããã ããšããŸã æžãèŸŒã¿æäœãå®äºããŠããªããŠãããã以éã®èªã¿åãã§ãå
šãŠæ°ããå€ãè¿ãããªããã°ãªããŸãã"
- ãã®ã·ã¹ãã 㯠Atomicity ãæã£ãŠããªãã®ã§ã¯ïŒïŒAtomicity 㯠Linearizable System ã«ãããŠå¿ é ã§ã¯ãªãïŒ
- Serializable ãšã®éã
- Serializable ã®é¢å¿äºã¯ãã©ã³ã¶ã¯ã·ã§ã³ãLinearizable ã®é¢å¿äºã¯åã¬ãžã¹ã¿
- äŸãã°æžã蟌ã¿ã®ã¹ãã¥ãŒã¯åã¬ãžã¹ã¿ã§èŠããšç¹ã«ããèªäœåé¡ã§ã¯ãªã(= Linearizable & !Serializable)
- 2PLãåã£ãŠæžã蟌ã¿ãè¡ã£ãŠãã¬ããªã±ãŒã·ã§ã³é
å»¶ãèµ·ããŠããã¬ããªã«ããããŒã¿ãååŸããããšã¯ããã®ã§ã¯âŠïŒ(= !Linearizable & Serializable)
- ãªãã£ãã2PLã«ãã Serializable System 㯠Linearizable ã§ããããããªïŒby ã³ã©ã ïŒ
- SSI ã®ãšãã¯ãããã©ã³ã¶ã¯ã·ã§ã³ãä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ããæžã蟌ã¿ãåæ ãããªãã¹ãããã·ã§ããã䜿ãã®ã§ææ°æ§ãä¿èšŒãããªã(= !Linearizable & Serializable) (ãŸã èªã¿ãããŠãªã)
- "ç·åœ¢åå¯èœãªã¬ãžã¹ã¿ã¯ããŒã¿ã®ã³ããŒã1ã€ãããªãããã¹ãŠã®æäœã¯ããæç¹ã§ã¢ãããã¯ã«æå¹ã«ãªããã®ããã«æ¯ãèã" => "æäœãå®è¡ãããé åºã¯æç¢ºã«å®ãŸã"
- æäœãæå¹ã«ãªããšã¯ã©ãããããšâŠïŒæäœãè¡ããçµæã«åæ ããããšããããšãªã®ããª
- é åºãæç¢ºã«å®ãŸã => åæäœã®ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã®ã¿ã€ãã³ã°ããããã°ãã®é çªãå°ãªããšã1ã€å®ããããšãã§ãããšããããšïŒ
- äžæã«å®ãŸãèš³ã§ã¯ãªãæ°ããããåãå€ãè¿ããŠããé£ç¶ããèªã¿èŸŒã¿ã¯é äžåã«ãªãã®ã§ã¯ãã
- é åºä»ãã¯å€§äºãªåºæ¬çæŠå¿µãªã®ã§åäžè§ŠããŠãã
- ããã ã£ãâŠ
- ã·ã³ã°ã«ãªãŒããŒã¬ããªã±ãŒã·ã§ã³ => ãªãŒããŒãã¬ããªã±ãŒã·ã§ã³ãã°ã«æžã蟌ãé åº
- Serializability => ãã©ã³ã¶ã¯ã·ã§ã³ãããããäœããã®é åºã«åŸã£ãŠå®è¡ããããã®ããã«æ¯ãèãããšãä¿èšŒ
- 忣ã·ã¹ãã ã«ãããã¿ã€ã ã¹ã¿ã³ãã»ã¯ãã㯠=> é åºä»ããããŠããªãäžçã«é åºãæã¡èŸŒã
- 忣ã·ã¹ãã ã«ãããåã·ã¹ãã ã§èµ·ããç©äºã¯æ¬è³ªçã«ã¯éãæé軞ã§åããŠããïŒã¯ããã¯ããé Œãããã®ããªãïŒ
- é åºä»ãã¯å æé¢ä¿ãä¿ã€ã®ã«åœ¹ç«ã€
- ãµãã«ãŒã®çµæãåºã -> Alice ãçµæãååŸãã -> Alice ãå«ã¶ -> ãããèãã Bob ãçµæãååŸ
- ãã®å æé¢ä¿ã«éåãããããªããŒã¿ã®ååŸãæŽæ°ãè¡ãããŠã¯ãããªãïŒããã¯ç·åœ¢åå¯èœã§ã¯ãªãïŒ
- å æã«å¯ŸããŠäžè²«ããŠããæ¯ãèãããã -> causally consistent (å æåŸã«ãããŠäžè²«ããŠãã)
- 䞊è¡ããŠè¡ããã => å æé¢ä¿ã¯ãªã
- å
šé åºãšåé åº
- æ°å€ã®ãããªç°ãªã2ã€ã®èŠçŽ ã«ã€ããŠå¿ ã倧å°é¢ä¿ãå€å®ã§ãããã® => å šé åº
- éåã®ããã«ãå€å®ã§ããå Žåãããã§ãªãå Žåããããã® => åé åº
- { 1 } ïŒ { 1, 2 } ã ãã© { 1 } ãš { 2 } ã¯å€§å°ãå€å®ã§ããªã
- äŸãã°äžŠè¡ããåŠçã蚱容ããã·ã¹ãã ã«ãããŠåæäœã¯åé åºããšèšããã
- å æåŸã¯å šé åºãå®çŸ©ããªãïŒå æé¢ä¿ã®ãããã®ã䞊è¡ã«å®è¡ããããšããã·ã¹ãã ãããïŒ
- Linearizable ã«ããã®ãããã©ãŒãã³ã¹ã®é¢ã§ã³ã¹ããé«ãå Žåãcausally consistent ã«ããéžæè¢ãåãã
- causally consistency ã ãšãããã¯ãŒã¯é å»¶ããã£ãŠãããã©ãŒãã³ã¹ãå£åããªãããšããã®ã¯äžŠè¡å®è¡ã蚱容ããããïŒåŸ ã£ãŠããå æåŸéåã«ãªããããªãããã¯ãŒã¯é å»¶ã¯ãªãïŒ
- ã·ã¹ãã ãæµãããã¹ãŠã®åŠçã®ã·ã³ãã«ããšããã©ãŒãã³ã¹ã»å¯çšæ§ã®ãã¬ãŒããªãã«ãªãã£ãœã
- å¯çšæ§ => Linearizable ã«ãããšéåãå¢ããããïŒ
- "å€ãã®å Žåãç·åœ¢åå¯èœæ§ãå¿
èŠãšããŠããçšã«èŠããã·ã¹ãã ã«æ¬åœã«å¿
èŠãªã®ã¯ãå æåŸã«ãããäžè²«æ§ã ã"
- ã©ãããå Žåã§ç·åœ¢åå¯èœæ§ãå¿ èŠïŒ