CosmosDBã®ã¹ããŒããŒèšèšã¯ãRMDBãšç°ãªãéšåããããŸãã RMDBã®æèŠã§ã¹ããŒããŒèšèšããããšãRUã倧ããæ¶è²»ããããæ§èœãã§ãªãã±ãŒã¹ããããŸãã
æ¬å ¥éã§ã¯ãFacebookçãªã¢ããªããµã³ãã«ã«CosmosDBãããã¹ããŒãèšèšãšã¯äœããåŠãã§ããã ããŸãã
æ¬è³æã¯ãMicrosoftã®CosmosDBããŒã ã®Githubã§å ¬éãããŠããCosmosDB-DataModeling.pptxãšãã¢ã¡ãªã«ã§éå¬ãããã»ãããŒã®å 容ãããšã«æžãèµ·ããïŒæèš³ïŒè¿œèšãããã®ã«ãªããŸãã
å€ãã®ãŠãŒã¶ãŒãããŠããŠãŒã¶ãŒã«ã¯åéãããŠãèšäºãæçš¿ã§ããŠãããã«Likeãã³ã¡ã³ããã§ãããŠãŒã¶ãŒã®ãããããŒãžã¯èšäºäžèŠ§ã«ãªã£ãŠããã¢ããªã§ãã ãã®ã¢ããªããŸãã¯RMDBçãªã¹ããŒããŒèšèšã§äœæããããããã®æ©èœã§ã®RUæ¶è²»éãšã¬ã¹ãã³ã¹ã確èªããŸããããããåã¯ãšãªãšã³ãã³ãã®çµæãæ¹åããã«ã¯ãã©ãã¹ããŒããŒãæžãæããŠãã©ãããã¹ãã¢ãããã·ãŒãžã£ãäœæãããšããã®ããèŠãŠãããæåŸã«ã¯åãã¢ããªãªã®ã«èšèšïŒã¹ããŒããŒãã¹ãã¢ãããã·ãŒãžã£ïŒãå€ããããšã§ãæ¶è²»RUãå€§å¹ ã«æ¹åããããšãç解ã§ããŸãã
ãŠãŒã¶ãŒ
ã¯ã æçš¿
ãäœæã§ããã
ãŠãŒã¶ãŒã¯ãæçš¿ã«ã Like
ãã§ãã ã³ã¡ã³ã
ãã€ããããã
ãããããŒãžã衚瀺ãããšæè¿ã®æçš¿äžèŠ§ã衚瀺ãããã
ç¹å®ãŠãŒã¶ãŒã®ãã¹ãŠã®æçš¿ãäžèŠ§è¡šç€ºã§ãããæçš¿ã®ãã¹ãŠã®ã³ã¡ã³ããäžèŠ§è¡šç€ºã§ããLikeãæŒãããŠãŒã¶ãŒãèŠããã
æçš¿ã¯ãæçš¿è
ã®ååãšã³ã¡ã³ãæ°ãšLikeæ°ã衚瀺ããããã³ã¡ã³ãã¯ãã³ã¡ã³ãã®æçš¿è
ã®ååã衚瀺ãããã
äžèŠ§ã衚瀺ããããšããæçš¿ã¯æŠèŠã ãã衚瀺ãããã
ãã®èŠä»¶ãã¿ããã¢ããªã±ãŒã·ã§ã³ãã¢ãã«ãªã³ã°ãããšãäžèšã®ãããªã¹ããŒããŒæ§æã«ããããšæããŸãã
ããããCosmosDBã§ã¯ããã®ã¢ããªã³ã°ã§ã¯æ§èœãååã«ã§ãªãã£ããã課éé¡ãé«ããªã£ãŠããŸããŸãã ãã®è³æã§ã¯ãCosmosDBãšããŠã¯ãã©ãã¢ããªã³ã°ããããããã®ããèããŠãããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ãå®çŸããã«ã¯ãã©ã®ãããªãªã¯ãšã¹ããããã§ããããã 倧ãã2ã€ã«åé¡ã§ããŸãã
- Command (æžã蟌ã¿åŠç)
- Query (èªã¿åãå°çš)
ãã®åé¡ã«åºã¥ããŠãã¢ããªã§å¿ èŠãªåŠçãèšèšããŠã¿ãŸãã
- ïŒC1ïŒ ãŠãŒã¶ãŒæ å ±ã®äœæãšç·šé
- ïŒQ1ïŒ ãŠãŒã¶ãŒæ å ±ã®æ€çŽ¢
- ïŒC2ïŒ æçš¿ã®äœæãšç·šé
- ïŒQ2ïŒ æçš¿ã®æ€çŽ¢
- ïŒQ3ïŒ ãŠãŒã¶ãŒæçš¿ã®äžèŠ§
- ïŒC3ïŒ ã³ã¡ã³ãã®äœæ
- ïŒQ4ïŒ æçš¿ã®ã³ã¡ã³ãã®äžèŠ§
- ïŒC4ïŒ æçš¿ãžã®Like
- ïŒQ5ïŒ æçš¿ã®LikeäžèŠ§
- ïŒQ6ïŒ çŽè¿X件ã®æçš¿äžèŠ§
ãããã£ãåŠçãCosmosDBã«å¯ŸããŠå®è¡ãããããšã«ãªããŸãã
CosmosDBããŒã¿ããŒã¹ã§ã¯ãããã¥ã¡ã³ã ãã³ã³ãã㌠ã«ä¿åããŸãã Likeã¯ããŒãã«ã«è¡ãä¿åããã®ã§ãããã
ãã®ããã«ãããã¥ã¡ã³ããšã³ã³ãããŒã1察1ã§çŽã¥ããããšãèãããããããŸããã
CosmosDBã§ã¯ããã¡ãã®ã»ããããã§ãããã
äºæž¬æ§èœã¯ãããããžã§ãã³ã°ã«äŸåããŸãã ããããžã§ãã³ã°ã¯ãç§éãªã¯ãšã¹ãåäœã»Request Units per second (RU/s)ã§è¡šçŸã§ããŸãã CPUãã¡ã¢ãªãI/Oã®ãªã¯ãšã¹ãã³ã¹ãã代æ¿ããŠããŸãã
æ§èœã¯ããããžã§ãã³ã°ãã§ããŸããããããžã§ãã³ã°åäœã¯ãããŒã¿ããŒã¹ã¬ãã«ãšã³ã³ãããŒã¬ãã«ã§å¶åŸ¡ã§ããŸããããããžã§ãã³ã°æ§èœã¯ãAPIçµç±ã§ããã°ã©ã ã§å€æŽã§ããŸãã
ãã®æ§èœã«ã€ããŠã¯ãã³ã¹ãåæžã«ã¯éèŠãªè©±ã§ãã
CosmosDBã¯ãããŒã¿ãããŒãã£ã·ã§ãã³ã°åå²ããŠä¿åããããšã§ãæ°Žå¹³ã¹ã±ãŒã©ããªãã£ããããŸãã ã³ã³ãããŒã®ããŒãã£ã·ã§ã³ããŒã«åºã¥ããŠãããŒã¿ãè«ççã«ããŒãã£ã·ã§ã³ã°ã«ãŒãã«åããŸãã
çŽ æŽãããããŒãã£ã·ã§ã³ããŒã¯ãã¹ãã¬ãŒãžã®èŠ³ç¹ãã¹ã«ãŒããããªã©ãããšãŠããã©ã³ã¹ãåããããŒãã£ã·ã§ã³ã®ãšãã§ãã èªã¿åãã¯ãšãªã¯ãäžã€ã®ããŒãã£ã·ã§ã³ãããã¹ãŠã®çµæãååŸãã¹ãã§ãã
- 100,000ãŠãŒã¶ãŒ
- 5-50 æçš¿/ãŠãŒã¶ãŒ
- 0-20 ã³ã¡ã³ã/æçš¿
- 0-100 like/æçš¿
ãŠãŒã¶ãŒã³ã³ãããŒïŒusersïŒã«ãIDãããŒãã£ã·ã§ã³ããŒã«ããŠãŠãŒã¶ãŒããã¥ã¡ã³ããä¿åããŸãã
æçš¿ã³ã³ãããŒïŒpostsïŒã«ãããããããã¥ã¡ã³ããä¿åããŸããäŸãã°æçš¿ã«é¢ããããã¥ã¡ã³ããä¿åããå Žåã
ãã¡ãã¯ãã³ã¡ã³ãã«é¢ããããã¥ã¡ã³ããä¿åããå Žåã
ãããŠãLikeã«é¢ããããã¥ã¡ã³ããä¿åããå Žåã
userããã¥ã¡ã³ããusesã³ã³ãããŒã«æ ŒçŽããŸããããã¯ç¹ã«åé¡ãããŸããã
usersã³ã³ãããŒããããŒãã£ã·ã§ã³ããŒã®idã§æ€çŽ¢ããŠuserãååŸããŠããŸããããã¯ç¹ã«åé¡ãããŸããã
æçš¿ãpostsã³ã³ãããŒã«ç»é²ããŸãããããç¹ã«åé¡ãããŸããã
æçš¿è ã®IDã§ãusersã³ã³ãããŒããPKã§ããidã§ãã£ã«ã¿ãŒããŠããŠãŒã¶ãŒåãååŸããŸããããã¯ç¹ã«åé¡ãããŸããã
æçš¿ãšã³ã¡ã³ãæ°ãšLikeæ°ãååŸããããã«ãpostsã³ã³ãããŒããPKã§ããpostIdã§ãã£ã«ã¿ãŒããŠãæ å ±ãååŸããŸãããããç¹ã«åé¡ãããŸãã
Facebookã®ãããããŒãžã®çšã«ãã©ããŒããŠãããŠãŒã¶ãŒã®æçš¿äžèŠ§ãšåæçš¿ã®ã³ã¡ã³ãæ°ãšLikeæ°ãååŸããŸãã åæçš¿ã®æçš¿è åãšã³ã¡ã³ãæ°ãLikeæ°ãååŸããããã«ãæçš¿æ°åç¹°ãè¿ãã¯ãšãªãå®è¡ããŸãã ããã¯èªã¿åãæ°ãå€ããªãæ§èœåé¡ã«ã€ãªãããŸãã
æçš¿ãååŸããããã«ãpostsã³ã³ãããŒããPKã§ã¯ãªãuerIDã§ãã£ã«ã¿ãªã³ã°ãããŠããŸããããã¯å šä»¶ã¢ã¯ã»ã¹ããå¿ èŠããããéåžžã«ã³ã¹ããããããŸãã
ã³ã¡ã³ããpostsã³ã³ãããŒã«ç»é²ããŸããããã¯ç¹ã«åé¡ãããŸããã
ç¹å®ã®æçš¿ã«ã€ããããã³ã¡ã³ãäžèŠ§ãååŸããããã«ãpostsã³ã³ãããŒããpkã®postIDã§ãã£ã«ã¿ãªã³ã°ããŠæ å ±ãååŸããŠããŸããããã¯ç¹ã«åé¡ãããŸããã
ã³ã¡ã³ãè åãååŸããããã«ãã³ã¡ã³ãæ°åusersã³ã³ãããŒããpkã§ãã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŠããŸããããã¯N+1ã«ãªãã®ã§ã³ã¹ãããããåé¡ããããŸãã
Likeãpostsã³ã³ãããŒã«ç»é²ããŸããããã¯ç¹ã«åé¡ãããŸããã
ç¹å®ã®æçš¿ã«çŽã¥ããLikeãpostsã³ã³ãããŒããPKã®postIdã§ãã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŠããŸããããã¯ç¹ã«åé¡ãããŸããã
Likeè åãååŸããããã«ãLikeæ°åusersã³ã³ãããŒããpkã§ãã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŠããŸããããã¯N+1ã«ãªãã®ã§ã³ã¹ãããããåé¡ããããŸãã
åæçš¿ã®æçš¿è åãšã³ã¡ã³ãæ°ãLikeæ°ãååŸããããã«ãæçš¿æ°åç¹°ãè¿ãã¯ãšãªãå®è¡ããŸãã ããã¯èªã¿åãæ°ãå€ããªãæ§èœåé¡ã«ã€ãªãããŸãã
çŽè¿ã®æçš¿ãååŸããããã«ãpostsã³ã³ãããŒããpkã§ã¯ãªãtypeã§ãã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŠããŸããããã¯éåžžã«ã³ã¹ããããããŸãã
äžåã®ãªã¯ãšã¹ãã§è€æ°ã®ã¯ãšãªãå®è¡ããåé¡ããããŸããããŸããããŒãã£ã·ã§ã³ããŒã§ã¯ãªãæ¡ä»¶ã§çµã蟌ããããŒãã£ã·ã§ã³ã¹ãã£ã³ãåŒãèµ·ããåé¡ã®ããã¯ãšãªããããŸããã ããã§ã¯ãããããæ¹ä¿®ããŠãããŸãããã
æ¹ä¿®ãããã«ã¯éæ£èŠåã掻çšããŸãã ã¹ãã¢ãããã·ãŒãžã£ãŒã䜿ãããšã§ãåãããžã«ã«ããŒãã£ã·ã§ã³å ã§éæ£èŠåãã§ããŸãã
- Javascriptã§æžã
- äžã€ã®è«çããŒãã£ã·ã§ã³ã察象ãšãã
- ã¢ãããã¯ãã©ã³ã¶ã¯ã·ã§ã³ãšããŠå®è¡ãã
Facebookã®ãããããŒãžã®çšã«ãã©ããŒããŠãããŠãŒã¶ãŒã®æçš¿äžèŠ§ãšåæçš¿ã®ã³ã¡ã³ãæ°ãšLikeæ°ãååŸããŸãã
ãããŠåé¡ãšãªã£ãã®ã¯äžèšã§ããã
åæçš¿ã®æçš¿è åãšã³ã¡ã³ãæ°ãLikeæ°ãååŸããããã«ãæçš¿æ°åç¹°ãè¿ãã¯ãšãªãå®è¡ããŸãã ããã¯èªã¿åãæ°ãå€ããªãæ§èœåé¡ã«ã€ãªãããŸãã
åé¡ã®æ¬è³ªçã«ã¯ãåæçš¿ãã³ã¡ã³ãæ°ãšLikeæ°ãä¿æããŠããªãããã«ããã®ããŒã¿ãååŸããã®ã«è¿œå ã§ã¯ãšãªãå®è¡ããªããã°ãããªãããã§ããèšãæããã°ãåæçš¿ã«ã³ã¡ã³ãæ°ãšLikeæ°ãããã°ãã¯ãšãªçºè¡æ°ãæžããããšãã§ããŸãã
ãã®åé¡ã解決ããããã«ãéæ£èŠåãããŠãååæçš¿ã«ã³ã¡ã³ãæ°ãLikeæ°ãæãããŸãã
ã³ã¡ã³ãããã¥ã¡ã³ãã«ãã³ã¡ã³ãè åãæãããŸãã
Likeããã¥ã¡ã³ãã«ãLikeãã人ã®ååãæãããŸãã
éæ£èŠåãããåŸã¯ãAzure Functionã§ãuserããŒã¿ã®æŽæ°ãããªã¬ãŒã«ããŠãpostsã®ããã¥ã¡ã³ããæŽæ°ããããã«ããŸãããŠãŒã¶ãŒåãå€æŽãããå Žåã¯ãFunctionã§åæçš¿ã®ãŠãŒã¶ãŒåãåæ ãããŸãã
æ¹ä¿®åãããã§ããã
æ¹ä¿®ããããšãPostsã³ã³ãããŒããæ å ±ãäžåºŠååŸããã°ããã ãã«ãªããæ§èœæ¹åãå®çŸã§ããŸããã
130ms/619.41RU
ããã 28ms/201.54RU
ã«æ¹åããŸããã
ããã«ã¯æ¬¡ã®åé¡ããããŸããã
ã³ã¡ã³ãè åãååŸããããã«ãã³ã¡ã³ãæ°åusersã³ã³ãããŒããpkã§ãã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŠããŸããããã¯N+1ã«ãªãã®ã§ã³ã¹ãããããåé¡ããããŸãã
æ¹ä¿®åã¯ãã®ãããªå®è£ ã§ããã
æ¹ä¿®åŸã¯ã·ã³ãã«ãªå®è£ ãšãªããŸããã
23ms/27.72RU
ããã 4ms/7.72RU
ã«æ¹åããŸããã
ããã«ã¯æ¬¡ã®åé¡ããããŸããã
Likeè åãååŸããããã«ãLikeæ°åusersã³ã³ãããŒããpkã§ãã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŠããŸããããã¯N+1ã«ãªãã®ã§ã³ã¹ãããããåé¡ããããŸãã
æ¹ä¿®åã¯ãã®ãããªå®è£ ã§ããã
æ¹ä¿®åŸã¯ã·ã³ãã«ãªå®è£ ãšãªããŸããã
59ms/58.92RU
ããã 4ms/8.92RU
ã«æ¹åããŸããã
åæçš¿ã®æçš¿è åãšã³ã¡ã³ãæ°ãLikeæ°ãååŸããããã«ãæçš¿æ°åç¹°ãè¿ãã¯ãšãªãå®è¡ããŸãã ããã¯èªã¿åãæ°ãå€ããªãæ§èœåé¡ã«ã€ãªãããŸãã
æ¹ä¿®åã¯ãã®ãããªå®è£ ã§ããã
æ¹ä¿®åŸã¯ã·ã³ãã«ãªå®è£ ãšãªããŸããã
306ms/2063.54RU
ããã 83ms/532.33RU
ã«æ¹åããŸããã
åã³Q3ãèŠãŠã¿ãŸããããããã«ã¯æ¬¡ã®åé¡ãæ®ã£ãŠããŸããã
æçš¿ãååŸããããã«ãpostsã³ã³ãããŒããPKã§ã¯ãªãuerIDã§ãã£ã«ã¿ãªã³ã°ãããŠããŸããããã¯å šä»¶ã¢ã¯ã»ã¹ããå¿ èŠããããéåžžã«ã³ã¹ããããããŸãã
æ£èŠåã厩ããŠæ å ±ããŠãŒã¶ãŒã³ã³ãããŒã«ãæçš¿æ å ±ãããããŸãã
äžèšã®ããŒã¿ãå ¥ããã®ã«åãããŠãuserããã¥ã¡ã³ãã«é ç®ãè¿œå ããŸãã
ãã®å¯Ÿå¿ã«ãããåç §å ã®ã³ã³ãããŒãUsersã«å€ãããŸãã
ããŒã¿æœåºããUsersã³ã³ãããŒã®ããŒãã£ã·ã§ã³ããŒuserIdãšãªãããæ§èœãæ¹åããŸãã
28ms/201.54RU
ããã 4ms/6.46RU
ã«æ¹åããŸããã
æåŸã«æ¬¡ã®åé¡ããŸã æ®ã£ãŠããŸãã
çŽè¿ã®æçš¿ãååŸããããã«ãpostsã³ã³ãããŒããpkã§ã¯ãªãtypeã§ãã£ã«ã¿ãªã³ã°ããŠçµæãååŸããŠããŸãã> ããã¯éåžžã«ã³ã¹ããããããŸãã
ããã§å¿ èŠãªããŒã¿ã¯ãçŽè¿ã§æŽæ°ãããããŒã¿ã§ãããããã§ãChange Feedãå©çšããããŒãã£ã·ã§ã³ããŒãtypeã«ããŸãã
Azure CosmosDBã¯ãChange FeedãæäŸããŠãããå€æŽãããããã¥ã¡ã³ãã¯å€æŽãããé ã«äžŠã¹æ¿ããããäžèŠ§ãšããŠåºåãããŸãã
ããŒã¿ãæŽæ°ããããšãfeedã³ã³ãããŒãæŽæ°ãããããã«ããŸãã
æ¹ä¿®åã¯æ¬¡ã®ããã§ãã
ãã®å¯Ÿå¿ã«ããã次ã®ãããªåŠçã«å€ãããããŒãã£ã·ã§ã³ããŒã«ãããã£ã«ã¿ãªã³ã°ãèãããã«ãªãæ§èœæ¹åãã§ããŸããã
83ms/532.33RU
ããã 9ms/16.97RU
ã«æ¹åããŸããã
æ¹ä¿®ããçµæã次ã®ãããªã³ã³ãããŒãšããã¥ã¡ã³ããä¿åããããã«ãªããŸããã
ãããå®çŸãããããã«ã¹ãã¢ãããã·ãŒãžã£ãŒã䜿çšããããŒã¿ãããŒã¯æ¬¡ã®ããã«ãªããŸããã
ãããã®å¯Ÿå¿ã«ãããæ§èœã¯ããã¥ã¡ã³ãæ°ããŠãŒã¶ãŒæ°ãæçš¿æ°ã«äŸåããªããªããŸããã 10ãŠãŒã¶ãŒã§ã100äžããŒããŒã§ãã¯ãšãªã¬ã€ãã³ã·ãŒã¯ãã€ã§ãåãã«ãªããŸãã