ã¯ã¦ãªããã¯ãã¼ã¯ã®é¢é£ã¨ã³ããªã¼æ©è½éçºãPFI ããã¨ã®å宿
ã¯ã¦ãªããã¯ãã¼ã¯ã«é¢é£ã¨ã³ããªã¼ãé ä¿¡ããæ©è½ã追å ãã¾ããã詳ãã㯠åç¥æ¥è¨ã§ã
ãã®é¢é£ã¨ã³ããªã¼ã¯ãæ ªå¼ä¼ç¤¾ããªãã¡ã¼ãã¤ã³ãã©ã¹ãã©ã¯ãã£ã¼ (ä»¥ä¸ PFI) ã®æè¡è ã®ã¿ãªããã¨ä¸ç·ã«éçºãã¾ããã鱿«ã«2æ³3æ¥ã§äº¬é½ã§å宿ããã¦ã³ã¢é¨åãä½ãããã®å¾äº¬é½ã¨æ±äº¬ã«åããã¦ãªã³ã©ã¤ã³ã§é£çµ¡ãåããªãã2é±éã»ã©ä½ãè¾¼ã¿ããã¦ã仿¥ãªãªã¼ã¹ã§ãã
ãã®å宿ã§ã¯ä½ãã¼ã ãã«åããã¦ãä»åã®é¢é£ã¨ã³ããªã¼ã®æ©è½ä»¥å¤ã®éçºãè¡ã£ã¦ãã¾ãããã®è¾ºã®ææã¯ã¾ã徿¥ã«ãªãªã¼ã¹ã§ããã®ã§ã¯ãªããã¨æãã¾ãã
ã¯ã¦ãªããã¯ãã¼ã¯ã®ä¸ã¤ã®åé¡ã¨ãã¦ãæã®ã¨ã³ããªã¼ããã¼ã¿ãã¼ã¹ã«åããã¦ãã¾ãã¨ããç¹ãããã¾ããããã®åé¡ã®è§£æ±ºçã¨ãã¦ã®é¡ä¼¼è¨äºæ½åºãããããæ¤ç´¢æ©è½ã®å¼·åã以åããèãã¦ãã¾ãããPFI ã®ã¡ã³ãã¼ã®ã¿ãªããã¯æ å ±æ¤ç´¢æè¡ã®ã¹ãã·ã£ãªã¹ãã§ããã¢ã«ãããã¯ãªç ç©¶ã®ææã製ååãéãã¦å¸å ´ã«åºãã¦ããããã¨ããæãã PFI ã®ã¿ãªããã®æ±ã«ããã¾ããPFI ããã®æè¡åã¨ãã¯ã¦ãªã®ãµã¼ãã¹éçºåãä½µããã°èãã¦ãããã¨ãå®ç¾ã§ããã®ã§ã¯ãªããã¨æããå宿ã§ã¯ããããã¼ãã«ãã¾ããã
ç¾å¨ã¯ã¦ãªããã¯ãã¼ã¯ã®æ°ãããã¼ã¸ã§ã³ãéçºãã¦ãã¾ããåå®¿ã®ææç©ã¯æ°ãã¼ã¸ã§ã³ã§ãªãªã¼ã¹ããããã¨ãæã£ã¦ããã®ã§ãããé¢é£ã¨ã³ããªã¼æ©è½ã¯æãã®ã»ãéçºãã¹ã ã¼ãºã«é²ã¿ç²¾åº¦ãè¯ãåºãã®ã§ãç¾è¡ãã¼ã¸ã§ã³ã«æè¼ãã¦ãªãªã¼ã¹ãã¾ããã
ã·ã¹ãã éçºã®è£è©±
é¢é£ã¨ã³ããªã¼ã¯ãPFI ã® CTO ã®å¤ªç°ãã (kzk ãã)ãåç°ããã¨èªåã® 3人ã®ãã¼ã ã§éçºãã¾ãããåç°ãããã¤ã³ãã¯ã·ã³ã°ã¨é¡ä¼¼è¨äºæ¤ç´¢ã®ã³ã¢é¨åã太ç°ããã¯åç°ããããµãã¼ããã¤ã¤ãC++ ã§æ¸ãããã¨ã³ã¸ã³ããµã¼ãã¼ã«è¼ã㦠API åããä¸éé¨åãèªåã¯ã¯ã¦ãªããã¯ãã¼ã¯ãããã¼ã¿ãæ½åºå å·¥ãã¦åºãé¨åãã¢ããªã±ã¼ã·ã§ã³é¨åãæ å½ãã¾ããã
ãã¼ã¿ã®å å·¥ã«ã¯ã以åã«ä½ã£ã Hadoop Streaming ç¨ã®ã©ã¤ãã©ãªãå½¹ã«ç«ã¡ã¾ãããHadoop ã¯ä»åã¯å©ç¨ãã¦ããªãã®ã§ãããMySQL ããæ½åºãããã¼ã¿ã¯è»¢ç½®ã¤ã³ããã¯ã¹ã®ã¤ã³ãã¯ãµã¸æ¸¡ãå½¢å¼ã«å¤æãããå¿ è¦ããããHadoop (MapReduce) ã¯ãã¨ãã¨ãã®ç®çã®ããã«ä½ããã¦ãããã¨ããã£ã¦ãéè¯ãã©ã¤ãã©ãªã ããæµç¨ãããã¨ãã§ãã¾ãããMySQL ããã®ãã¼ã¿æ½åºã¯ MySQL ã® C API ã§ã·ã³ãã«ãª SQL ã§ã¹ããªã¼ã ã§å¼ãåºãããã«ããã¹ããªã¼ã ããã®ã©ã¤ãã©ãªã«æ¸¡ã㦠Perl ã§å å·¥å¦çãã¾ãã
æ½åºãããã¼ã¿ããåç°ãããéçºããã¤ã³ãã¯ãµã«å ¥åããã¨é¡ä¼¼è¨äºæ½åºç¨ã®è»¢ç½®ã¤ã³ããã¯ã¹ãã§ããããã¾ãããã®ã¤ã³ããã¯ã¹ã使ã£ã¦æ¤ç´¢ãããã¨é¡ä¼¼è¨äºãå¾ããã¾ããã¢ã«ã´ãªãºã ã®è§£èª¬ã¯ãããããããåç°ããæ¬äººããã¦ãããããããã¾ããã
C++ ã§æ¸ãããã¨ã³ã¸ã³ã¨ãã¯ã¦ãªããã¯ãã¼ã¯ã® Perl ã®ã³ã¼ãã®çµã³ã¤ãã«ã¯å¤ªç°ããã®ææ¡ã§ Thrift ãå©ç¨ãã¾ãããThrift 㯠Facebook ãéçºãå ¬éãã¦ããå¤è¨èª RPC ãã¬ã¼ã ã¯ã¼ã¯ã§ããThrift ã使ã㨠C++ ã§æ¸ããããã¡ã¤ã³ãã¸ãã¯ã TCP/IP ã® RPC çµç±ã§ Perl ããå¼ã³åºããã¨ãã§ãã¾ãããããã忣ãªãã¸ã§ã¯ãæè¡ãå¤è¨èªã«å±éãããã¬ã¼ã ã¯ã¼ã¯ã§ãã(Thrift ã«ã¤ãã¦ã¯æ¬¡åã® WEB+DB PRESS ã®é£è¼ã§è§£èª¬ãã¦ã¿ããã¨æã£ã¦ãã¾ãã)
Thrift ã§ãããããã«ãã¹ã¬ãããªæ¤ç´¢ãµã¼ãã¼ã«é¡ä¼¼è¨äºæ¤ç´¢ã¨ã³ã¸ã³ãè¼ãã¦ãPerl ããå ¥åãä¸ã RPC ã§çµæãå¾ã¾ããå¾ãããçµæã MySQL ä¸ã®ãã¼ã¿ã¨ä»ãåããã¦æçµçãªåºåã¨ãã¦å å·¥ãããã¼ã¸ã«åºãã¾ãã
åºæ¬çã«ã¯ããããªã·ã¹ãã ã§ãããã®æé ã確ç«ããã¾ã§ã«ã¯ãããªã«æéã¯ããããªãã£ãã®ã§ãããåé¡ã¯ç²¾åº¦ãåºãã¨ããã§ãããã¯ã¦ãªããã¯ãã¼ã¯ã®è²ã ãªãã¼ã¿ãåºããããã¨ã³ã¸ã³å´ã®ã¢ã«ã´ãªãºã ã調æ´ããªããã®è©¦è¡é¯èª¤ã§ãããå宿æçµæ¥ã®ååä¸ã«ãã¤ãã«æºè¶³ã®ãããã¿ã¼ã³ãåãã£ã¦ããµã¼ãã¹åã®ç®å¦ãç«ã¡ã¾ãããå°ãæé²ç«ã¡ãããé°å²æ°ã ã£ããã¨ããããé常ã«å¬ããç¬éã§ããã
é¢é£ã¨ã³ããªâæ©è½ã®ä»å¾
ã²ã¨ã¾ããªãªã¼ã¹ã¯ã§ãã¾ãããã課é¡ãããã¾ããä»ã®ã¨ããèãã¦ããã®ã¯ä»¥ä¸ã®ãããªãã®ã§ãã
- ãã§ã«æ¶å»ããã¦ãã¾ã£ã¦ãããã¼ã¸ãªã©ãæ½åºããã¦ãã¾ãã®ã§ã宿çã«ãã¼ã¸ã®çåãã§ãã¯ãè¡ãå¿ è¦ãããã¾ããç¹ã«ãã¥ã¼ã¹è¨äºãªã©ã¯ãä¸å®æé以ä¸éå»ã®è¨äºã¯åç §ã§ããªããã®ãå¤ã空æ¯ããç®ç«ã¡ã¾ãã
- ãªãªã¼ã¹ã®ææ³ã¨ãã¦ããã¼ã¸ã®ä¸ã«é ç½®ãã¦æ¬²ããã¨ãã声ãå¤ãããã ãã¦ãã¾ããæ¤è¨ãããã¨æãã¾ãããã ãæ°ããæ©è½ã®éçºç´å¾ã¯æ¯åº¦ã®ãã¨ãªã®ã§ãããããã¾ã§ã®ä½¿ãæ¹ã®æ £æ§ãæ®ã£ã¦ãã¦èªåã客観çã«å¤æãã¥ããã¨ããç¹ãããã¾ããä¸é±éç¨åº¦æ§åãè¦ãä¸ãã¬ã¤ã¢ã¦ããæ¤è¨ãããã¨æãã¾ãã
- 精度ã®åä¸ãããã¯ãã¼ã¯ãããããã¤ãã¦ããã¨ã³ããªã¼ã¯ãããªãé«ã精度ã§é¢é£ããã¨ã³ããªã¼ãæ½åºãããã¨ãã§ãã¦ãã¾ããåé¡ã¯ããã¯ãã¼ã¯ãã¼ã¿ãå°ãªãå ´åã§ããããã¯ãã¼ã¯ãå°ãªãã¨é¢é£è¨äºãåºãããã®å ¥åãè¶³ããã«ç²¾åº¦ãè½ã¡ã¦ãã¾ãã¾ããããç¨åº¦ãã¼ã¿ãå°ãªãã¦ã精度ãé«ããªããããªå·¥å¤«ã¯æ½ãã¦ããã®ã§ãããã¾ã ã¾ã æ¹åãå¿ è¦ããã§ãã
- API ã®æä¾ãé¢é£ã¨ã³ããªã¼æ©è½ã¯ API ã¨ãã¦æä¾ããå¤é¨ããã°ã©ã ãããå©ç¨ã§ããããã«ãããã¨æã£ã¦ãã¾ããããã©ã¼ãã³ã¹ã精度ãªã©ããã°ããæ§åè¦ãã¦åé¡ãªãããã§ããã°ãRSS ãã£ã¼ãã JSON ã§ã®åºåãæä¾ã§ããã°ã¨æã£ã¦ãã¾ãã
ãã®è¾ºãã¯æ°ã·ã¹ãã ã®éçºã¨ä¸¦è¡ãã¦ç¶ç¶ãã¦åãçµãã§ããããã¨æãã¾ãã
é¡ä¼¼è¨äºæ½åºç¨ã®ã¨ã³ã¸ã³ã¯æ±ç¨çã«ä½ããã¦ããã®ã§ããã®ã¨ã³ã¸ã³ãå©ç¨ãã¦ä»ã®æ©è½ãä½ãäºãã§ãããã§ããå¹¾ã¤ã試ãã¦ãã¾ãããçµæ§é¢ç½ãç©ãåºã¦ãã¦ãã¾ãã®ã§ã楽ãã¿ã«ãã¦ãã¦ãã ããã
PFI ã®ã¿ãªããã¨ã®ãä»äº
PFI ã®ã¿ãªããã¨ã®å宿ã¯ã¨ã¦ãåºæ¿çã§ãããICPC ä¸ç大ä¼åºå ´ã¬ãã«ã®ããã°ã©ãã®ã¿ãªããã®ã³ã¼ãã£ã³ã°ã¹ãã¼ãã®éããæ£ç¢ºããåé¡è§£æ±ºè½åã®åéã«ã¯ãã ãã é©ããããã°ããã§ãããå人çã«ã¯ãæ°å¦çã«åé¡ãè§£ãããã®ã¢ããã¼ãã確ç«ãããçè«ã使ã£ã¦åé¡ãç´°ããç´°ååãã¦ããæé ãæ¢åã®çè«ã«ã¨ããããã«æ°ããçºæ³ã§çè«èªä½ãä½ãæ¿ãã¦æ¤è¨¼ãã¦ããèãæ¹ãªã©ããªãã»ã©ãããã£ã¦é²ããã®ã ãªãã¨ããã®ãèã§æããããã®ã¯é常ã«å¤§ããªåç©«ã§ããã
æ©ã飯ã§ãé ã飲ãã§ããéãã¢ã«ã´ãªãºã ã®æ¹åã®è©±é¡ããæ°å¦ã®è©±é¡ãé£ã³äº¤ã£ã¦ãã¾ãããæ´ã«é©ãããã¨ã«ãã¿ããªãé ã飲ãã§è¯ãæ°åã«ãªã£ã¦ããã«ãé¢ããããã®ã¾ã¾ãªãã£ã¹ã«ãã©ã£ã¦ã³ã¼ããæ¸ãã¦ãã¾ãããã¿ããªæ¬å½ã«ããã°ã©ãã³ã°ã好ããªãã ãªãã¨ãè¦ã¦ããèªåãå¬ãããªãã¾ããããã®ãã³ã·ã§ã³ã«å½ã¦ããã¦ãèªåãé ã£ã±ãã£ãã¾ã¾æåæã¾ã§éçºãããããã¾ããã
PFI ã§ã¯ãã¢ããã°ã©ãã³ã°ã§ã®éçºãåºæ¬ã®ããã§ããã¼ã ã¯ã¯ã¦ãªã¹ã¿ãã1å + PFIã¹ã¿ãã2åã¨ãã3åã®ãã¼ã ãããã¤ãä½ã£ã¦é²ãã¾ãããPFI ã®ç¤¾é·ã®è¥¿å·ããã "ICPC ã§å¦ãã ãã¨ã¯ãããã§ãããã¼ã ã¯ã³ãã¥ãã±ã¼ã·ã§ã³ãã³ã¹ãã«ãªããã«çç£æ§ãå éããããã¨ãPFI ã¯ãããä¼ç¤¾ã§ãå®ç¾ãããã¨ãç®æ¨ã«ãã妥åããªãã" ã¨ãããã¨ã以åã«ãã£ããã£ã¦ããã®ã§ãããã¾ãã«ããããã¹ã¿ã¤ã«ã§ã®éçºã ã£ãããã«æãã¾ããéä¸ä½ãããã®ã¢ã«ã´ãªãºã ãªã©ã§éçºãè¡ãè©°ã¾ãã¨ãããä¸äººã®ã¹ã¿ãããçè«ãæç¤ºãè°è«ãå§ã¾ããè°è«ã®ä¸ããæ¹åæ¡ãçã¾ãã¦ãããã«ãããã³ã¼ãã«åæ ããã¾ãããã®ç¹°ãè¿ãã§ãã
ãã¢ããã°ã©ãã³ã°ããäºãã®çç£æ§ãé«ããã¨ããã®ã¯èªåãçµé¨æ¸ã¿ã§ããããå ±éã®æåä½é¨ã¨é«åº¦ãªå ±éç¥èãããäºäººã§ã®ãã¢ããã°ã©ãã³ã°ã¯ããã°ãææãã¦ããããã¨ããæ¸ããã³ã¼ããä¸çªå°ãªãæéã§å ±æã§ããã¨ãã£ãä¸è¬çãªãã¢ããã°ã©ãã³ã°ã®ã¡ãªãããéãã«è¶ ããççºçãªçç£æ§ãçã¿åºãã®ã ãªã¨æå¿ãã¾ããã
PFI ããã¨ã®å宿ãçµé¨ãã¦èªåã®æé·ç®æ¨ããã¯ã¦ãªã®éçºã¬ãã«ã®ç®æ¨ããã£ã¨é«ãä½ç½®ã«å¼ãä¸ãããã¨ãã§ãã¾ãããããã®ã¤ã¡ã¼ã¸ãã¯ã£ããã¨å ·ä½çã«ãªã£ãããã«æãã¾ããããããæå³ã§ããé常ã«åç©«ã®å¤ãå宿ã§ããã
ä»å¾ã«ã¤ãã¦
ä»å PFI ããã¨ã¯æ¦ç¥çææºã交ããã¦ãã¾ããä»åã®é¢é£ã¨ã³ããªã¼æ©è½ã ãã§ãªãããäºãã®é·æãæ´»ãããæ°æ©è½ãæ°ãµã¼ãã¹ã®éçºãä¸ç·ã«é²ãã¦ããããã¨æã£ã¦ãã¾ãã