ããã·ã¥ããŒãåããããªã¢ã©ã€ãºããã¥ãŒïŒäºåèšç®ãšå®å šãªãªãã¬ãã·ã¥
ããã·ã¥ããŒãåããããªã¢ã©ã€ãºããã¥ãŒïŒäœãäºåèšç®ããããã©ã®ãªãã¬ãã·ã¥æŠç¥ãéžã¶ããè² è·æã«å°ãå€ãããŒã¿ãå®å šã«æäŸããæ¹æ³ã解説ããŸãã

ãªããã©ãã£ãã¯ã®å€ãããã·ã¥ããŒãã¯é ããªãã®ã
ãã¹ãç°å¢ã§ã¯ãŠãŒã¶ãŒãå°ãªãããŒã¿éãå°ãããããããã·ã¥ããŒãã¯éãæããŸãããããæ¬çªã§ã¯ãããŒãžã®æŽæ°ããšã«åãéãã¯ãšãªãäœåºŠãèµ°ãããšãããåŸãŸãããããã®ã¯ãšãªãäœçŸäžè¡ãèµ°æ»ããè€æ°ããŒãã«ãçµåããæéãã«ããŽãªã§éçŽãããªããããŒãžãéããã³ã«ããŒã¿ããŒã¹ã倧éã®åŠçãããªããã°ãªããŸããã
ããããåå ã¯:
- 倧ããªçµåïŒäŸïŒorders + customers + productsïŒã®ããã«ãããŒã¿ã®ã·ã£ããã«éãå¢ãããã®ã
- çã®ã€ãã³ãã«å¯Ÿãã group-byïŒãæ¥ããšã®ã«ãŠã³ãããå°åããšã®åèšãïŒã§ããœãŒããéçŽãå¿ èŠã«ãªããã®ã
- æ¥ä»ç¯å²ãåœãããã€ã¹ããã©ã³ãªã©ã倿°ã®ãã£ã«ã¿ãã»ã°ã¡ã³ããã¯ãšãªåœ¢ç¶ãå€ããåå©çšãé£ãããããã®ã
ãã£ãã·ã¥ã¯åœ¹ç«ã¡ãŸããããã£ã«ã¿ã®çµã¿åãããå€ãããã·ã¥ããŒãã§ã¯å£ããããã§ãããããŠãŒã¶ãŒã¯ãçŽè¿7æ¥ãEUãææããèŠããäžæ¹ã§å¥ã®ãŠãŒã¶ãŒã¯ãçŽè¿30æ¥ãUSããã©ã€ã¢ã«ããèŠããããããŸããããã£ãã·ã¥ããŒãå¢ãããããçãäœããããã©ãŒãã³ã¹ãäºæž¬ãã«ãããªããŸããããã«æªãããšã«ããã£ãã·ã¥ã¯é ãã¯ãšãªãé ããããŒã¯æã®ãã£ãã·ã¥ãã¹ã§åé¡ã衚é¢åããŸãã
ããã§åœ¹ç«ã€ã®ãããã·ã¥ããŒãåãã®ãããªã¢ã©ã€ãºããã¥ãŒã§ããç°¡åã«èšããšããããªã¢ã©ã€ãºããã¥ãŒã¯äºåèšç®çµæãä¿åããããŒãã«ã§ããæ¯åçããŒã¿ããåãåèšãèšç®ãã代ããã«ãäžåºŠèšç®ããŠïŒã¹ã±ãžã¥ãŒã«ãŸãã¯ããªã¬ãŒã§ïŒãã®ã¹ãããã·ã§ããããããã·ã¥ããŒããè¿ããŸãã
æ®éã®ã€ã³ããã¯ã¹ã¯çã®è¡ãçŽ æ©ãèªã¿ãããšãã«äœ¿ããŸãïŒäŸãã°1人ã®é¡§å®¢ãæ¢ããåäžåã§ãã£ã«ã¿ããå ŽåïŒãäžæ¹ããããªã¢ã©ã€ãºããã¥ãŒã¯ç¹°ãè¿ãçºçããéèšïŒåèšãã«ãŠã³ããã°ã«ãŒãåãããææšïŒãåé¡ã§ãå€ãã®ãŠãŒã¶ãŒãäžæ¥äžããããèŠæ±ããå Žåã«é©ããŠããŸãã
PostgreSQLäžã§ããã·ã¥ããŒããäœãå ŽåïŒAppMasterã§äœã£ããããžã§ã¯ããå«ãïŒããã®éãã¯éèŠã§ãïŒã€ã³ããã¯ã¹ã¯ã«ãã¯ã¢ãããéãããŸãããéèšãå€ãããŒãžãè² è·äžã§å®å®ãããã®ã¯äºåèšç®ã§ãã
ã©ã®éšåãé«éã«ãããæ±ºãã
ãããªã¢ã©ã€ãºããã¥ãŒãäœãåã«ãããã·ã¥ããŒãã®ã©ã®éšåã峿å¿çã«ããããæ±ºããŠãã ããããã¹ãŠã®æ°å€ããªã¢ã«ã¿ã€ã ã«ããããšãããšãé ãããŒããã¿ã€ã ã¢ãŠããçµ¶ãéãªããªãã¬ãã·ã¥è² è·ã«æ©ãŸãããŸãã
ãŸããããã·ã¥ããŒãç»é¢ãããªã¬ãŒããå®éã®ã¯ãšãªããããã³ã°ããŸããããåã¿ã€ã«ããã£ãŒããããŒãã«ã«ã¯éåžžå°ãªããšã1ã€ã®ã¯ãšãªãããããã£ã«ã¿ã¯ãããå€ãã®ããªãšãŒã·ã§ã³ã«å¢ãããŸãã8ã€ã®ã¿ã€ã«ãš6ã€ã®ãã£ã«ã¿ããããã·ã³ãã«ããªããã·ã¥ããŒãã§ããç¥ããªããã¡ã«äœåãã®ã¯ãšãªåœ¢ç¶ã«å€ããããšããããŸãã
å®åçãªæ¹æ³ã¯ãåã¿ã€ã«ãæžãåºããŠæ¬¡ã®3ã€ã«çããããšã§ãïŒ
- ã©ã®ãã£ã«ã¿ããããå€ãããïŒæ¥ä»ç¯å²ãå°åãããŒã ãã¹ããŒã¿ã¹ïŒïŒ
- ã©ã®ããŒãã«ã«è§ŠããŠããŠãçµåã¯ã©ãã«ãããïŒ
- ãã®ã¿ã€ã«ã«ãšã£ãŠãååã«éãããšã¯äœç§ãïŒãµãç§ã2ç§ã5ç§ïŒïŒ
次ã«ãçã®ãªã¢ã«ã¿ã€ã èŠä»¶ãšãå°ãé ããŠããããææšãåããŸãããŠãŒã¶ãŒã¯ãã°ãã°ã¢ã©ãŒããéçšäžã®ã«ãŠã³ãïŒäŸïŒãçŸåšã®æªåŠçã€ã³ã·ãã³ããïŒãéãå¿ èŠãšããŸãããéãéèšïŒäŸïŒã»ã°ã¡ã³ãå¥ã®é±æ¬¡ã³ã³ããŒãžã§ã³ïŒã¯é ããŠãåé¡ã«ãªããªãããšãå€ãã§ããå®çšçãªã«ãŒã«ã¯ãã¿ã€ã«ããšã«å³æã1åã5åã15åãªã©ã®é®®åºŠç®æšãèšå®ããããšã§ãã
次ã«ãäœãé«ã³ã¹ãããç¹å®ããŸããè€æ°ã®å€§ããŒãã«ã«ãŸãããã¯ã€ããªçµåãçã€ãã³ããã°ã®å€§ããªã¹ãã£ã³ãdistinctã«ãŠã³ããããŒã»ã³ã¿ã€ã«èšç®ã®ãããªéãéçŽãæ¢ããŠãã ãããããããäºåèšç®ã§æãæ©æµãåããç®æã§ãã
äŸïŒãµããŒãããã·ã¥ããŒãã§ã¯ãåŸ æ©äžã®ãã±ãããã¯å³æãå¿ èŠãããããŸããããããã£ãã«å¥ã®å¹³åååå¿çæéãã¯5ã15åé ããŠããŠãŒã¶ãŒã®è² æ ã¯å°ãªãã§ããããAppMasterã®ãããªããŒã«ã§ããã·ã¥ããŒããäœãå Žåã§ãããã®äœæ¥ã¯åæ§ã§ãïŒUIãéãæããããã®ã¯ãåŒã°ããããŒã¿ãšã³ããã€ã³ããéããšãã ãã§ããã®ããã«ã¯ãŸãäœãéãããããæ±ºããå¿ èŠããããŸãã
ããã·ã¥ããŒãã§äºåèšç®ãã¹ããã®
ããã·ã¥ããŒãã§ã¯ãé »ç¹ã«èŠæ±ãããäºæž¬å¯èœã«å€åããæ¯åçã€ãã³ãããèšç®ããã®ãã€ãããã®ãäºåèšç®ããŠãã ãããé©åã«è¡ãã°ããããªã¢ã©ã€ãºããã¥ãŒã¯ãäœçŸäžè¡ãèµ°æ»ãããäœæ¥ããæ°çŸè¡ãèªããäœæ¥ã«å€ããŸãã
人ãããèŠãã¿ã€ã«ïŒåèšããã¬ã³ããå èš³ããå§ããŸãããããã£ãŒããæéã§ã°ã«ãŒãåãããªããUIã§äœ¿ãã®ãšåãæéãã±ããïŒæéãæ¥ãé±ïŒã§äºåéèšãããŠãŒã¶ãŒããããã£ã«ã¿ããæ¬¡å ã ããæ®ããŸãã
äºåèšç®ã«é©ããåè£ã¯éåžžïŒ
- æéãã±ããããšã®éèšïŒã«ãŠã³ããåèšãå¹³åïŒãšãå°åãããŒã ããã©ã³ãã¹ããŒã¿ã¹ãªã©äž»èŠãªãã£ã«ã¿æ¬¡å ã
- çµåã®ç¹°ãè¿ãäœæ¥ããªããããã®äºåçµåæžã¿è¡ïŒäŸïŒã€ãã³ãã«ã¢ã«ãŠã³ãã補åãæ åœè ãçµåãããã®ïŒã
- Top-Nããéãèšç®ããµããªïŒäŸïŒæ¯åºäžäœ20顧客ãp95ã¬ã€ãã³ã·ãããŒã»ã³ã¿ã€ã«ãã±ããïŒã
- ãçŸåšã®ãã©ã³åãããå²ãåœãŠããŒã ãã®ãããªãã£ããå€ããåç §ã«ãã¯ã¢ãããããã·ã¥ããŒããåç §ããŒãã«ãäœåºŠãå©ããªãããã«ããããã
- çã®ã€ãã³ããã€ããŒããé€ãããå°ããç®çå¥ã®ãããã·ã¥ããŒãçšããŒãã«ããUIã«å¿ èŠãªãã®ã ããæ®ãã
ç°¡åãªã«ãŒã«ïŒããã·ã¥ããŒãã§ã€ãã³ãã¬ãã«ã®è©³çŽ°ãæ¬åœã«å¿ èŠã§ãªãéããçã€ãã³ãã¯ãã¥ãŒã«å ¥ããªãã§ãã ãããããªã«ããŠã³ãå¿ èŠãªããã¡ã€ã³ãã¥ãŒã¯èŠçŽãäºåèšç®ãã詳现ã¯ãŠãŒã¶ãŒãããªã«ããã«ãéãããšãã ãèªã¿èŸŒãããã«ããŸãã
äŸïŒãªãã¹ããã·ã¥ããŒãã«ãæ¬æ¥äœæããããã±ããæ°ããäžå€®å€ã®ååå¿çæéãããµããŒããã¥ãŒå¥ã®æ£ã°ã©ããããããªãããã¥ãŒããšã®æ¥æ¬¡ã»æéå¥ãã±ããæ°ãšå¿çæéã®ããŒã»ã³ã¿ã€ã«ãã±ãããäºåèšç®ãããã±ããæ¬æå±¥æŽã¯ãããªã¢ã©ã€ãºããã¥ãŒã«å ¥ããªãããã«ããŸãã
AppMasterã®ãããªããŒã³ãŒãããŒã«ã§ããã·ã¥ããŒããäœãå Žåãããã®ã¢ãããŒãã¯ããã¯ãšã³ããšã³ããã€ã³ããã·ã³ãã«ã«ä¿ã¡ãŸãïŒAPIã¯æ¯ååãçµåãšèšç®ãåæ§ç¯ãã代ããã«ã1ã€ã®æºåãããããŒã¿ã»ãããèªãã ãã§æžã¿ãŸãã
é©åãªç²åºŠã𿬡å ã®éžã³æ¹
ãããªã¢ã©ã€ãºããã¥ãŒã¯1åã®é«éã¯ãšãªã§ã»ãšãã©ã®è³ªåã«çãããããšæçšã«ãªããŸããæãç°¡åãªæ¹æ³ã¯ãUIã«è¡šç€ºã§ãããã¹ãŠã®ãã£ã«ã¿ã§ã¯ãªããå®éã«æ¯æ¥äœ¿ãããæå°éã®æ¬¡å ããå§ããããšã§ãã
ãŸããããã·ã¥ããŒããçããã¹ãäžäœ5ã10ã®è³ªåãæžãåºããããããã°ã«ãŒãåããã®ã«å¿ èŠãªãã£ãŒã«ããçµã蟌ã¿ãŸããäŸïŒãªãã¹ããã·ã¥ããŒãã§ã¯éåžžãæéãã¹ããŒã¿ã¹ãããŒã ãå¿ èŠã§ãæéïŒã¹ããŒã¿ã¹ïŒããŒã ïŒåå¥ãŠãŒã¶ãŒïŒããã€ã¹ã¢ãã«ãäžåºŠã«å¿ èŠãšããããšã¯ãŸãã§ãã
ãã¹ãŠã®ãã£ã«ã¿ããšã«å¥ãã¥ãŒãäœããšããã¥ãŒã®æ°ãççºãããããããã¯å°ããªå©çã®ããã«å·šå€§ãªããŒãã«ããªãã¬ãã·ã¥ããããšã«ãªããŸããããè¯ããã¿ãŒã³ã¯ãå ±éãã¹ãã«ããŒãã1ã2åã®ããéžã°ãããã¥ãŒãäœãããã³ã°ããŒã«ã®ãã£ã«ã¿ã¯ãªã³ããã³ãã¯ãšãªãå¥ã®ããªã«ããŠã³ããŒãžã«ä»»ããããšã§ãã
ãå®ç§ããªãã¥ãŒã§ã¯ãªãããŒã«ã¢ããã䜿ã
æéã¯ãµã€ãºãšãªãã¬ãã·ã¥ã³ã¹ããæ±ºããããšãå€ãã§ããããŒã«ã¢ããã䜿ãã°ããã¹ãŠã®ç²åºŠãã©ãã«ã§ãä¿åããã«é«éãä¿ãŠãŸãïŒ
- é·ãæ¥ä»ç¯å²ïŒ90æ¥ã12ãæïŒã«ã¯æ¥æ¬¡ããŒã«ã¢ãããä¿æããã
- ãŠãŒã¶ãŒãé »ç¹ã«ã仿¥ãããçŽè¿24æéãããºãŒã ãããªãæéç²åºŠã®ããŒã«ã¢ããã远å ããã
- 詳现ããªã«ããŠã³çšã«çã€ãã³ãïŒãŸãã¯èããã¡ã¯ãããŒãã«ïŒãä¿æããã
ããã«ããã1ã€ã®ãã¥ãŒã§ãã¹ãŠã®æéã«å¯Ÿå¿ããããšãã代ããã«ãé«è² è·ã®ããã·ã¥ããŒãã§ãäºæž¬å¯èœãªããã©ãŒãã³ã¹ãåŸãããŸãã
é å»¶å°çãšããã¯ãã£ã«ã«åãã
å®ããŒã¿ã¯é ããŠå±ããŸãïŒãªãã©ã€ããªãã©ã€ã³ããã€ã¹ãæ¯æã確å®ãã€ã³ããŒããªã©ããã¥ãŒãå®å šã«ä¿®æ£ã§ããããã«èšèšããŠãã ãããç°¡åãªææ³ã®1ã€ã¯ãå°ããªãã¬ãŒãªã³ã°ãŠã£ã³ããŠïŒäŸïŒçŽè¿2ã3æ¥ïŒãåžžã«ãªãã¬ãã·ã¥ããããšã§ããããã·ã¥ããŒãã®ããã©ã«ããã仿¥ãã§ãã£ãŠãã§ãã
AppMasterã䜿ã£ãŠPostgreSQLäžã§æ§ç¯ããå Žåããããã®æ¬¡å ã¯ããŒã¿å¥çŽã®äžéšãšããŠæ±ã£ãŠãã ããïŒå®å®ãããæç¢ºã«åœåããå®éã®è³ªåã«çµã³ã€ããªãéããããš1ã€ã ããæ¬¡å ã远å ããªãããã«ããŸãããã
æ¬çªã§æ©èœãããªãã¬ãã·ã¥æŠç¥
ããã·ã¥ããŒãã峿ãã©ããã¯ãèåŸã®ããŒã¿ãã©ããªãã¬ãã·ã¥ãããã§æ±ºãŸããŸããããã·ã¥ããŒãåããããªã¢ã©ã€ãºããã¥ãŒã®ç®æšã¯åçŽã§ãïŒã¯ãšãªãäºæž¬å¯èœã«ä¿ã¡ãããžãã¹ã«ãšã£ãŠååã«æ°é®®ã«ä¿ã€ããšã
ãã«ãªãã¬ãã·ã¥ vs ã€ã³ã¯ãªã¡ã³ã¿ã«ãªãã¬ãã·ã¥
ãã«ãªãã¬ãã·ã¥ã¯ãã¹ãŠãåæ§ç¯ããŸããçå±ãåããããããããªãããã«ããã§ããé ããªããã¡ã§ããŒã¯ãã©ãã£ãã¯ãšäºãããšããããŸãã
ã€ã³ã¯ãªã¡ã³ã¿ã«ãªãã¬ãã·ã¥ã¯å€æŽåïŒéåžžã¯ææ°ã®æéçªïŒã ããæŽæ°ããŸããéããŠå®äŸ¡ã§ãããé å»¶ããŒã¿ãæŽæ°ãåé€ã«é¢ããæç¢ºãªã«ãŒã«ãå¿ èŠã§ãã
ããŒã¿ã»ãããå°ãããããžãã¯ãè€éãæ£ç¢ºæ§ã鮮床ããéèŠïŒäŸïŒæ±ºç®ïŒã®å Žåã¯ãã«ãªãã¬ãã·ã¥ã䜿ããŸãããããœãŒã¹ããŒãã«ã远èšäžå¿ã§ãããã·ã¥ããŒãã®è³ªåãæè¿ã®æŽ»åã«éäžãããªãã€ã³ã¯ãªã¡ã³ã¿ã«ãåããŸãïŒã€ãã³ããæ³šæããã±ãããªã©ïŒã
åšæãšã¹ã±ãžã¥ãŒãªã³ã°
蚱容ã§ããå€ãã«åãããŠãªãã¬ãã·ã¥åšæãéžãã§ãã ãããå€ãã®ããŒã ã¯ãŸã5åã§éå§ããæ¬åœã«å¿ èŠãªã¿ã€ã«ã ã1åã«è©°ããŸãããã¬ã³ããã£ãŒãããå é±ããšã®æ¯èŒã¯æéåäœã§ååãªããšãå€ãã§ãã
å®çšçãªæ¹æ³ã¯ãæŽæ°é »åºŠãå®éã®æææ±ºå®ã«çµã³ã€ããããšã§ãïŒããæ°å€ã§ãªã³ã³ãŒã«ãšã³ãžãã¢ã«ããŒãžã³ã°ãããªãããã®ã¿ã€ã«ã¯éããªãã¬ãã·ã¥ãå¿ èŠã§ããCEOåãã®æŠèгãªãå€å°é ããŠãæ§ããŸããã
è² è·ã«èãããªãã¬ãã·ã¥ãã¿ãŒã³ã®äŸïŒ
- ããŒã¿å°çåŸã«ãªãã¬ãã·ã¥ããïŒåãªãã¯ããã¯ã§ã¯ãªããæåŸã®ETLãããå®äºæã«å®è¡ïŒ
- å€ãã®ã·ã¹ãã ãããŒã¯ã«ãªãããããåã®é ããé¿ããããã«ã¹ã±ãžã¥ãŒã«ããªãã»ãããã
- çŽè¿1ã7æ¥çšã®å°ããªããããããã¥ãŒãšãããããå€ãæéçšã®ãå±¥æŽããã¥ãŒãåãã
- ããã·ã¥ããŒãã¯ãšãªã§ããããšå±¥æŽãããŒãžããã»ãšãã©ã®ãªãã¬ãã·ã¥äœæ¥ãå°ããä¿ã€
- Postgresããã¯ãšã³ããªããéããªãã«ãã¯äœãã©ãã£ãã¯æéã«å®è¡ããé »ç¹ãªæŽæ°ã¯è»œéã«ä¿ã€
å ·äœäŸïŒãªãã¹ããã·ã¥ããŒãã§ãéå»1æéã®æ³šæããšãéå»90æ¥ã®æ¥å¥æ³šæããããå ŽåãçŽè¿1æéãã¥ãŒã¯æ¯åãªãã¬ãã·ã¥ã90æ¥ããŒã«ã¢ããã¯æ¯æãå€éã«ãªãã¬ãã·ã¥ããŸãããŠãŒã¶ãŒã¯éãå®å®ãããã£ãŒããåŸãããããŒã¿ããŒã¹ã¯å€ãããŒã¿ã®çµ¶ãéãªãåéèšãé¿ããããŸãã
å€ãããŒã¿ãå®å šã«æ±ãæ¹æ³
ããã·ã¥ããŒãã¯å®å šã«ææ°ã§ããå¿ èŠã¯ãããŸããããä¿¡é Œã§ããå¿ èŠããããŸããæãå®å šãªæ¹æ³ã¯ã鮮床ããããã¯ãã®äžéšãšããŠæ±ãããšã§ãïŒã¿ã€ã«ããšã«ãååã«æ°é®®ãã®å®çŸ©ã決ãããããç®ã«èŠããããã«ããŸãã
ãŸããåææšã«æå€§èš±å®¹å€ããŠã£ã³ããŠãå®çŸ©ããŸãã財åã®åèšã¯15åã蚱容ãããããããŸããããã€ã³ã·ãã³ãã®ã«ãŠã³ã¿ã¯1åãå¿ èŠãšãããããããŸããããã®ãŠã£ã³ããŠãåçŽãªã«ãŒã«ã«ãªããŸãïŒããŒã¿ããã®é床ãè¶ ããŠå€ãå Žåãã¿ã€ã«ã¯åã«å€ãæ°å€ã衚瀺ãç¶ããã®ã§ã¯ãªããæåãå€ããã¹ãã§ãã
å®çšçãªãã¿ãŒã³ã®1ã€ã¯ãlast-known-goodãæäŸã§ãããªãã¬ãã·ã¥ã倱æããããããŒãžãå£ãããéšåçµæãè¿ããããã代ããã«ãæåŸã«æåããã¹ãããã·ã§ããã衚瀺ããŸãããããç£èŠãšçµã¿åãããã°ã倱æã«ããæ°ã¥ããäžæ¹ã§ãŠãŒã¶ãŒã«ã¯å®å®ããããã·ã¥ããŒããæäŸã§ããŸãã
鮮床ãåãããããããŸããããããŒãžã®ãããã ãã§ãªããã¿ã€ã«ããšã«ãupdated atãã¿ã€ã ã¹ã¿ã³ãïŒãããã¯ãããŒã¿æç¹ããïŒè¡šç€ºããŸãã人ã¯åæ°å€ã®å¹Žéœ¢ã倿ã§ããã°ããè¯ãæææ±ºå®ãã§ããŸãã
ã¿ã€ã«ãå€ãããå Žåãçã«éèŠãªå°æ°ã®ææšã®ããã«ãã©ãŒã«ããã¯æ¹æ³ãçšæããŠãã ãããäŸïŒ
- ããå°ããªæéïŒçŽè¿1æéãªã©ïŒã«å¯Ÿããç°¡æãªçŽæ¥ã¯ãšãªã䜿ã
- æç¢ºãªã©ãã«ä»ãã§è¿äŒŒå€ïŒãµã³ããªã³ã°ããã£ãã·ã¥ïŒãè¿ã
- å èš³ãäžæçã«é ããŠèŠåºãæ°åã ãã衚瀺ãã
- æåŸã«æ£åžžã ã£ãå€ã衚瀺ããèŠåç¶æ ãä»ãã
äŸïŒAppMasterã§äœã£ããªãã¹ããã·ã¥ããŒãã¯ãæªåŠçãã±ãããæ¯æã倱æã®æšªã«ã2ååã«æŽæ°ããšè¡šç€ºã§ããŸããããäºåèšç®ãã¥ãŒã20ååãªãããã®2ã€ã®ã¿ã€ã«ã ãå°ããªãªã¢ã«ã¿ã€ã ã¯ãšãªã«åãæ¿ããéèŠåºŠã®äœããã£ãŒãã¯å€ãã¹ãããã·ã§ããã䜿ãç¶ãããšãã£ãéçšãå¯èœã§ãã
ãã€ã³ãã¯äžè²«æ§ã§ãïŒå€ãããŒã¿ã¯ãå¶åŸ¡ãããèŠããåããããã§ã€ã«ã»ãŒãã§ããã°åé¡ãããŸããã
ããŒã¯æã«ãªãã¬ãã·ã¥ã§åé¡ãèµ·ããã®ãé¿ãã
ããŒã¯ãã©ãã£ãã¯ã¯ãªãã¬ãã·ã¥ãæã害ãäžããç¬éã§ãã1åã®éããªãã¬ãã·ã¥ãCPUããã£ã¹ã¯ãããã¯ãããã·ã¥ããŒãèªã¿åããšäºãããŠãŒã¶ãŒã¯é ããã£ãŒããã¿ã€ã ã¢ãŠããæããŸãã
ãŸããå¯èœãªãäœæ¥ãåé¢ããŠãã ãããèªã¿åãã¬ããªã«ããããªããéãåŠçã¯ãã¡ãã§å®è¡ããæçµçµæã ãããã©ã€ããªã«ã³ããŒãããããªãã¬ãã·ã¥ãžã§ãçšã«å°çšããŒããå²ãåœãŠãŸããã¬ããªã«ããªããŠãããªãã¬ãã·ã¥ã¯ãŒã«ãŒã®ãªãœãŒã¹äžéãèšå®ããŠãŠãŒã¶ãŒã¯ãšãªã«äœè£ãæ®ãããšã¯ã§ããŸãã
次ã«ãèªã¿åãããããã¯ãããã¿ãŒã³ãé¿ããŸããPostgreSQLã§ã¯ REFRESH MATERIALIZED VIEW ã¯ããã¯ãåãã¯ãšãªãäžæåæ¢ãããããšããããŸããå¯èœãªã REFRESH MATERIALIZED VIEW CONCURRENTLYïŒé©åãªã€ã³ããã¯ã¹ãããå ŽåïŒããããã¯ã°ã©ãŠã³ãã§æ°ããããŒãã«çµæãäœãããããçããã©ã³ã¶ã¯ã·ã§ã³ã§åãæ¿ããã¹ã¯ãããã¿ãŒã³ã奜ãã§äœ¿ã£ãŠãã ããã
éãªãïŒãªãŒããŒã©ããïŒã¯éããªãã©ãŒã§ãããªãã¬ãã·ã¥ã«6åãããã®ã«5åããšã«ã¹ã±ãžã¥ãŒã«ããŠãããšãããã¯ãã°ãå¢ããããŒã¯ã§ææªã®åœ±é¿ãåããŸãã1åã ããããªãã¬ãã·ã¥ãèµ°ãããªãããã¬ãŒããå ¥ããååãçµãã£ãŠããªããã°æ¬¡ãã¹ããããŸãã¯é å»¶ãããä»çµã¿ãäœããŸãããã
çµã¿åãããŠæå¹ãªå®çšçä¿è·çïŒ
- ãªãã¬ãã·ã¥ãžã§ããå¥ãªãœãŒã¹ïŒã¬ããªã«ãå°çšã¯ãŒã«ãŒãå¶éä»ãããŒã«ïŒããå®è¡ãã
- ãã³ããããã³ã°ãªãªãã¬ãã·ã¥ïŒåæå®è¡ãªãã¬ãã·ã¥ãçµæã®ã¹ã¯ããïŒã䜿ã
- éè€å®è¡ãé²ããsingle-flightãããã¯ã远å ãã
- ãŠãŒã¶ãŒèµ·ç¹ã®æŽæ°ã¢ã¯ã·ã§ã³ãã¬ãŒãå¶éããïŒãŠãŒã¶ãŒåäœãšã°ããŒãã«ïŒ
- ãªãã¬ãã·ã¥æéãæž¬å®ããäžæãã¬ã³ãã§ã¢ã©ãŒããåºã
ããã·ã¥ããŒãã«ãæŽæ°ããã¿ã³ããããªãããããã³ãã³ãã§ã¯ãªããªã¯ãšã¹ããšããŠæ±ã£ãŠãã ããããªãã¬ãã·ã¥ããã¥ãŒã«å ¥ããçŸåšã®ããŒã¿ãšãæçµæŽæ°æéããè¿ãããã«ããŸããAppMasterã§ã¯ããã®çš®ã®ã²ãŒãã£ã³ã°ã¯å°ããªBusiness ProcessãšããŠå®è£ ããã®ãç°¡åãªããšãå€ããæåŸã®ãªãã¬ãã·ã¥ããã§ãã¯ããŠå®è¡ãããã¹ããããããã倿ã§ããŸãã
ãããããã¹ãšçœ
ãããªã¢ã©ã€ãºããã¥ãŒã«é¢ããæå€§ã®çœ ã¯ããããéæ³ã®ããã«æ±ãããšã§ãããã¥ãŒã¯ããã·ã¥ããŒããç¬æã«æããããåããããŸãããããã¯ãã¥ãŒãååå°ãããé©åãªé »åºŠã§æŽæ°ãããå®ããŒã¿ãšç §åãããŠããå Žåã ãã§ãã
ãããã倱æã¢ãŒãã¯ããªãã¬ãã·ã¥ãããéããããšã§ããæ¯åãªãã¬ãã·ã¥ã§ãããããšãã£ãŠæ¯åå®è¡ããŠãããšãããŒã¿ããŒã¹ãäžæ¥äžåæ§ç¯äœæ¥ã§å¿ãããªããŸãããŠãŒã¶ãŒã¯ãªãã¬ãã·ã¥ã¹ãã€ã¯äžã«ããŒãžãé ããªãããšããããèšç®ã³ã¹ããå¢ããŸãã
ããäžã€ã®çœ ã¯ããããããã£ãŒãæ¡ã®ããã«ãã¥ãŒãäœãããšã§ããããŒã ã¯åãææšã®é±æ¬¡ãæ¥æ¬¡ãå°åå¥ãæ åœè å¥ã®5ã€ã®ããŒãžã§ã³ãäœããå®éã«äœ¿ãããã®ã¯1ã€ã ããšããããšããããããŸããäœèšãªãã¥ãŒã¯ãªãã¬ãã·ã¥è² è·ãã¹ãã¬ãŒãžãæ°åãåããªããªãç®æãå¢ãããŸãã
é«ã«ãŒãã£ããªãã£ã®æ¬¡å ã«ã泚æããŠãã ãããuser_idãsession_idãããªãŒãã©ãŒã ã®ã¿ã°ãªã©ã®ãã£ãŒã«ãã远å ãããšè¡æ°ãççºçã«å¢ããŸãããã¥ãŒãããèªäœãéãããããã®ãœãŒã¹ã¯ãšãªãã倧ãããªãããªãã¬ãã·ã¥æéãé·ããªããŸãã
é å»¶ã€ãã³ããããã¯ãã£ã«ãããã·ã¥ããŒãã®ä¿¡é Œæ§ãæãªããŸããæšæ¥ã®ããŒã¿ã仿¥ãå€ããããïŒè¿éãé å»¶ãã°ãæåä¿®æ£ïŒå Žåã¯ã説æãªãã«åèšãå€åãããšãŠãŒã¶ãŒã¯å°æããŸãã
次ã®ãããªèŠåãµã€ã³ããããšèšå®ã¯ãŸããæ¹åã«åãã£ãŠããŸãïŒ
- ãªãã¬ãã·ã¥ãžã§ããéãªã£ãŠããããçµãããªã
- ãã¥ãŒã®è¡æ°ãããŒã¹ããŒãã«ããéãå¢ããŠãã
- å°ããªãã£ã«ã¿ïŒäŸïŒ1ã€ã®ããŒã ïŒã§ããã¥ãŒã®å€§éšåãã¹ãã£ã³ããŠãã
- ç»é¢ã«ãã£ãŠãã£ãŒãã®æ°å€ãäžèŽããªã
- ãµããŒãã«ãããã·ã¥ããŒãã以åã¯ééã£ãŠããããšãã£ãå ±åãæ¥ã
å€ãã¯ã·ã³ãã«ãªå¯Ÿçã§é²ããŸãïŒ
- çã®ãœãŒã¹ãªããã¥ã«ãŒã¹ã¯ãšãªã1ã€ã«ä¿ã¡ã宿çã«ç·æ°ãæ¯èŒãã
- 次å ãå®éã«äººããã£ã«ã¿ãããã®ã«éå®ãã
- ããã¯ãã£ã«ã«ãŒã«ã決ããïŒäŸïŒçŽè¿7æ¥åã¯åžžã«ååŠçããïŒ
- ããã·ã¥ããŒãã«ãæçµæŽæ°ãã¿ã€ã ã¹ã¿ã³ãã衚瀺ãã
- ããŒã¯æã®ãªãã¬ãã·ã¥è² è·ããã¹ãããïŒå€ã ãã§ãªãïŒ
PostgreSQLäžã§å éšããã·ã¥ããŒããäœããªãïŒäŸãã°AppMasterã¢ããªå ïŒãåãããªã¢ã©ã€ãºããã¥ãŒãæ¬çªæ©èœãšããŠæ±ã£ãŠãã ããïŒãªãŒããŒãç®çããããæ°å€ãçŸå®ã«åã£ãŠããããšã蚌æãããã¹ããå¿ èŠã§ãã
å ¬éåã®ã¯ã€ãã¯ãã§ãã¯ãªã¹ã
ããã·ã¥ããŒããåºãå ¬éããåã«ããååã«è¯ãããšã¯äœããäžèšã§æžããŸããããåã¿ã€ã«ã«ã€ããŠæç¢ºãªé®®åºŠç®æšãèšå®ããŸãïŒäŸïŒãæé奿³šæã¯2åé ããŸã§èš±å®¹ãè¿éã¯15åé ããŸã§èš±å®¹ãïŒããããäžæã§èšããªããªããã€ã³ã·ãã³ãæã«è°è«ã«ãªããŸãã
åºè·åã®æçµãã§ãã¯ã¯å®çšçãªå®å šå¯Ÿçã§ããå®ç§ãªèšèšããããå ¬éåŸã®é©ããé¿ããããšãéèŠã§ãã
- ã¿ã€ã«ãšèг客ããšã«é®®åºŠãå®çŸ©ããã CEOåãã®æŠèŠã¯å€å°å€ããŠãããããªã³ã³ãŒã«ã®ããã«ã¯ã»ãšãã©èš±å®¹ã§ããªããSLAã¯ããã¥ã¡ã³ãã ãã§ãªãã¯ãšãªã®è¿ãã«çœ®ãã
- ãã¥ãŒã®ãµã€ãºãšæé·ã远ãã çŸåšã®è¡æ°ãã¹ãã¬ãŒãžãµã€ãºãæ¥æ¬¡æé·ãèšé²ããæ°ããæ¬¡å ãå±¥æŽå»¶é·ã§ã³ã¹ããåå¢ããŠããªããç£èŠããã
- ãªãã¬ãã·ã¥æéãæž¬ããéè€ãé²ãã ãªãã¬ãã·ã¥ã¯ã次ã®äºå®å®è¡æå»ããåååã«çµããã¹ããéè€ããããšããã¯ããã¥ãŒã€ã³ã°ã§éªã ããŸåŒã«æªåããã
- å€ããã©ã衚瀺ãããæ±ºããã æå€§èš±å®¹å¹Žéœ¢ãèšå®ããã¿ã€ã«ã«ãæçµæŽæ°ãã¿ã€ã ã¹ã¿ã³ãã衚瀺ãããã©ãŒã«ããã¯ãéžã¶ïŒæåŸã®æ£åžžå€ãè¿ããã¿ã€ã«ãé ããèŠåãåºãçïŒã
- å·®åãã§ãã¯ãå®è¡ããã 宿çã«ãã¥ãŒå ã®äž»èŠãªåèšãããŒã¹ããŒãã«ãšæ¯èŒããããªããã§ã¢ã©ãŒããåºãã
ç°¡åãªãã¹ãïŒãªãã¬ãã·ã¥ã10åé忢ããŠã¿ãŠãã ãããããã·ã¥ããŒãã誀解ãæãããã«ãªã£ããã人ãå€ãããšã«æ°ã¥ããªããã°ãåºè·åã«UIãšã«ãŒã«ã調æŽããŠãã ãããAppMasterã§äœããªãããæçµæŽæ°ãã©ãã«ãããŒã¿ãšäžç·ã«æž¡ãããäžæ¬¡çãªãã£ãŒã«ããšããŠæ±ããšäŸ¿å©ã§ãã
çŸå®çãªäŸïŒãªãã¹ããã·ã¥ããŒããé«éã«ä¿ã€
æ³åããŠã¿ãŠãã ããããã©ãã·ã¥ã»ãŒã«äžã«Eã³ããŒã¹ããŒã ããªãã¹ããã·ã¥ããŒããç£èŠããŠããŸãã瀟å ã®äœçŸäººãã®äººãåãããŒãžãéããŸãïŒæé奿³šæãæ¯æãæåçãè¿éããä»äœã売ããŠãããããåã¿ã€ã«ãçã®ordersãpaymentsããŒãã«äžã§éãã¯ãšãªãèµ°ããããªããããŒã¿ããŒã¹ã¯äœåºŠãå©ãããããã·ã¥ããŒãã¯ãŸãã«éèŠãªãšãã«é ããªããŸãã
代ããã«ãããã·ã¥ããŒãåãã®ãããªã¢ã©ã€ãºããã¥ãŒã䜿ã£ãŠãé »ç¹ã«èªãŸããå°æ°ã®æ°å€ãäºåèšç®ã§ããŸãã
ãã®ãªãã¹ãã¥ãŒã«å¯Ÿããå®çšçãªäºåèšç®äŸïŒ
- éå»7æ¥åã®æé奿³šææ°ïŒæéããšã«ã°ã«ãŒãåïŒ
- éå»90æ¥ã®å£²äžã𿥿¬¡è¿é
- éå»24æéã®5åãã±ããããšã®æ¯æãçµæïŒæåã倱æãä¿çïŒ
- ã仿¥ããšãéå»7æ¥ãã®å£²äžäžäœåå
ãã®çµã¿åããã¯ã¿ã€ã«ãé«éã«ä¿ã¡ã誰ãã詳现ç»é¢ã«å ¥ã£ããšãã ãçã®æ³šæãããªã«ããŠã³ã§ããŸãã
ãªãã¬ãã·ã¥èšç»ã¯ãŠãŒã¶ãŒã®äœ¿ãæ¹ã«åãããŸããææ°ããŒã¿ã¯é »ç¹ã«ãã§ãã¯ããå€ãå±¥æŽã¯äœé »åºŠã§æŽæ°ããŠããååã«è¯ããããšãå€ãã§ãã
åçŽãªãªãã¬ãã·ã¥ã¹ã±ãžã¥ãŒã«äŸïŒ
- çŽè¿24æéïŒ1ã2åããšã«ãªãã¬ãã·ã¥
- çŽè¿7æ¥ïŒ10ã15åããšã«ãªãã¬ãã·ã¥
- ããããå€ãå±¥æŽïŒæ¯æãå€éã«ãªãã¬ãã·ã¥
- äžäœååïŒå¶æ¥æéäžã¯2ã5åããšã«ãªãã¬ãã·ã¥
å€ãããŒã¿ã¯ã«ãŒã«ã§æ±ããŸããäž»èŠã¿ã€ã«ã«ã¯ãããŒã¿æŽæ°ãã¿ã€ã ã¹ã¿ã³ãã衚瀺ããéèŠã¿ã€ã«ïŒæé奿³šæãæ¯æãæåçïŒã10å以äžå€ããã°ããã·ã¥ããŒãã¯èŠåç¶æ ã«åãæ¿ãããªã³ã³ãŒã«ã«ã¢ã©ãŒããéããŸãã
ãã©ãã£ãã¯ã¹ãã€ã¯æã§ãäœéšã¯é«éã®ãŸãŸã§ããããã·ã¥ããŒãã¯å€§ããã¯ãªãäºåæ§ç¯ããŒãã«ãèªãã ãã§æžã¿ãordersãpaymentså šå±¥æŽãèµ°æ»ããŸãããAppMasterã®ãããªããŒã«ã§UIãäœãå Žåãããã«ããAPIå¿çãäºæž¬å¯èœã«ãªããã¿ããªãäžæã«ãªããŒãããŠãããŒãžãã¹ããããŒã«æããããŸãã
次ã®ã¹ãããïŒå®è£ ãæž¬å®ãå埩
åªé ã«èŠããããšã§ã¯ãªããå®éã«å°ã£ãŠããç®æããå§ããŠãã ãããé ãããã·ã¥ããŒãã¯ãšãªãïŒãã°ãAPMãDBçµ±èšããïŒæãåºãããã¿ãŒã³ããšã«ã°ã«ãŒãåããŸãïŒåãçµåãåããã£ã«ã¿ãåãæéçªãåãéçŽãããã«ãã倿°ã®äžæºããæé©åã§ããç¹°ãè¿ãå¯èœãªåœ¢ã«å€ãããŸãã
次ã«ãä»é±å¹æãåºã1ã2ã®å€æŽãéžãã§ãã ãããã»ãšãã©ã®ããŒã ã§ã¯ããã¹ãŠã®ãã£ãŒãã§ã¯ãªãäžäœ1ã2ã®ã¯ãšãªãã¿ãŒã³ãã«ããŒãããããªã¢ã©ã€ãºããã¥ãŒãäœãããšãçŸå®çãªäžæ©ã§ãã
å®çšçãªãã¡ãŒã¹ããã¹ã¯ããèŠããŸãïŒ
- äžäœ5ã€ã®é ãã¯ãšãªãšããããããäœãçããããšããŠããããæžãåºã
- éè€ã1ã2åã®åè£ãã¥ãŒã«ãŸãšãã
- é®®åºŠç®æšãå®çŸ©ããïŒäŸïŒãæå€§5åã®é å»¶ãªãå¯ãïŒ
- ããã·ã¥ããŒããå®éã«äœ¿ããã£ã«ã¿ã«åãããŠã€ã³ããã¯ã¹ã远å ãã
- ã·ã³ãã«ãªãã£ãŒãã£ãŒãã©ã°ããæ°ããã¯ãšãªçµè·¯ããã°ã«ã®è£ã§ããŒã«ã¢ãŠããã
åºè·åŸã¯ãªãã¬ãã·ã¥ããããã¯ãã®äžéšãšããŠæ±ã£ãŠãã ãããæ¬¡ã®3ã€ã«çããç£èŠã远å ããŸãïŒãªãã¬ãã·ã¥ã¯å®è¡ãããããã©ããããæéãããã£ãããçŸåšããŒã¿ã¯ã©ããããå€ããããªãã¬ãã·ã¥å€±æã¯å€§ãããã°ãæ®ããŠãã ããããµã€ã¬ã³ããªå€±æããååã«æ°é®®ããããééããã«å€ããéã§ãã
å°ããªç¿æ £ãç¶ããŠãã ããïŒæ°ãããŠã£ãžã§ããã远å ãããã³ã«ããããæ¢åã®ãã¥ãŒãåå©çšã§ããããæ°ãããã¥ãŒãå¿ èŠãããªã¢ã«ã¿ã€ã ã®ãŸãŸã«ããããæ±ºãããæ°ãããã¥ãŒãå¿ èŠãªããããã·ã¥ããŒãã®è³ªåãæºããæå°ã®ããŒãžã§ã³ããå§ããŸãã
ããã·ã¥ããŒããçŽ æ©ãåºããããªããAppMasterã¯åœ¹ç«ã¡ãŸãïŒWebã¢ããªãæ§ç¯ããŠPostgreSQLã«æ¥ç¶ããç»é¢ã»ãã£ã«ã¿ã»ããžãã¯ãèŠä»¶ã«å¿ããŠæžãæããããšãªã調æŽã§ããŸããå埩ãå®äŸ¡ã«ãªãããšã¯éèŠã§ããæåã®äºåèšç®ãšãªãã¬ãã·ã¥ã®èšèšãæçµåœ¢ã«ãªãããšã¯ãã£ãã«ãããŸããã


