#isucon2をやりましたの話 - tagomorisのメモ置き場
ããã®ç¶ãã主ã«åçã¨ãããæ¯ãè¿ãã¨ãããã«ã¤ãã¦æ¸ãã¾ããã(誰ãã次åã£ã½ãä½ããããããã¦ãããããããªãã¨ãã®ããã«ï¼)
åå 層ã«ã¤ãã¦
ä»å¹´ã¯ããããªè¨èªã使ãããã®ã§å¤§å¤ããã£ãã§ããï¼
å®éãåç¥ãããã°ããã¨ãããã®ã§ã¯ãªãã¦ãåã³ãã¥ããã£ã®é©åãªå±¤ã«å±ããã¨ããã®ã¯ãªããªãé£ãããåç¥ããåå ç³ãè¾¼ã¿åä»ã¾ã§ã¯ããæéã空ããããªãããåå è ç·æ°ã¯ããããå¢ãããªãã*1ã
ããã§ãåå 層ãåºããã®ã¯è¯ããã¨ã ã¨æããã¤ãã³ãã¨ãã¦å¥½è©ãªã¾ã¾åæ°ãéãããã¨ã大äºãªããããªãããªã誰ãããã«ããã
åé¡è¨å®ã«ã¤ãã¦
ä»åã¯(æçµçã«)ãã©ã³ã¶ã¯ã·ã§ã³ãåé¡ã«ãªããã®ã«ãããããã®ããã«ä¸¦å度ã¯ã¬ãã³ã¨ä¸ããããã¨ããã®ã¯æåã«æ±ºãã¦ããã
ããå®éã«ã¯å®è£ ã®ããã©ããããæèãã¦ãªãã£ããä»ã«ãã¦æãã¨ãè¼ã¹ãã°å»å¹´ã® isucon1 ã®ãã§ãã«ã¯è¶ ç°¡åã§ãããã¨ããä½æ¥éã®è¦ç©ããé£ãããªã¼ã¨ãããããã®ã¸ãã¯ãã諦ãã¦é½åº¦ä¹ãåãããç¡ãããªã¨ããæ°ããããäºåã®æ¨æ¸¬ãã ãã¶é£ãã*2ã
æ´æ°ç³»ã®ä»æ¹ãåç
§ã¯ã¨ãªããããªãã®éè¦åº¦ã¯æã£ã¦ãã¦ã»ããã¨ããããæ¬å½ã¯æåã¯ãã£ã³ãã¼ã³ãµã¤ãçãªãã¼ã¸ãããã«ããã²ã¨ã¤ä½ã£ã¦ããã«å¯¾ãã¦ã¢ãã¿ãããª*3並å度ã®åç
§ããããã¾ããããæåã®å£ã«ãªãããã«ãããããªãã¿ãããªãã¨ãèãããèãããã©ãåæç¶æ
ã§ãã³ããFAILEDã«ãªããªãããã«ã§ããèªä¿¡ããªãã£ãã®ã§ããã¾ããã
ããã£ã³ãã¼ã³ãµã¤ãã»ãã±ãã販売ãµã¤ããè½ã¡ããããªãã¨ãããï¼ãã¨ããåé¡è¨å®ã§ããã°ããããã®ãã¢ãªã ã£ããããåæç¶æ
ã§ãã³ããFAILããªãã£ã¦åææ¡ä»¶ã¯åé¡ãä½ãä¸ã§ãªããªãé«ãéå£ãªã®ã§ãããã諦ããã®ãé¸æè¢ã«å
¥ãããããã©ãããéè¦ãªã®ããªã
ãã±ããã®å¸é ã©ã³ãã ã¯ãã§ãã¯ããã¤ããã§ã³ã¼ãããã°ã£ã¦ããこの行ã®æå¾ã®&&ããæ¬å½ã¯ || ã§ãªãã¨ããããã£ããããã¯ç´ ç´ã«åçâ¦â¦ã ãã©ãåªåããfujiwaraçµã®è§£æ³ã¯ã©ã³ãã å¶ç´ãã£ã¦ã使ããã®ã§ãæçµçãªçµæã«ã¯ããã¾ãé¢ä¿ãªãã£ããã²ã¨å®å¿ã
ã©ãããå¶ç´ãã©ãã«è¿½å ããã°ã©ãã ãé
ããªãï¼æ¹åãé£ãããªããã¨ããã®ã¯æ®æ®µã¨å®å
¨ã«éæ¹åã®æèãè¦æ±ãããã®ã§ãé ã®ä½æã¨ããããæ®æ®µã®æèéç¨ãè¦ç´ãã«ãã ãã¶è¯ããã¬ã¼ãã³ã°ã«ãªããããã¨ããæ°ã¯ãããæºåæéä¸ãæåã¯æ©è½è¿½å ã«æ¸æã£ã¦ããsugyanã¯ããååã®ã¿ãªããããæ¬çªãè¿ä»ãã«ã¤ãã¦ã©ãã©ã極æªãªæ©è½ãææ¡ãã¦ããã®ã¯è¦ã¦ãã¦ãã¤ã«æ¥½ããã£ãã
ãã¡ãããã¡ã°ã極æªãªã®ã¯kazeburoããã§ãããããã
ãã³ããã¼ã¯ãã¼ã«ã®ä½ãã«ã¤ãã¦
ä½æ¥æéå
ã¯1åèµ°è¡ãæ¡ç¹æã¯3åèµ°è¡ã¨ãããã¤ãã¾ãæ¯å3åã¯ãã£ã¦ãããªãã¨æãã®ã§ãã¿ã¼ã§ã¯ãã£ãã¨æããã ãã©ãå
é¨çã«ã¯ç°¡åã«ã©ã¡ããæå®ã§ããããã«ãªã£ã¦ãã®ã§ã両æ¹ã®ãã¿ã³ã¨åºãã¦ããã°ããã£ãã
ä»ã«ãé«ã並å度ã§ã®è² è·ãããããåæç¶æ
ãã§ãã«ããã³è³¼å
¥ãã§ãã«ãçæéã ãèµ°ãããã¢ã¼ãããã£ã¦ãããã£ãããã
ãã®ãããããã³ããã¼ã¯ãã¼ã«å´ã®å é¨æ§é ã¨ãã¦ã¯å²ã¨ããã°ã£ã¦ä½ã£ã¦ãã£ãã®ã«ããããä½æ¥è ã®ä¾¿å©ãã«ãã£ã¼ãããã¯ããã¨ããã¾ã§é ãåããªãã£ãããããããªãã©ã¡ã¼ã¿ã§ãã³ãããã§ãã¯ãèµ°ãããããããã«ãªã£ã¦ãããªãããããæä¾ãã¹ãã ã£ããªãã
ãã¨ããã·ã¥ãã¼ã(ãã¼ã ã®ç¶æ³ä¸è¦§ãåºã¦ããç»é¢)ã®ä½ããã¨ãããæ
å ±ã®è¡¨ç¤ºããã¾ãã¡ã ã£ãã
ä»åã¯å¶éã¢ã¼ãã¨ããã®ãä½ã£ã¦ãã¦ãè¦ããã«æ¡ç¹ç¨ã®ã¢ã¼ãã§æå¹ã«ããã¨é常ã¦ã¼ã¶ãç»é¢ããç· ãåºã*4ãã ãã©ãããã¤ãæå¹ã«ãªã£ã¦ããå ´åã¯å¸¸ã«ç»é¢ã«ããåºã¦ããããã«ãã¹ãã ã£ãããããã¦ããã°æ¡ç¹æã®ãã³ãèµ°è¡ãã¹ããªãã£ãã®ã«ãä¸è¬ã®ãã¼ã«ã ã¨æãä»ã(ãããããªã)ãã¨ã§ããã°ãã°ãå®è£
ããã¨å²ã¨å¿ãã¦ãã¾ããåçã
ã¨ã©ã¼ã®è¡¨ç¤ºã«ã¤ãã¦ãå°ãåé¡ãããã«ã¯ãããããã¥ã¡ã³ãåã¨ãä¸åãããã«å®è£
ãã¦ããã¨ãnode.jsã®ã³ã¼ã«ããã¯ã§æ¸¡ã£ã¦ãã err ã¨ããå¤æ°ã®å
容ãè´å½çã¨ã©ã¼/ã·ã¹ãã ã¨ã©ã¼ãªã®ããããã¨ããã§ãã¯å
容ã®ã¨ã©ã¼ãªã®ããã¿ãããªã®ãã©ãã©ãåãããªããªã£ã¦ãããããããããã¯ããªãã¸ã§ã¯ããªã®ããªãã¸ã§ã¯ãã®ãªã¹ããªã®ããæååãªã®ããæååã®ãªã¹ããªã®ããã¨ãã
æ´ã«ããã¾ãèããã«é常ã®çµæãã¼ã¿(ã³ã¼ã«ããã¯ã®ç¬¬2å¼æ°)ã«å
¥ãããã³ããã¼ã¯ã®ãã§ãã«ãåºåãã失æã«ã¤ãã¦ã error ã¢ããªãã¥ã¼ãã«å
¥ãã¡ãã£ããããããã§ä½è¨ã«ãªã¹ã«ããã°ããæ¸ãã¦ã¦ä½ãã©ãã ãã·ãªã¢ã©ã¤ãºãããç®çã®æååãåºã¦ããã®ãã¿ãããªã
ãããªãã¨æ¸ãã¦ãã¨ç´ 人ãã¨æããããã§ãããæéãç¡ãä¸ã§æ¸ããã¨ããããã°ãã°ãæ¸ããã¿ããã«ãã£ã¦ãã¨ãã£ã±ãè¯ããªãã§ããã
åæ£ãã³ããã¼ã¯å¦çã¯ã©ã¹ã¿ã«ã¤ãã¦
ä»åã®ãã³ããã¼ã¯ãã¼ã«ã¯ããã³ããã¼ã¯èµ°è¡ã¨ãããæ°åç§ãæ°åç¨åº¦ã®çãã¿ã¹ã¯ãããããåæ£ä¸¦åå®è¡ããããã®ã¯ã©ã¹ã¿ãä½ã£ãã¨ãã£ã¦ãéè¨ã§ã¯ããã¾ãããæéã«å¯¾ãã¦ã¯å²ã¨ããããã°ã£ã¦ä½ã£ãã
å®ã¯ã¨ã¼ã¸ã§ã³ãå´ã¯ç«ã¡ä¸ããã°ç«ã¡ä¸ããã ãç°¡åã«ã¯ã©ã¹ã¿ã«è¿½å ã§ããæ§é ã«ãªã£ã¦ã¦ãæåã«ä¸ãã¦ãã£ããã¼ãæ°ã§è¶³ããªããã°ä½ã£ã¦ããã·ã³ã追å ããããã¨æã£ã¦ããããããããªãã¦æ¸ãã ãã©ã
å»å¹´ã¯ãã³ãèµ°è¡å¯¾è±¡ã¨ãã³ãå®è¡å´ã®ãã¼ããåºå®ã®ãããã³ã°ã§è¨å®ã«æ¸ãã¦ãã£ã¦ãè² è·ãé«ããªã£ãããã¦ã調æ´ãé常ã«å°é£ã¨ããåé¡ããã£ãããããã¾ãé »ç¹ã«ãã³ããèµ°ãããããããé«å¾ç¹ã®ãã¼ã ãé£ããã£ããããã¨ãäºãã«è² è·ã帯åãé£ãåãã¨ããåé¡ããã£ãã
ä»å¹´ã¯ãã³ãèµ·åæã«æ¯å空ãã¦ãããã¼ãããé ã«ã²ã£ã±ã£ã¦ãã¦ãã³ãå¦çããã£ã¹ããããããããããã³ãå¦çã¿ã¹ã¯ã種é¡æ¯ã«åãã¦ããããåå¥ã«ãã£ã¹ãããããã¨ããç¡é§ã«ã¹ã±ã¼ã©ãã«ãªæ§æã«ãªã£ã¦ãã®ã§ããã¤ã«å®å¿ã ã£ãã
ã¾ããå®éã«ã¯äºåã«è¨å®ããã¹ããã(ã»ã¼CPUæ°ã¨ã¤ã³ã¼ã«)ãå²ãå½ã¦ãã ãã®ç°¡æçãªè² è·åæ£ã ãã©ãããããªãåå¥ã®ã¿ã¹ã¯ãCPUããã¯ãªã®ã帯åããã¯ãªã®ããäºåã«è¨å®ãã¦ããã¦ããã®ã¸ããæ´ã«åçã«è³¢ãå²ãå½ã¦ããã¨ãã§ãããããã§ãå°ãé¢åããããªãã
ãã®ãããã®ã³ã¼ãã®è©³ç´°ã¯ããã¨ããã«å°ã詳ããæ¸ãäºå®ããããã®ã§ãæ©ä¼ãããã°ãã¡ããã©ããã
èªåãææ¦ããã¨ããã
ã£ã¦æ¸ãããã¨æã£ããã©ãèªåãããèãããISUCONã¯1ã2ãããã¡ã©ã対象ã¢ããªãé«éåããããã¨æã£ã¦è§¦ã£ããã¨ããªãã£ãï¼ ãããã·ãã¦ãã ã£ãï¼ æ¸ããªãï¼
â¦â¦ã¨ããã®ã¯åè«ã¨ãã¦ããã¾ãå¾ä»ããªãä½ã§ãè¨ããããã£ã¦ããã®ãè¨ãã®ã¯èãããªã£ãã®ã§ããããé
ãããããã«ã³ã¼ããããã®ã¯ãããã§ããã£ããã ãã©ãªãï½
å°æ¥çã«èªåãåå ã§ããISUCONããã£ã¦ããæ¥ã夢ã«è¦ã¦å¾
ã£ã¦ãããã¨ãããã¾ãï¼
*1:ä»®æ³ãµã¼ã1å°ãæ°è¦ã«ãããã¤ããã®ã¯ãã¼ã¿ã³ãã¼ãããã®ã§ãã£ããæéãããããããã100å°åã¨ãªãã¨â¦â¦ãããã¦åæ¥ã«åé¡ã«ä¿®æ£ãå ¥ã£ãããããã
*2:ãã®ä¸ããã®è¦ç©ã精度ãä¸ãã¦ããªãã«ãä»ã®å½¹ã«ç«ããªãï½
*3:æ´æ°ç³»ãã1æ¡ããã大ãã
*4:ããã¦ãã³ãã®å®è¡è¨å®ãæ¡ç¹ãã§ã¤ãºç¨ã®ãã®ã«å ¥ãæ¿ãã