ããã«ã¡ã¯ãHabrïŒ ç§ã®ååã¯ãã£ãã»ã¹ã¿ã³ã³ã§ãããã³ãã³äºåæã®Badoo BIããŒã ã§åããŠããŸãã åœç€Ÿã§ã¯ããŠãŒã¶ãŒã¢ã¯ãã£ããã£ã®ã§ããã ãå€ãã®æž¬å®ãå®è¡ããããšè©Šã¿ãŸããã ããã¯å€ãã®å°é家ã«ãšã£ãŠå¿
èŠã§ãïŒéçºè
ã¯ã³ãŒãã®äœæ¥èœåããã¹ããã補åããŒã ã®ååã¯ã¢ã€ãã¢ã®å€©æã確信ããŠããŸãã
ã¬ãŒããèžãã§ä»ã®äººã«è©±ããªãã®ã¯è¯ããªããšèããŠããã®ã§ãããã«ã€ããŠäœåºŠãæžããŸããã
ã¢ãã€ã«åæ
æ°å¹ŽåãBadooã¯ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§ã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãåæããå¿
èŠããããŸããã 誰ãããã¿ã³ãã¯ãªãã¯ããç»é¢ãããŒãããã¢ããªã±ãŒã·ã§ã³ãéããã¡ãã»ãŒãžãæžããã³ã«ãç§ãã¡ã¯ãã®ããšã«é¢ããéç¥ãåãåããåãã§ããŸããã 1æ¥ã«æ°ååã
éããªãããŠãŒã¶ãŒãç»é¢ã®æåŸãŸã§ã¹ã¯ããŒã«ããããå¥ã®ãŠãŒã¶ãŒã®ãããã¡ã€ã«ã衚瀺ããããã®ãããéä¿¡ããããããªã©ãããç¹æ®ãªã±ãŒã¹ã§åã¶å¿
èŠããããŸããã ããããããã¯è£œåããŒã ã®ååã«ãšã£ãŠã¯ååã§ã¯ãããŸããã§ããã ããã§ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã远跡ããã·ã¹ãã ã§ããHotpanelãååŸããä»æ¥ã§ã¯1æ¥ãããåèš120ååã§çŽ320çš®é¡ã®éç¥ãåãåããŸãã ãã®ãããªçŸãããé ãããšã¯åãªã眪ã§ãããããç§ãã¡ã¯ééããªãããã«ã€ããŠæžããŸãã
Hotpanelã€ã³ã¿ãŒãã§ãŒã¹ã®äž»èŠã³ã³ããŒãã³ãã®1ã€ã¯ãããŸããŸãªå
èš³ã®æéå¥ããã³æ¥å¥ã®ãã£ãŒãã§ãã åçã§èª¬æã§ãããã®ãåã®èšèã§èª¬æããŠãã ãããããã¯æå³ããªããªãã®ã§ãããã«ïŒ
ãã£ãŒã«ãã®ä»»æã®çµã¿åããã§ãã£ã«ã¿ãªã³ã°ã§ããŸãïŒ
èæ¯
ç§ãå¯äžã®éçºè
ã§ãããã¡ãã»ãŒãžãã»ãšãã©ãªãã£ããã®ãããžã§ã¯ãã®å€æãã«ããã£ã¹ãã¬ã€ã®åé¡ãéåžžã«è¿
éã«ãå®äŸ¡ã«ãæã£ãŠè§£æ±ºããŸãããã æ®å¿µãªãã ãããŸãå¹ççã§ã¯ãããŸããã§ããã Redisã§ã¯ãåã¿ã€ãã®ã¡ãã»ãŒãžãšåæéåäœã«ç¬èªã®HASHMAPãããããã®ããŒã¯ãã£ãŒã«ããšãã®å€ã§ãããå€ã¯ãã®ãããªãã£ãŒã«ãã®çµã¿åãããæã€ã¡ãã»ãŒãžãç§ãã¡ã«å±ããåæ°ã§ãã
äŸïŒ
HASHMAP: hourly:view_screen:2016-09-17
åHASHMAP: hourly:view_screen:2016-09-17
- å
éšã®ããŒã¯æ¬¡ã®ããã«ãªããŸãã*ïŒ
screen_name=view_photo,previous_screen=welcome,platform=android,app_version=1.2.3,gender=male
- åèšå€ïŒ1,500,000
ããã¯ã2016幎9æ17æ¥ã«Androidããã€ã¹ã®ç·æ§ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ããŒãžã§ã³1.2.3ãéããåçãæ€èšããããã«æ¥ãã ããšãæå³ããŸããã
åãæ¥ã«Androidããã€ã¹ã®å¥ã®ç·æ§ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ããŒãžã§ã³1.2.3ãéããåçãèŠãããã«æ¥ãã å Žå ã HINCRBYããããå€ã¯1500001ã«ãªããAndroidã®åçãæ
åœãããããã¯ããããŒãžã£ãŒã«å€§ããªåã³ããããããŸããããŒãžã§ã³1.2.3ã
Redisã®è¿ãã«PythonãšFlaskãµãŒãã¹ããããRedisã«æ¥ç¶ãããŠããŸãããHGETALLã¯ãã¹ãŠã®èŸæžãhourly:view_screen:2016-07-17
by hourly:view_screen:2016-10-17
ã€ã®çŽ æŽãããJSONæ§é ãäœæããŠããŒãžããŸããããã¯ãã¹ãŠdc.jsã®ã¯ã©ã€ã¢ã³ãçšã§ãã ãã¡ãããå€ãã®æé©åããããŸãããããããã«ã€ããŠã¯ã話ãããŸããããããã¯ãã¹ãŠã**ãéãå»ã£ãæ¥ã
ã®åºæ¥äºã ããã§ãã
ãã¹ãŠãé©ãã¹ããã®ã§ããããçµã¿åããã¯ãããã§ããã é床ã¯é©ãã¹ããã®ã§ããïŒ dc.jsã®åºç€ãšãªãCrossfilterã¯d3ããã±ãŒãžã®äœæè
ã«ãã£ãŠäœæãããå¿çæéã¯30ããªç§æªæºã§ãïŒã äžè¬çã«ãæåã§ããã é·ããªãã
ãã®æåã¯ç§ãã¡ãå°ç¡ãã«ããŸããã ã¡ãã»ãŒãžã®çš®é¡ã®æ°ã®å¢å ãæ°ãããã£ãŒã«ããšå€ã®åºçŸã«ãããçµã¿åããã®æ°ã¯æ¥åäœã§ã¯ãªãæéåäœã§å¢å ããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšãæ·åã«ãªã£ãã ããšãã°ã åä¿¡ããJSONãªããžã§ã¯ãã®æ倧ãµã€ãºãå¶éãããªã©ããšããŸããã¯ãªå€©äºã«ã¶ã€ãããŸããã ããããç§ãã¡ã¯ãã®ãäžããã®ãµã€ã³ããç¡èŠããJSONãæçã«åå²ããŠã¯ã©ã€ã¢ã³ãã«æ¥çãããããªãããŒãªïŒç§ãã¡ã«æããïŒãœãªã¥ãŒã·ã§ã³ãæãä»ããŸããã å¥ã®æ·åã¯ãWebéçºéšéã®ååã®è³ªåã§ããããããªãã®ããŒãžã¯2åã§1.5ã®ã¬ãã€ãã®RAMãé£ã¹ãChromeã殺ããŸãããããã§ãšãããããŸãïŒ ã©ããã£ãŠãã£ãã®ïŒ ãããŠããªãããªãã¯ãŸã ç§ãã¡ã®ããã«åããŠããŸããïŒïŒã
ãã®æ¥ãšæ¥ã«ãå極åããæ¥ãçœããµããµããã客ãå€ã«Redisãšæ¿æãå§ããŸããã ã¡ã¢ãªæ¶è²»éãå¢å ãã192 GBã§ãããã»ã©å€ããªãããšãå€æããŸããã åå3æã®ç£èŠæ
åœè
ããã®é»è©±ã¯ãŸã£ããäžé©åã§ããïŒç§ã®1æ³åã®æ¯åã§ããããããããŸããã§ããïŒïŒã
äžè¬çã«ããŸãã«äžå±€éçŽã¯ãäžå±€éçŽã¯å€ãéãæãã§ããããäžå±€éçŽã¯å€ãéãæããªã ã ãšãã奜æ©ã§ãã è¡åããæã§ãã
ã·ã¹ãã èŠä»¶
ããã¯ãšã³ãã«ãã³ã°ã¢ãããã以äžãå®è¡ã§ããå¥è·¡ã®è¿·è·¯ãèŠã€ãããããŸãã¯èŠã€ããå¿
èŠããããŸããã
- ã«ãŠã³ã¿ãŒããŒã¿ã120æ¥éä¿åããŸãïŒããã¯çŽ1åã®ç°ãªãçµã¿åããã§ããéå§çž®åœ¢åŒã§ã¯çŽ27 GBã®ããŒã¿ã§ãïŒã
- ãã£ãŒã«ãã®ä»»æã®çµã¿åããããã³æ¥ä»ç¯å²ã§ãã£ã«ã¿ãªã³ã°ããŸãã 圢åŒã¯
field1 in ('val11', 'val12' ... ) AND field2 in ('val21', 'val22', ...) .... AND dt between x and y
ã€ã³ããã¯ã¹ãæããã§ããããšãããããŸãæ®å¿µãªãããç§ãã¡ã¯å©ããããŸããã çµæããã¡ã»ãããšããŠæ瀺ããŸãã ã¡ãã»ãŒãžã«8ã€ã®ãã£ãŒã«ããããå Žåããã£ãŒã«ãããšã«8ã€ã®èŸæžãçºè¡ããå¿
èŠããããŸãã åèŸæžã«ã¯ãå¯èœãªãã£ãŒã«ãå€ããšã«ã«ãŠã³ã¿ãŒãå«ãŸããŠããå¿
èŠããããŸãã éåžžã«ã€ãŸããªããã®ã§ããã°ãSQLã§ã¯æ¬¡ã®ããã«ãªããŸãã
select 'G1' as name, G1, SUM(M) from T WHERE D2 in (DQ2) and D3 in (DQ3) ... -- skip all filters related to G1 and p between PFrom and PTo group by name, G1 UNION ALL select 'G2' as name, G2, SUM(M1) from T WHERE D1 in (DQ1) and D3 in (DQ3) ... -- skip all filters related to G2 and p between PFrom and PTo group by name, G2 UNION ALL ... UNION ALL select 'GN' as name, GN, SUM(M1) from T WHERE D1 in (DQ1) ... and D(N-1) in (DQ(N-1)) ... -- skip all filters related to GN and p between PFrom and PTo group by name, GN UNION ALL select 'p' as name, p, SUM(M1) from T WHERE D1 in (DQ1) ... and Dn in (DQn) ... group by 'name', p
- æ°ãããã£ãŒã«ããšæ°ãããã£ãŒã«ãå€ãè¿œå ãããŠããè² æ
ããããªãã§ãã ããã
- æ°ããã¿ã€ãã®ã¡ãã»ãŒãžã衚瀺ãããŠãè² æ
ããããªãã§ãã ããã
- çµæãã»ãŒå³åº§ã«è¡šç€ºããŸããã€ãŸãããããã¯ãŒã¯ãå«ããŠå¹³åã§100ããªç§ãææªã®å Žå-2ç§éïŒãã®å ŽåãããŒãžã«ã¹ããã³ã°ãã€ãŒã«ããã蟌ã¿ãŸãïŒã
- æ倧1åéã§300äžã®æ°ããçµã¿åãããæ¿å
¥ã§ããŸãã
- éå»æ°æ¥éã®ããŒã¿ããã°ããåé€ã§ããŸãã
- ããã¯ãã¹ãŠãæ¢åã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãã€ãŸãã1å°ã®ãã·ã³ïŒ192 GBã®ã¡ã¢ãªã48é ã®çïŒãHadoopã¯ã©ã¹ã¿ãŒããŸãã¯æå
ã«ããExasolã¯ã©ã¹ã¿ãŒã§åäœããã¯ãã§ãã
- ããã¯ãã¹ãŠãµããŒãã容æã§ãèªåãç£èŠã§ããããã«ããå¿
èŠãããããªããªãã䜿ã£ãŠçã¿ãåŒãèµ·ãããã話ãããããªãããã«æŸæ£ããå¿
èŠããããŸãã
ç¶æ³ã®ç·©åïŒ
- çã®æ°žç¶æ§ã¯ãåå€æŽã®çŽåŸã«ããŒã¿ãä¿åããããã«å¿
èŠãããŸããã§ããã æ°ãããŠãããã¯1æéã«1åè¿œå ããããããããŒãåŸããã«ãã¹ãŠããã£ã¹ã¯ã«ä¿åããå¿
èŠããããŸããã ãã ããä¿åã«ãã£ãŠãããã¯ãããããšã¯ãããŸããã
- åãã£ãŒã«ãã®å€ã®æ°ã¯1000以äžã§ãã
- ãã£ãŒã«ãã®æ°ã¯100以äžã§ãïŒãããã¯ãã¹ãŠStringåã§ãïŒã
- ACLãªãïŒãŸã ïŒã
- ãã©ã³ã¶ã¯ã·ã§ã³ãªã©ã¯ãããŸãããåœç¶ãã«ãŠã³ã¿ãŒã¯ã¢ãããã¯ã«æŽæ°ããå¿
èŠããããŸãã
äžéçµè«ïŒ
- 100ããªç§ã§27 GBãåŠçã§ããã®ã¯ãcãªå§çž®ãŸãã¯cãªã€ã³ããã¯ã¹äœæããã³ãã¹ãŠã®CPUã®äœ¿çšã®å Žåã®ã¿ã§ãã
- Key-Valueã¹ãã¢ã¯åœ¹ã«ç«ã¡ãŸããã RedisãšTarantoolã®Luaã§å©çšã§ããããŸããŸãªã¹ã¯ãªããæ©èœã圹ç«ã¡ãŸããããããã¯ãŸã ã·ã³ã°ã«ã¹ã¬ããã§ãããæééãã«å€ãã®ããŒã¿ãåŠçããããšã¯ã§ããŸããã
- èŠä»¶ã®æ¡é
4ããã³5ã«ããããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãæ©èœããŸããã
- PrestoãImpalaãããã³ãããã®ãããªä»ã®äŒæ¥ã¯ããã¡ããããã§ããŠããŸããã100ããªç§ã§äœãã§ããŸããã ã¯ãããããŠåœŒãã®ããã«100mã®èšé²-ããã¯ã¹ãºã¡ã§éãæã€ãããªãã®ã§ãã HadoopãšMapReduceã«ã€ããŠã¯ãéåããããšããããŸããã
- DruidãInfluxDBã®ãããªããªãããŒã§èå³æ·±ãããšã¯ãããããã®åé¡ã解決ããã§ããããããããã¯è€éãããŸãã ãã®ããã«åå¥ã®ã¯ã©ã¹ã¿ãŒãã»ããã¢ããããæ¹æ³ã¯ãããŸããã§ããã ç§ã®ããæèœã§æ zyãªååã¯ãã§ã«ããã«ã€ããŠæžããŠããŸãã
- ããªãã¯ããããããããã¹ãŠæç³»åã®ããã«èãããããšã«æ°ã¥ããã§ãããã ã¯ããå®éã«ã¯ãæ£é¢ã ãã§ãªã暪é¡ã§ããããŸãã å®éãç§ãã¡ãæã£ãŠãããã¹ãŠã®ãã£ãŒãã¯ã1ã€ã®æç³»åã§ã¯ãªããæ°çŸäžã®çµã¿åããã®åèšã§ãã ãã®ãããæç³»åã¹ãã¢ãåé€ããŸããã
åºæã®æ害æ§ãšãã¹ãŠã®å¯èœæ§ããã¹ãããæéã®äžè¶³ãèæ
®ããŠãã€ã³ã¿ãã¥ãŒã§ãã®åé¡ã解決ããããã®ããŒã«ãèŠã€ãããšããã¿ã¹ã¯ãåçŽãªãã®ã«ããã®ã奜ãã§ããã ããããåªç§ãªåè£è
ã§ãããç§ã«å±ã¿ã«ãªãããšã¯äœãèšããŸããã§ããã ãã®ãããæåŸã®åžæã§ããElasticsearchã¯ããã€ãŠã¯ãã¡ã»ããæ€çŽ¢ãç®çãšãããã®ã§ãããããååã®ç æ°·è¹ãã«ã¯é
ãããŸããã
ãã®æãŸã§ã«ãååããã®çµ¶ãéãªãå±èŸ±ãRedisã®æ¯æ©ã®æŠãã«ããéåžžã®ç¡ç äžè¶³ãæºåãã§ããŠèªç±ãªäœããèŠã€ããããšãžã®çµ¶æçãªåžæããããŠãšããµã€ãã£ã³ã°ãªåé¡ã解決ããããšã«æ£çŽã«çŽç²ã«ãªã¿ã¯ã®èå³ãæããããŸããïŒç§ã®ç®ã¯è¡ã§ãã£ã±ãã§ãããç§ã®å¿ãæ··ä¹±ããèªåã§è§£æ±ºçãäœæããããšã«ããŸããã
ç§ã¯å®¶ã§æžããŸããããããŠããã§ã«èšåããã1æ³åã®æ¯åã¯ç§ãã«ããŒããŸããã ç§ãã¡ã¯ã圌ãå€æ¹7æã«å®ããã«ç ã£ãŠããéãç§ã¯åœŒã®ä¿è²åã«åº§ã£ãŠãç¶èŠªã®åŸ¹å€ãè£
ã£ãŠã³ãŒããæžããŠããããšã«åæããŸããã ãã®æ°é±éã¯ããŸã ç¶ã®éã«å¹žãã§ãããšèšæ¶ãããŠããŸãã
æ°å¹Žåã æ°ããåæããŒã¿ããŒã¹ãéžæããŠãããšããã¡ã¢ãªã®ã¿ã§åäœãããããã®ãœãªã¥ãŒã·ã§ã³ã®é床ã«é©ããããŸããã ãããããOïŒNïŒæéã§çµæãçæããããŒã¿æ§é ãäœæãããšããã¢ã€ãã¢ã¯ãã€ã³ã¿ãã¥ãŒã§ã¯éåžžã«å€±æããŸãããå®éã«ã¯ããã¯ããã»ã©æ²ããããšã§ã¯ãããŸããïŒãããã®Nåã®èŠçŽ ããã¹ãŠã¡ã¢ãªã«å
±åããŠããå ŽåïŒã
å®éã®ãšãããããŒã¿ã®æ¿å
¥æ¹æ³ãšæœåºæ¹æ³ã®2ã€ã®åé¡ããããŸããã
ã«ãŠã³ã¿ãŒã®ååŸ
ããŒã¿ã¹ãã¬ãŒãžçšã«ãšã¬ã¬ã³ããªæ§é ãèæ¡ãããŸããã ç¹å®ã®ã¿ã€ãã®ã¡ãã»ãŒãžã®ãã¹ãŠã®éèšã¯ãåå¥ã®ãªããžã§ã¯ãã«æ ŒçŽããããææ¡ãããŸããïŒãã¥ãŒããšåŒã³ãŸãããïŒã æé«ã¬ãã«ã§ã¯ããããã®ãã¥ãŒãã®ããããããããã®ååããããããŒã«ãªã£ãŠããŸãã
åãã¥ãŒãã¯ãæéïŒãã®å Žåã¯æ¥ãšæéïŒã§ããŒãã£ã·ã§ã³åå²ãããŸãã åããŒãã£ã·ã§ã³ã«ã¯ããŠããããçŽåã«æ ŒçŽãããŸãã æ°ãããã£ãŒã«ãã®è¿œå ã¯ããããã®ãã£ãŒã«ãã®ãããã«æ°ããèŠçŽ ãç°¡åã«è¿œå ããããšã§è§£æ±ºãããŸãã
åãã£ãŒã«ãã®å¯èœãªå€ã®æ倧æ°ã¯å°ããããšãããã£ãŠãããããæ°åã§ãšã³ã³ãŒãã§ããŸãããã®å Žåã¯10ãããã§ååã§ãïŒãã ããã¿ã¹ã¯ãšäºçŽãç°¡çŽ åããããã«ã16ãããã«ããŸããïŒã ããã«ãããã¡ã¢ãªãç¯çŽã§ããã ãã§ãªããæååå
šäœã§ã¯ãªã16ãããã®ã¿ãæ¯èŒããå¿
èŠããããããããé«éã«æ€çŽ¢ã§ããŸãã ãã®å Žåã2ã€ã®ã¿ã€ãã®åããããŸããå€ã®æ€çŽ¢ã«äœ¿çšãããåã¯16ãããã§ãã«ãŠã³ã¿ãŒèªäœã¯64ãããã§ãã
ãããã£ãŠããã§ã«ããªãã¿ã®ããŒscreen_name=view_photo,prev_screen=welcome,platform=android,app_version=1.2.3,gender=male
ã®å€ã¯1500000ã§ã次ã®ããŒã¿ã«ãªããŸãã1ïŒ1ïŒ1ïŒ1ïŒ1 1500000çŸåšã5x2 + 8 = 18ãã€ããå ããŠããŸãã ç¯çŽã¯æããã§ãã
æ€çŽ¢ã¯ãåè¡ã§ã察å¿ãããã£ãŒã«ãå€ã®ã«ãŠã³ã¿ãŒå€ãã«ãŠã³ã¿ãŒãã£ãŒã«ãã®å€ã ãå¢å ããåçŽãªãã«ã¹ãã£ã³ã«ãã£ãŠè§£æ±ºãããŸãã
é床ãè¯ãã§ãã Javaã®çŸåšã®å®è£
ã§ã¯ãMacã®åäžã®ããã»ããµã§1ç§ããã2000äžã®å€ãç°¡åã«ã³ãŒãã³ã°ã§ããŸãã ãã¡ã»ããæ€çŽ¢ãå¿
èŠãªããããã£ã«ã¿ãŒå€ãæã€ãã£ãŒã«ãã ãã§ãªãããã¹ãŠã®ãã£ãŒã«ãã®å€ãèªã¿åãå¿
èŠããããŸãããããã£ãŠã5ã€ã®ãã£ãŒã«ãã®å Žåã1ç§ããã400äžåã®ã«ãŠã³ã¿ãŒãååŸã§ããŸãã
æ¿å
¥
æ®å¿µãªããããã®ãããªãšã¬ã¬ã³ããªããŒã¿æ§é ã¯ãæ¿å
¥ã«ãŸã£ãã察å¿ããŠããŸããã åèŠçŽ ãæ¿å
¥ããããã«ãã¹ãŠã®ã¡ã¢ãªãã³ãŒã ããå¿
èŠãããå ŽåïŒããšãã°100ããªç§ããããŸãïŒã300äžã¬ã³ãŒãïŒã€ãŸãã1æéããšã«èç©ããéåžžã«å€ãã®çµã¿åããïŒã®æ¿å
¥ã«ã¯çŽ83æéããããŸãããããã¯ã©ã®ã²ãŒãã«ãå
¥ããŸããã ç¡é§ãªCPUãµã€ã¯ã«ã«ãšã£ãŠãæ®å¿µã§ãã
äžæ¹ãããŒã¿ã¯æåŸã®æ°æéãŸãã¯æ°æ¥éã ãæ¿å
¥ãããããšãããã£ãŠããŸãã ãŸããäœããæ¿å
¥ãããšããã¹ãŠã®ãã£ãŒã«ããããããšãããããŸãã ãããã£ãŠãããŒããã£ãŒã«ãã®ããžã¿ã«å€ïŒ1ïŒ1ïŒ1ïŒ1ïŒ1ïŒã§ãããå€ããã®çµã¿åãããé
眮ãããŠããè¡çªå·ã§ããéã€ã³ããã¯ã¹ã®äœæã劚ãããã®ã¯äœããããŸããã ãã®ãããªæ§é ã¯äžç¬ã§äœæãããããŒæ€çŽ¢æéã¯éåžžããªç§ã®äœåã®1ãã§ãã
ãã®å Žåã1ç§ãããçŽ150,000ã¬ã³ãŒãã®é床ãéæããããšãã§ããŸããã ãã¡ãããããã¯å
éšåŒã³åºãã®å¯Ÿè±¡ãšãªããRESTèŠæ±ãšãããã¯ãŒã¯ã®ãã·ãªã¢ã©ã€ãºã®æéãèæ
®ããŠããŸããã ãã®ãããªéã€ã³ããã¯ã¹ã¯ãã£ãã·ã¥å
ã«ååšããããŒãã£ã·ã§ã³ããšã«äœæãããŸãã æ°æ¥éã¢ã¯ã»ã¹ãããŠããªãå Žåã¯åé€ãããã¡ã¢ãªã解æŸãããŸãã
ããŒã¿ã®ã»ãšãã©ã¯ãéä¿¡ãããã®ãšåãïŒãŸãã¯åã®ïŒæ¥ã«æ¿å
¥ããããããå®éã«ã¯æ¢åã®ãªããŒã¹ã€ã³ããã¯ã¹ãæã€ããŒãã£ã·ã§ã³ã¯ã»ãšãã©ãããŸããã
å
ã»ã©èšã£ãããã«ãæ€çŽ¢ã¯ç°¡åã§ãããããç°¡åã«äžŠååã§ããŸãã ãããã£ãŠãããŒãã£ã·ã§ã³ã¯å¥ã
ã®ã¹ããªãŒã ã§äžŠåã«ã³ãŒãã³ã°ãããŸãã ãµãŒããŒäžã®å¹³å8ã€ã®ãã£ãŒã«ããš48ã®ããã»ããµã§ã1ç§ããã1å2000äžè¡ã®ã¹ãã£ã³é床ãéæã§ããŸãã ã€ãŸããç°ãªãçµã¿åããã®æ°ã1200äžãè¶
ããªãå Žåãèšå®ãã100ããªç§ã®æéã«åãŸããŸãã ãã¡ãããããã¯çæ³çãªäžçã§ãããç§ãã¡ã¯ã»ãšãã©ããã«ããŸãã
ãã£ã¹ã¯ã«ä¿å
ãã£ã¹ã¯ã«ããŒã¿ãæžã蟌ãããšã¯ããã®ãããªã³ã³ãã¯ããªåœ¢åŒã§ããã«æå³ããããŸãã èŸæžã¯ãã¡ã€ã«ã®å
é ã«æžã蟌ãŸããããŒã¿åã¯è¡ã§ã¯ãªãæ°åã§æžã蟌ãŸããŸãã ãããŠããã®çµæžããã¹ãŠçž®å°ããŠããŸãã å¥åŠãªããšã«ãJavaã®å Žåãããã»ããµïŒããã³gzipå§çž®ïŒãæãé
ãã³ã³ããŒãã³ãã§ããããšãå€æããŸããã Snappyã«åãæ¿ãããšãã¹ãã¬ãŒãžæéã60ç§ãã8ç§ã«ççž®ãããŸããã
ããã¹ãŠã®æ¶é²å£«ã®ããã«ãå°æ¥ã®ã·ã¹ãã ã®äºææ§ã倱ãããå Žåã«ããŒã¿ãæåã§åã¢ããããŒãã§ããããã«ãJSON圢åŒã§ä¿åããããšãæ³å®ãããŠããŸãã
äžçãšã®ã³ãã¥ãã±ãŒã·ã§ã³
ã€ã³ã¿ãŒãã§ãŒã¹å
šäœã¯RESTãä»ããŠè¡ãããŸãã ããã¯ãããããã¹ãŠã®ãœãããŠã§ã¢ã®äžã§æãéå±ãªéšåãªã®ã§ãããããããã«ã€ããŠäœãæžããªãã§ãããã PUTã«ããæ¿å
¥ãGETã«ããèŠæ±ãDELETEã«ããåé€ãªã©ã
Java
åè¿°ããããã«ãç§ã¯ãã¹ãŠãJavaèšèªã§äœæããŸããã ããããé«éèšèªã®äžã§ãç§ã¯ãã®äžã§ããããã°ã©ãã³ã°ã§ããŸããã ããããCã§ã¯ãããããã«é«éã«ãªããšéåžžã«åŒ·ãç念ããããŸãã SIMDã®ãããªè»œé£ã¯ãã·ã¹ãã ã倧å¹
ã«é«éåãããšæããŸãã 人çã®å€¢ã¯ãRustã§ããããã¹ãŠæžãæããããšã§ãã ãããããã®æ®µéã§ã¯ããã©ãŒãã³ã¹ãç§ãã¡ã«åã£ãŠãããæ¯åã¯æé·ããå€æ¹7æã«å¯ãããšã«åæããªããªã£ãããããããå°ãåŸ
ã€å¿
èŠããããŸã***ã
äžè¬çã«ãJavaã¯ç§ã幞ãã«ããåæã«åæºãããŸããã ãã«ã¹ãã£ã³ã«é¢ããŠã¯ãéåžžã«åªããããã©ãŒãã³ã¹ããããŸãããç§ã¯ãããæåŸ
ããŠããŸããã§ããã ã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ãããããã®åãäžãããããäœã解æŸãããŠããªããšãã«çµ¶ãããããã¯ã«é¥ããç§ãæãããŸããã ãããã£ãŠãallocateDirectãšunsafeã䜿çšããŠããããã®ããŒã¿æ§é ããã¹ãŠãªãããŒãçšã«äœæããå¿
èŠããããŸããã ãã¡ããããããã¯ãã¹ãŠéåžžã«ã¯ãŒã«ã§ãããå°è±¡ã¯ãJavaã§ã¯ãªãCã§ã³ãŒãã£ã³ã°ããŠãããšããããšã§ãã ãŠãããŒã¹ãJavaèšèªãäœæãããšãã«ãã€ãã³ãã®ãŸãã«ãã®ãããªããªãšãŒã·ã§ã³ãæ³å®ããŠãããã©ããã¯ããããŸããã
ãã¡ã»ããçšã«ãããã®åãã«ãŠã³ã¿ãäœæããå¿
èŠããã£ããšããã¬ããŒãžã³ã¬ã¯ã¿ã¯ããã«ç§ãæ··ä¹±ãããŸããã 48åã®ããã»ããµãæ°åã®èŠçŽ ã«å¯ŸããŠHashMapãåæã«äœæãããšãã³ã¬ã¯ã¿ãŒã¯äººçã§åããŠã®ããã«åäœããŸãã ãã®çµæãæ°çŸäžè¡ã®ãã«ã¹ãã£ã³ã¯ãæ°å€ããè¡ãžã®çµæã®å€æãšããã®åŸã®ãã¹ãŠã®ããŒãã£ã·ã§ã³ããã®ããŒã¿ã®çµ±åãããæéãããããŸããã
ãã¬ãŒã³ã
çŸåšãå¯äžã®ã³ããŒã«ã¯çŽ600åã®ãã¥ãŒããå«ãŸããŠãããçŽ5ååã®ã¬ã³ãŒãã§æ§æãããŠããŸãã ããã«ã¯ãã¹ãŠãçŽ80 GBã®åžžé§ã¡ã¢ãªãšãå§çž®åœ¢åŒïŒSnappyïŒã®ããã¯ã¢ããïŒãã£ã¹ã¯äžã«çŽ5 GBïŒãå¿
èŠã§ãã ãã£ã¹ã¯ãžã®ä¿åæäœã«ã¯çŽ30ç§ããããŸãã
ã·ã¹ãã ã¯éåžžã«å®å®ããŠåäœãã , MIN_VALUE
ä¿®æ£ããåŸã , MIN_VALUE
床ãèœã¡ãŸããã§ããã
æªæ¥
å°æ¥ã«ã€ããŠã®è°è«ã¯ç§ã®ãæ°ã«å
¥ãã§ããäœã§ãèšãããšãã§ããŸãããæ°åã瀺ãå¿
èŠã¯ãªãããã§ãã
ãã®ãããäžçãæ¹åããããã€ãã®ãªãã·ã§ã³ããããŸãã
- ãŸããæ¢ã«è¿°ã¹ãããã«ãé«éã§ãã«ãã¹ã¬ããã®ããŒã¿åŠçãªã©ãã¬ããŒãžã³ã¬ã¯ã¿ãŒãå
šå¡ãšèªåã®ååšãæ··åããªããããªãã®ã«ããé©ããèšèªã§ãœãªã¥ãŒã·ã§ã³ãæžãçŽããŸãã
- 第äºã«ãCubeDBã«ç¬èªã®çš®é¡ãšéä¿¡ããã¯ã©ã¹ã¿ãŒå
šäœã«æé·ããããšãæããã®ã¯çŽ æŽãããããšã§ãã
- 第äžã«ããã¹ãŠãéåžžã«é«éã§ã¡ã¢ãªå
ã«ãããããããã€ãã®ããªãããŒãªã¢ã«ãŽãªãºã ãããŒã¿ã®è¿ãã«ãã©ãã°ããããšã¯çã«ããªã£ãŠããŸãã ããšãã°ã Facebook Gorillaã§è¡ã£ããããªãããçš®ã®ç°åžžæ€åºã§ãã
ç§ã¯æããã«æéãããå€ãã®ã¢ã€ãã¢ãæã£ãŠããã®ã§ããœãªã¥ãŒã·ã§ã³ããããªãã¯ãã¡ã€ã³ã«çœ®ããŸããã ãããŠãããªãã¯ãã®å Žæãèªãã§ããã®ã§ãããããçåã«æã£ãŠããã§ãããã æ¥ãŠãèŠãŠãéãã§ã䜿ã£ãŠãã ããã ã¢ã€ãã¢ã¯éåžžã«ã·ã³ãã«ã§ãããèå³æ·±ããšæããŸããæ¹åã§ããããšã¯ãŸã ãããããããŸãã ããã°ãïŒ
èŠèŠåã®ãªãPS Dataã¯ãé³æ¥œã®ãªããã£ã¹ã³ã®ãããªãã®ã§ããããã¯ãCubeDB APIãæäœããããã®ããã³ããšã³ãã³ã³ããŒãã³ãã®ã»ãããåæã«ãªãªãŒã¹ãããã®å¯èœæ§ã瀺ãããã«ã·ã³ãã«ãªããŒãžãç©æãããããã§ãã ãã ãããã¢ã¯1ã³ã¢ã®ãã·ã³ã®ã¯ã©ãŠãã§å®è¡ãããŠãããå®éã®åŠçé床ãè©äŸ¡ããããšã¯å°é£ã§ããå
éšã·ã¹ãã ã§ã¯ãå®éã®éãš48ã³ã¢ã§ãé床ãåçã«ç°ãªããŸãã
*
å®éã¯ããã§ã¯ãããŸãã-ç§ãã¡ã¯ããã«JSONã§ãã¹ãŠãä¿åããŸããããããã¯äžè¬ã«ã²ã©ãéå¹ççã§ãã
**
å®éã¯ããã§ã¯ãããŸããã§ããã åãå£ãã®ãå¿ãã-䜿çšãäžæ¢ããŸããã ç§ã¯ããããªãã«ããŸãã-ããã«ç£èŠéšéã®äººãç§ã«é»è©±ããŸããã ãããã£ãïŒ
***
è©ŠããŠã¿ãŸãããïŒ