
ãã€æé©åããå¿ èŠããããŸããïŒ
æé©åãéå§ããåã«æåã«èªåããå¿ èŠãããæåã®è³ªåã¯ãçŸåšã®ããã©ãŒãã³ã¹ãèªåã«åã£ãŠãããã©ããã§ãã ããšãã°ãã²ãŒã ãéçºããŠããå Žåããå¹³åãããŒããŠã§ã¢ããã³ãäžãèšå®ã§ã®æå°FPSã¯ã©ããããã§ããïŒ ããšãã°30ãäžåã£ãå Žåããã¬ã€ã€ãŒã¯ããã«æ°ã¥ãã§ãããã å¹³åãã¬ãŒã ã¬ãŒãã60 FPSã§ãã£ãŠããã²ãŒã ã®é°å²æ°ã決å®ããã®ã¯æå°ã®FPSã§ã-ãæžéããŸãã¯ãã¹ã ãŒãºã«åäœãã ãããWebãµã€ãã®å ŽåããŠãŒã¶ãŒãããŒãžãéãæéã¯ã©ããããã§ããïŒ ãã®æéãäžç¬ã®å ŽåããŠãŒã¶ãŒã¯ããã¢ã¯ãã£ãã«ãªãããµã€ãã§ã®äœæ¥ã«æºè¶³ããã§ãããã
èªåïŒãŸãã¯äžåžããããïŒãçŸåšã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«æºè¶³ããŠããªãããšãç解ããŠãããšããŸãã ã©ããã
1.枬å®ãã
æé©åã¯æ°åã§å§ãŸãå¿ èŠããããŸã ã ã¢ããªã±ãŒã·ã§ã³ã®åã ã®ãã©ã°ã¡ã³ãã®å®è¡æéããªãå Žåãå¹ççã«æé©åã§ããŸããã äœãèµ·ãã£ãŠããããå®å šã«ææ¡ããŠããªããããå®éã«ã¹ããŒããŠã³ãããã©ã°ã¡ã³ããããæé©åã容æãªãã©ã°ã¡ã³ããé·æéæé©åã§ããŸãã
éçºæã«ã¯ããããã¡ã€ãªã³ã°ã䜿çšããŠããã«ããã¯ãç¹å®ãããšäŸ¿å©ãªå ŽåããããããŸãã äŸãã°ãPHPã®å ŽåãFacebookã®xhprofãšããåªãããããã¡ã€ã©ãŒããããŸãïŒ åœŒãã¯ããã§äœåºŠã æžããŠããŸãïŒã 倧èŠæš¡ã§éŠŽæã¿ã®ãªããããžã§ã¯ããããå Žåããããã¡ã€ã©ãŒã¯ãã³ãŒãã®ããã«ããã¯ãããå Žåãããããã°ããèŠã€ããå¯äžã®æ¹æ³ã§ãã ãã ãããéåžžã®ããããã¡ã€ã©ãŒã¯ãããã€ãã®çç±ã«ãããæ¥åžžã®éçºã§ã¯ã»ãšãã©äœ¿çšãããŸããã
-æããè¯ãããããã¡ã€ã©ãŒã§ãããã¢ããªã±ãŒã·ã§ã³ã®é床ãå€§å¹ ã«äœäžãããŸã
-çµæãåŸãã«ã¯ãå¥ã®å Žæã«è¡ãããåã ã®èŠèŽè ãå®è¡ããå¿ èŠããããŸã
-çµæèªäœãã©ããã«ä¿åããå¿ èŠããããŸãïŒéåžžããããã¡ã€ãªã³ã°ããŒã¿ã¯ããªãã®ã¹ããŒã¹ãå æããŸãïŒã
ãããã®ïŒããã³ãããããä»ã®ïŒçç±ã«ãããWebéçºçšã®åå¥ã®ãããã¡ã€ãªã³ã°ãŠãŒãã£ãªãã£ã®ä»£ãããšããŠãããããããããã°ããã«ãããµã€ãã®éçºããŒãžã§ã³ïŒ äŸ ïŒã«çµã¿èŸŒãŸããããŸããŸãªæŠèŠïŒè©³çŽ°ã衚瀺ããæ©èœïŒã³ãŒãã«çŽæ¥çµã¿èŸŒãŸããŠããã¡ããªãã¯ã éåžžãããã¯SQLã¯ãšãªã®å®è¡åæ°ãšå®è¡æéã§ãããä»ã®ãµãŒãã¹ïŒmemcacheãªã©ïŒãžã®ã¯ãšãªã®å®è¡åæ°ãšå®è¡åæ°ã¯ããã»ã©äžè¬çã§ã¯ãããŸããã ã»ãšãã©ã®å Žåãåèšå®è¡æéããµãŒããŒããã®å¿çã®ãµã€ãºãããã³æ¶è²»ãããã¡ã¢ãªã®éã枬å®ãããŸãã
ã»ãšãã©ã®ã²ãŒã ã§ã¯ãããããã°ã³ã³ãœãŒã«ããæå¹ã«ã§ããŸãããã®ã³ã³ãœãŒã«ã§ã¯ãååãšããŠãFPSã®æ°ãã·ãŒã³äžã®ãªããžã§ã¯ãã®æ°ãªã©ã確èªã§ããŸãã æ¯èŒçæè¿ãŸã§ãMinecraftã«ã¯åãã¬ãŒã ã®æéã®ååžã瀺ããã€ã¢ã°ã©ã ãå«ãŸããŠããŸããã1ã€ã®è²ã¯ãç©çåŠãã«è²»ããããæéãè¡šãããã1ã€ã®è²ã¯ã¬ã³ããªã³ã°ã«è²»ããããŸããã
ããŸããŸãªãã®ã枬å®ã§ããŸãããWebãããžã§ã¯ãã§ã¯ãã»ãšãã©ã®æéãããŒã¿ããŒã¹ãŸãã¯ä»ã®ãµãŒãã¹ãžã®ã¢ã¯ã»ã¹ã«è²»ããããŸãã æ¢æã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããªãå ŽåããŸãã¯ãæ°ã«å ¥ãã®ãã¬ãŒã ã¯ãŒã¯ã«ãããã°ããã«ãå«ãŸããŠããªãå Žåããã®ãããªã³ãŒãã§ãã©ãããã§ãéå§ã§ããŸãã
<?php function sql_query($query) { $start = microtime(true); $result = mysql_query($query); $GLOBALS['SQL_TIME'] += microtime(true) - $start; return $result; }
2.èšã£ãã枬å®ïŒ
ãããã£ãããã¹ãŠãã¿ã€ããŒã§èŠãããŠããŠãéçºç°å¢ã§ã¯ãã¹ãŠãçŽ æŽãããããæ¬çªã§ã¯ãã¹ãŠãéãã®ãïŒ ã ãããããªãã¯ééã£ãŠæž¬å®ããŠããããŸãã¯ãããããã¹ãŠã§ã¯ãããŸãã...çç£ã®çç£æ§ã枬å®ããã®ã¯ã©ãã§ããïŒ ããšãã°ãPHPã§èšè¿°ããå ŽåãUDPãããã³ã«ã§åäœããå®çšŒåç°å¢ã§ã®ããã©ãŒãã³ã¹ã枬å®ããããã®PinbaãšåŒã°ãããã°ãããããŒã«ããããŸãã ãã®ããŒã«ã«åºã¥ããŠãéçºäžã«ãããã°ããã«ãçµäºããããã«ãæŠéãç°å¢ã§ã¿ã€ããŒã®ãªã¢ã«ã¿ã€ã çµ±èšãååŸã§ããŸãã ãã®æ¹æ³ã§ããã©ãŒãã³ã¹ã枬å®ããããšããªãå Žåããµã€ããå®éã«ã©ã®ããã«æ©èœãããã«ã€ããŠå€ãã®èå³æ·±ãããšãããããŸãã
ãµãŒããŒããã®ããŒãžã®æ»ãæéã¯100ããªç§ã§ãããããã§ãããŒãžãé·æééããŠãããšããäžæºã¯ãããŸããïŒ åºåã®ãµã€ãºãšãã©ãŠã¶ã«çµã¿èŸŒãŸããããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã枬å®ããŸãã ããããããªãã®ãµã€ãã¯éçãªããŒã¿ãè¿ãããã«CDNãå¿ èŠãšããŸãããã¶ãããªãã¯ãã ãã¹ãã£ã³ã°ãããã€ããŒãå€ããå¿ èŠãããã ãã§ãã ããã«ããã¯ãã©ãã«ãããã枬å®ãããŸã§ãæšæž¬ããã§ããŸããã
3.æ ãè ã«ãªã
å€ãã®å Žåããã®ããŒãžã®ãã¹ãŠã®ãŠãŒã¶ãŒã®ã³ãŒãã«ã¯ã倧ãããŠäžå¿ èŠãªäœãã®åæåãããããšãããããŸãã ããšãã°ãèªåå±éã®æ段ãšããŠã倩æ°äºå ±ã®WebèŠæ±ããšã«ç°ãªããµã€ãã«ç»ãããŸãã¯ãããžã§ã¯ãã®ã«ãŒãã«ãããgit pull origin masterãã«ãã£ãŠå®è¡ããã倧èŠæš¡ãªinitã¡ãœããã ããã©ãŒãã³ã¹åæã®ããã»ã¹ã§ã¯ãã³ãŒãããåçŽã«ç Žæ£ãããããifã§ã©ãããããããšãã§ããæ¬åœã«å¿ èŠãªå Žåã«ã®ã¿å¿ èŠãªéšåãå«ããããšãã§ããå€ãã®ããšã«åºããããŸãã
ããŒãžã®å€§ããªãã©ã°ã¡ã³ããå®è³ªçã«å€æŽãããªãããšãéåžžã«äžè¬çã§ãïŒããšãã°ãããŒãžã®ãããããŒããšãããã¿ãŒãïŒã ãã®å Žåãæçœãªè§£æ±ºçã¯ãäºåã«ã³ã³ãã³ããçæãããããã£ãã·ã¥ã«å ¥ããŠæ¯ååæç»ããªãããšã§ãã
ã³ãŒããšå®éã®ç掻ã®äžã§æ ããŠãã ããã åžžã«åãäœæ¥ãè¡ããªãïŒèª°ãå¿ èŠãšããªãïŒããŠãŒã¶ãŒã®ãªã¯ãšã¹ãã«çããããã«æ¬åœã«å¿ èŠãªããšã®ã¿ãè¡ããæ®ãã¯è¡ããªãããŸãã¯èª°ãã«å§ä»»ããªãïŒããšãã°ããéãããéåžžã«ææã§ã¯ãªãïŒé 延ããããã«ã¯ãç©äºããŠã§ãäžã§è¡ãã®ã§ã¯ãªããcronã«å§ä»»ããå¿ èŠããããŸãã
4.ïŒéåæïŒãããåŠçã䜿çšãã
ããŸããŸãªãããžã§ã¯ãã§ã1ã€ã®èŠæ±ã§ãã¹ãŠãäžç·ã«åŠçãã代ããã«ãæ°åãæ°çŸã®ã¬ã³ãŒããäžåºŠã«1ã€ãã€åŠçãããšãããããããªèšèšãšã©ãŒã«å¯Ÿå¿ã§ããŸãã ããšãã°ãããŒãžäžã®30åã®è£œåã®ããŒã¿ã衚瀺ããå¿ èŠãããå ŽåããSELECT ... FROM table WHERE id = ...ããšãã圢åŒã®30ã®ã¯ãšãªã§ã¯ãªãããSELECT ... FROM table WHERE id INïŒ...ïŒããšãã圢åŒã®ã¯ãšãªã1ã€äœæããŸãã ã»ãšãã©ã®ããŒã¿ããŒã¹ã§ã¯ãçµæã30è¡ã®ã¯ãšãªãšçµæã1è¡ã®ã¯ãšãªïŒïŒïŒã®éã«é床ã®éãã¯ãŸã£ãããããŸããã ååãšããŠããããåŠçãè¿œå ããããã«å¿ èŠãªã³ãŒãã®å€æŽã¯éåžžã«å°ãªãããã®ä»£ããã«ãäœçŸåããæã«ã¯äœçŸåãé床ãåäžããŸãã ããã¯ãSQLã¯ãšãªã ãã§ãªããå€éšãŸãã¯å éšãµãŒãã¹ãžã®åŒã³åºãã«ãé©çšãããŸãã ãããã¯ãŒã¯ã«æ¥ç¶ãããšãåžžã«ãªã¯ãšã¹ãã®åŠçã«å€§å¹ ãªé 延ãçºçãããããWebã®ç¶æ ã§ãªã¯ãšã¹ãã®æ°ãæå°éã«æããããšãéåžžã«æãŸããã§ãã
ãããåŠçãé«éåããå¥ã®æ¹æ³ã¯éåæã§ãã èšèªã§èš±å¯ãããŠãããç°ãªããµãŒãã¹ãžã®èŠæ±ã1ã€ã«ã°ã«ãŒãåããŠéåæã«å®è¡ã§ããå Žåãå¿çæéãå€§å¹ ã«ççž®ããããµãŒãã¹ãå€ãã»ã©ã²ã€ã³ã倧ãããªããŸãã ããã¯MySQLã«ã¯ããŸãåœãŠã¯ãŸããŸããããããšãã°äœéã®Google Datastore APIã䜿çšããå Žåã«ã¯ååã«åœãŠã¯ãŸããŸãã
5.è€éã§ãããã«ããæ··ä¹±ãåçŽåãã
äŸãæããŸããããäœããå®è¡ããããããïŒããããïŒæ£ããå®è¡ããããæ°çŸäžè¡ãåæã«ã¹ãã£ã³ãããããªãé ã SQLã¯ãšãªããããŸãã è€éãªSQLã¯ãšãªãæé©åããã«ã¯ãæåã«åçŽåããå¿ èŠããããŸããåé·ãªãã®ããã¹ãŠãå Žåã«ãã£ãŠã¯ããŒãã«å šäœãŸãã¯ãã¹ããããéžæãç Žæ£ããŸãã äžèŠãªãã®ããã¹ãŠåé€ããŠåããŠãæå³ã®ããæé©åãå®è¡ã§ããŸãã ããããªããšãç¡é§ã«å€ãã®æéãè²»ãããŠãã©ã°ã¡ã³ããæé©åã§ããŸãããããã¯æçµçµæã«åœ±é¿ããŸããã å€ãã®å Žåãç¹ã«MySQLã䜿çšããå Žåãã¯ãšãªãããã€ãã®åçŽãªã¯ãšãªã«åå²ããŸããåã¯ãšãªã¯å ã®ã¯ãšãªãããã¯ããã«é«éã«åäœãããããæºè¶³ã®ãããœãªã¥ãŒã·ã§ã³ã«ãªããŸãã
å€ãã®äººã ã«ãã£ãŠéçºãããã·ã¹ãã ã§ã¯ãæ確ã§é©åã«èšèšãããã³ãŒãã®ä»£ããã«ããæŸèæãéãããããšããããããŸãã ããã¯ãããã°ã©ããŒã®è³æ Œãäœãå Žåã ãã§ãªããéåžžã®å埩éçºã§ãçºçããŸãããã ããäžå®ã®ãªãã¡ã¯ã¿ãªã³ã°ããªãå Žåã«éããŸãã åé¡ããããã®å Žæã®ããããã«ããããšãããã£ãå Žåãæåã«ã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãå°ãè¡ãå¿ èŠããããŸãããŸãããã®åäœãç解ãã次ã«ãæããã«äžèŠãªãã®ãããã«æé©åãŸãã¯ç Žæ£ã§ããŸãã åã«ã³ãŒããæŽçããã ãã§ãã³ãŒãã®ããã©ãŒãã³ã¹ãæºè¶³ã§ãããã®ã«ãªãã察å¿ãããã©ã°ã¡ã³ãã®æé©åãäžèŠã«ãªãããšããããããŸãã
6.ã芪æãªããæ©èœ
0.1ïŒ ã®ãŠãŒã¶ãŒã䜿çšããæ©èœããããŸãããåæã«ãµãŒããŒã§ã®å¿çæéãååã«ãªãæ©èœãããããšãçºèŠããå¯èœæ§ã¯ååã«ãããŸãã ãã®å Žåããã®æ©èœãåèããŠä»ã®ãããå®ãããœãªã¥ãŒã·ã§ã³ãæäŸãããããã®æ©èœãããã©ã«ãã§ç¡å¹ã«ããŸãã ãŠãŒã¶ãŒããããå¿ èŠãšããå Žåã圌ã¯ãããåã³ã€ããŸãã
7.ãã£ãã·ã¥
ä»ã«äœã圹ã«ç«ããªãå ŽåããŸãã¯çµæçã«å€åããªãããŒã¿ãããå Žåã¯ããã£ãã·ã¥ããŠãã ããã ä»ã®ãã¹ãŠã®ãªãã·ã§ã³ã䜿ãæããããå Žåã«ã®ã¿ãã£ãã·ã¥ã䜿çšãã䟡å€ããããšäž»åŒµããã®ã¯ãªãã§ããïŒ äºå®ãå¯å€ããŒã¿ããã£ãã·ã¥ã«å ¥ãå§ãããšããã«ããã£ãã·ã¥ã®é¢é£æ§ãç£èŠããå¿ èŠããããŸãããããã¯éåžžã«é£ãããšã³ãžãã¢ãªã³ã°äœæ¥ã§ãã
äŸïŒäž»ããŒIDã§ããŒãã«tableã«åã ã®ã¬ã³ãŒãããã£ãã·ã¥ããŸãã 1ã€ã®ã¬ã³ãŒã-ãtable_ <id>ã圢åŒã®ãã£ãã·ã¥å ã®1ã€ã®ããŒã ããã§ãç¹å®ã®æ¡ä»¶ã«å¯ŸããŠè€æ°ã®ã¬ã³ãŒããæŽæ°ããå¿ èŠããããšæ³åããŠãã ããïŒãããŒãã«ãæŽæ°ãã<æ¡ä»¶>ãïŒã ãã®å Žåããã£ãã·ã¥ããã©ãã·ã¥ããæ¹æ³ã¯ïŒ åçŽã ãéåžžã«æéãããã決å®ã®1ã€ã¯ããã®æ¡ä»¶ãäºåã«éžæãããã£ãã·ã¥å ã®ãã¹ãŠã®ãšã³ããªãIDã§ãã©ãã·ã¥ããŠãããæŽæ°ãè¡ãããšã§ãã ããããselectããã£ãã·ã¥ã®ãã©ãã·ã¥ãããã³æŽæ°ã®éã«ãå¥ã®ãªã¯ãšã¹ããããŠã§ããžãããå Žåã¯ã©ãã§ããããïŒ ãã®ãããªãã®ïŒ
æåã®ãªã¯ãšã¹ãïŒ
1. <condition>ã®ããŒãã«ããIDãéžæããŸã 2. memcacheã®åé€ID 6.ããŒãã«ã»ããã®æŽæ°... where <æ¡ä»¶> | 2çªç®ã®äžŠåã¯ãšãªïŒ
3. memcache get "table_N"-空ããã£ãã·ã¥ã¯æ¢ã«ãªã»ãããããŠããŸã 4. id = Nã®ããŒãã«ãã...ãéžæããŸã 5. memcache set "table_N"-å€ãããŒã¿ããã£ãã·ã¥ã«èšå®ããŸã |
éåžžã«ãã¡ããšèšè¿°ãããã³ãŒãã®ãªã1ã€ã§ã¯ãªã2ã€ã®ããŒã¿ãœãŒã¹ã®ååšã¯ãå¿ ç¶çã«ãããã®éåæåã«ã€ãªããããã£ãã·ã¥ã®å Žåããµã€ãäžã®äžæŽåãŸãã¯å€ãããŒã¿ããå£ãããã«ãŠã³ã¿ãŒãªã©ã®äžå¿«ãªã¢ãŒãã£ãã¡ã¯ãã«ã€ãªãããŸãã

ãããã«
ããã§ãäž»ã«PHP + MySQLãã³ãã«ãæãäžè¬çãªãã®ãšããŠãïŒWebïŒã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããåºæ¬çãªæ¹æ³ãæ€èšããŸããã ç§ã¯å人çã«æé©åã®ããã«äžèšã®ã¢ãããŒãã䜿çšããŸããããããŸã§ã®ãšããããããžã§ã¯ããäœåããæã«ã¯äœååãé«éåããããã«å€ãã®åªåãªãã§ç®¡çããŸããã èšäºãæé©åã®æ¹æ³ãæããŠããªãå Žåãå°ãªããšããããããªãïŒããã³ããªãã®ååïŒãæ£ããæ¹åã«æŒãé²ããäžçãå°ãè¯ããªãããšãé¡ã£ãŠããŸãã
*æåã®å³ã¯ãã®ããŒãžããåãããŠããŸã ïŒGoogleã«ããïŒ