ã¢ããã³ã»ããã¹ïŒ danikin ã Mail.Ru ïŒ
ã¬ããŒãã¯ã¿ã©ã³ããŒã«ã«æ§ããããŸãã ç§ã¯ãã€ããŠãŒã¹ã±ãŒã¹ããŠãŒã¶ãŒãèŠããã®ã«ã€ããŠè©±ããŸããã ä»æ¥ã¯ãå éšã«ã€ããŠãã£ãšè©±ããŸãã
æåã«TarantoolãèŠããšãããã®ãã³ãããŒã¯ãããã©ãŒãã³ã¹ã®çš®é¡ãèŠã€ãããšããããã¯ç§ã«ãšã£ãŠçããããšã¯æããŸããã§ãããæé©ãªããã°ã©ãã³ã°ãšæé©ãªã³ãŒããåããããŒããŠã§ã¢ã ããããããã§ãç§ã«ã¯çãããããã«èŠããŸãã-圌ããšãŠãéãã®ã¯ã©ãããŠã§ããïŒ ã€ãŸããæ¡ä»¶ä»ãã§ããã¹ãŠã®ããŒã¿ããŒã¹ãæé«ã§æ¯ç§æ°äžã®ã¯ãšãªã®é床ã§åäœã§ããã°ãTarantool- æ倧ã§æ°åäžããæ倧ã§100äžãŸã§ã§ãã
ãããã£ãŠãæ¬çªç°å¢ãMail.ruãããã³Cloudã§äœ¿çšãéå§ããåã«ããã¹ãŠãæ éã«èª¿æ»ããTarantoolãã©ã®ããã«å éšã«é 眮ãããäœãæé©ãªã®ããèŠã€ããŸããã ãããŠããããããä»ã®TarantoolãŠãŒã¶ãŒãåãç念ãæ±ããŠããã®ã§ã¯ãªãããšçã£ãŠããŸããäœããã©ããããããéãããŠãã©ããããããçãããã®ã§ã...
ãšããã§ãã¿ã©ã³ããŒã«ãèããããšããªã人ã«æãæããŠãã ããã ã»ãšãã©ã®äººãèããããšããããŸãã æ¬çªç°å¢ã§äœäººäœ¿çšããŠããŸããïŒ ããŸããããŸããã å®éã圌ãã©ã®ããã«éãã®ãç解ã§ãããä»ã®äººã¯ãã¹ãŠé ãã®ã§ãããªãã¯é©çšããŸããããããçç±ã§ãã ãããæ¬åœã«ããªãããŸã ããã䜿ãããšãæããŠããçç±ã§ãããªãã°ãããªãã¯æ£ããå Žæã«æ¥ãŸããããããŠç§ãä»æ¥ããªãã«èšã£ãŠããªãã«èª¬æããããšãæã¿ãŸãã ãã¡ããããã¹ãŠã§ã¯ãããŸãããããŒã¿ããŒã¹ã¯å·šå€§ãªè£œåã§ãããããå€ãã®æ©èœãæ©èœãåããŠããã40åã§ãã¹ãŠã«ã€ããŠè©±ãããšã¯ã»ãšãã©äžå¯èœã§ãã ãããã£ãŠãç§ã¯äž»ãªããšã«ã€ããŠã話ããŸãã è¡ãã
ãŸããã¬ããŒãããäœãæåŸ ããäœãæåŸ ããªãããç°¡åã«äŒããããšæããŸããã æåŸ -詳现ãã€ãŸã Tarantoolãéåžžã«é«éã§ããçç±ãé«éã§èªã¿åããæžã蟌ã¿ãé«éã§èµ·åããçç±ãªã©ãMail.ruã§é«éã«ããçç±ã¯äœã§ããã
äºæããªãããš-èæŠãããªãã¡ ãã¹ãŠã®ããŒã¿ããŒã¹ã¯è¯å¥œã§ãããåããŒã¿ããŒã¹ã¯ããããç¬èªã®ã±ãŒã¹ã®ããã®ãã®ã§ãããäžè¬çãªãã¹ãŠã®ããŒã¿ããŒã¹ãšããŠãŠãããŒãµã«ããŒã¿ããŒã¹ã§ãããšã¯äž»åŒµããŠããŸããã ãŸããTarantoolã®äž»ãªåŒ·ã¿ã¯ã以åã¯èª°ãç¥ããªãã£ãæ°ããã¢ã«ãŽãªãºã ãçºæããããæ¢åã®ã¢ã«ãŽãªãºã ãæ£ããé©çšããã³æ§æããããšã§ã¯ãªããããæ°ããæ§é ãæ°ããã¢ã«ãŽãªãºã ãæåŸ ããªãã§ãã ãããã¢ã«ãŽãªãºã ãããŠã圌ãã¯éåžžã«æé©ã«ã³ãŒããæžããŸãã ããªãã¯ãã¹ãŠOïŒNïŒãç¥ã£ãŠããŸãã OïŒNïŒãŸãã¯OïŒlogNïŒãšèšãå ŽåãOïŒNïŒãããŒã¿ã»ããã®2åã®å Žåãã¢ã«ãŽãªãºã ã¯2åé·ãåäœããŸãããå ·äœçã«ã©ã®çšåºŠåäœãããã¯äžæã§ãã æé©ã«èšè¿°ã§ããŸããã挞è¿çãªè€éãã«åœ±é¿ãäžãããåæã«äœæ¥ã®é床ã«åœ±é¿ãäžããã³ããŒããã®ä»ã®ãã®ã倧éã«äœæã§ããŸãã ãããã£ãŠãã¿ã©ã³ããŒã«ã§ã¯ãOã®åã«ãããã®ä¿æ°ã«å€ãã®æ³šæãæãããŸãã ãã¹ãŠãä¹ç®ãããŸãã ããã¯çè«ã§ãããçŸåšã¯å®è·µã«ç§»ã£ãŠããŸãã
æãéèŠãªããšããå§ããŸããããTarantoolã¯ããŒã¿ã®ã³ããŒå šäœãã¡ã¢ãªã«å®å šã«ä¿åããŸãã ããã¯ããã·ã³ã®åèµ·åæã«ãã¹ãŠã倱ãããããšãæå³ããã®ã§ã¯ãªããããŒã¿ã®ã³ããŒãã¡ã¢ãªã«ããããšãæå³ããŸãã ãã£ã¹ã¯äžã®ããŒã¿ãåœç¶ã§ãããåæã«ããã¹ãŠã®ããŒã¿ãã¡ã¢ãªå ã«ãããããããã¢ã³ããŒããããããšã¯ãããŸããã ããã§ã¯ãå®éã«ã¯ãã¹ãŠãã¡ã¢ãªã«æ ŒçŽããã¡ã¢ãªå ã«ããMemtxãšåŒã°ããå ã®Tarantoolãšã³ãžã³ã«é¢ãããã®ã§ããããšãäºçŽãã䟡å€ããããŸãã Tarantoolã¯æè¿ãããŒã¿ã®ã³ããŒå šäœãã¡ã¢ãªã«ä¿åããã®ã§ã¯ãªãããã®äžéšã®ã¿ãä¿åã§ãããã£ã¹ã¯ãšã³ãžã³ãå°å ¥ããŸããã ããã§ã¯ãå ã®Tarantoolãšã³ãžã³ãã€ãŸã ã€ã³ã¡ã¢ãªãšã³ãžã³ã®ã¿ã æããã«ãã¡ã¢ãªã¯ãã£ã¹ã¯ãããé«éã§ãã ãã¹ãŠãã¡ã¢ãªå ã«ããå Žåããã¹ãŠãè¿ éã«çºçããŸãã
ããã象城ãããã®ãããªåçïŒ
Tarantoolã¯ã¡ã¢ãªãããã¹ãŠãèªã¿åãããã£ã¹ã¯ããŒã¿ããŒã¹ïŒMySQLãPostgresãOracleãSQLãµãŒããŒïŒã¯ãã¹ãŠãã£ã¹ã¯ããèªã¿åããããTarantoolã¯é«éã§ãã ããã¯æãããªããã§ããã埮åŠãªéãããããŸãã
ããããããã®ãããªçãã²ãããŠããç§ãèŠãŠãã ãããããããããã£ãã·ã¥ã¯ã©ãã§ãããããã£ã¹ã¯ããŒã¿ããŒã¹ã«ã¯ãã£ãã·ã¥ãããããã§ãããããããã£ã¹ã¯ããŒã¿ããŒã¹ã¯æã人æ°ã®ããã¯ãšãªããã£ãã·ã¥ããã®ã§ãTarantoolã¯é«éã§ãã圌ãã¯éãã§ããïŒã ã¡ã¢ãªãããå Žåãšãã£ãã·ã¥ãããå Žåã®éãã¯äœã ãšæããŸããïŒ t.zãšã®éãã¯ãããŸããïŒ ããã©ãŒãã³ã¹ïŒ æ代é ãã«ãªããããããŸããã ããã§ã¯ãããã«ã€ããŠèª¬æããŸãã
Tarantoolãã¡ã¢ãªãšçžäºäœçšããæ¹æ³ãèŠãŠã¿ãŸãããã
ã¡ã¢ãªããããŒã¿ãèªã¿åããŸããã¡ã¢ãªã¯åžžã«æºåãããŠãããããã«èªã¿åããæ€çŽ¢ãã€ã³ããã¯ã¹ã«ããã¯ãšãªããã°ããå®è¡ã§ããçæ³çãªåœ¢åŒã§ãã
次ã«ããã£ã¹ã¯ããŒã¹ã®ä»çµã¿ãèŠãŠã¿ãŸãããã
ãã¡ãããéåžžã«åå§çãªã¹ããŒã ã§ãã ãã¹ãŠã®ããŒã¿ããŒã¹ã¯ç°ãªãããã£ãã·ã¥ãç°ãªããŸãããäžè¬çã«ã¯ããžãã¯ã¯åãã§ãã ãŸãããŠãŒã¶ãŒããã®èªã¿åãå€ããããšããŸããããSELECT* FROMãªããšãäœãšãã ãŸãããã£ãã·ã¥ã«ããŒã¿ããããã©ããã確èªããŸãã ååšããå Žåã¯ãã£ãã·ã¥ã«ç»ããååšããªãå Žåã¯ãã£ã¹ã¯ããèªã¿åããèªã¿åã£ããã®ããã£ãã·ã¥ã«æžã蟌ã¿ãŸãã ãã£ãã·ã¥ããã§ã«ãã£ã±ãã«ãªã£ãŠããå ŽåïŒå®çŸ©äžããã£ãã·ã¥ãåžžã«ãã£ã±ãã§ãããããåžžã«ãã£ã±ãã«ãªã£ãŠãããããããããã€ã³ãã§ãïŒãå€ãããŒã¿ãããã·ã¥ããŠãããã£ãã·ã¥ããèªã¿åããŸãã ããªãã¡ éãè¯ããã°ããã1ã€ã®ã¢ã¯ã·ã§ã³ãéãè¯ããã°ããã®é·ããã§ãŒã³å šäœãçºçããŸããããã¯ãã¹ãŠç¡æã§ã¯ãªãããšã«æ³šæããŠãã ããã 圌ãã¯ããããã£ã¹ã¯ããããçš®ã®ãããã¡ã«æ°ãããã®ãããã¡ãããããåãåºãããã£ãã·ã¥ã«ã³ããŒããå€ããã®ã眮ãæããã¡ã¢ãªã解æŸããæ°ãããã®ãæžããã¡ã¢ãªãå²ãåœãŠãŸããã ã¡ã¢ãªã®è§£æŸ/å²ãåœãŠã¯é«äŸ¡ã§ãã ããã¯ãã¹ãŠã³ããŒãããã¯ãã¹ãŠæ€çŽ¢ããã¹ãŠãç¡æãšããããã§ã¯ãããŸããã ããã¯ãOã®åã«ãããã¹ãŠåãä¿æ°ã§ãã å€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããŸãã ããã·ã¥ããŒãã«ã䜿çšãããšãäžå®ã®ããã·ã¥ã€ã³ããã¯ã¹ã«è€éã§äžå®ã®Â±ãå¯èœã§ãããŸãã¯ãããªãŒã察æ°ã§ããå Žåãããã ãã§ã-Oãæãããšãèšå€§ãªéã®äœæ¥ãçºçããŸãã ããŒã¿ã«å ããŠããããã¯1ã€ã®åœ¢åŒã§ãã£ã¹ã¯äžã«ããããã£ãã·ã¥å ã§ã¯å¥ã®åœ¢åŒã§ããããã®åŸå€ãã®å ŽåããŒãžã«ãã£ãŠãã£ãã·ã¥ãããŸãã ããå°ãããŒãããŸããã€ãŸããããå€ãã®ã¡ã¢ãªãå²ãåœãŠãããã«ããå°ã解æŸããŸãã ãããã¯ãã¹ãŠã誰ãããã®ããžãã¹ã§ç¡é§ã«ããŠãã貎éãªããã»ããµãµã€ã¯ã«ã§ãã ãã£ãã·ã¥ã«ãããããå Žåã§ããã€ãŸã èªã¿åããçºçããããŒã¿ããã§ã«ãã£ãã·ã¥ã«ããå Žåãããã¯ã°ã©ãŠã³ãã®ããã»ããµã¯ãã®ãã¹ãŠãå®è¡ããŸãããã®ãã§ãŒã³å šäœã¯ãåæ¢ããããšãªãåžžã«ããã¯ã°ã©ãŠã³ãã§å®è¡ãããŸãã ããªãã¡ ããŒã¿ãæ¢ã«ãã£ãã·ã¥ã«ããå Žåã§ããããã»ããµãŸãã¯ãã®ã³ã¢ã¯äœãã§ããžãŒã§ãã ãããŠãä»ã®ã«ãŒãã«ãäœãã§ããžãŒã§ããå Žåãããã¯ãçºçãããã¥ãŒããã¯ã¹ãçºçããŸãã ã¡ã¢ãªãŒããã¹ãŠããèªã¿åãã ãã®å Žåãšæ¯èŒããŠãéåžžã«å€ãã®äœæ¥ãå¿ èŠã§ãã
ãã£ãã·ã¥ã«ã€ããŠã®ãã®ãããªããšã éããæããŠãã ãã-åžžã«ã¡ã¢ãªãšãã£ãã·ã¥ã¯åããã®ã§ã¯ãªãããããã¯å°ãç°ãªããŸãã
ããã§ã¯ãã¬ã³ãŒãã«ã€ããŠè©±ããŸãããã
èªã¿åãã«é¢ããŠã¯ããã¹ãŠãå€ããå°ãªããæ確ã§ã-ã¿ã©ã³ããŒã«ã¯ã€ã³ã¡ã¢ãªã§ãã¡ã¢ãªãããã°ããèªã¿åããŸãããæžã蟌ã¿ã¯ã©ãã§ããïŒ Tarantoolã¯ãèªã¿åããšã»ãŒåãæ¹æ³ã§æžã蟌ã¿ãè¡ããŸããããã¹ãŠã®ããŒã¿ããã£ã¹ã¯ã«ä¿æããŸãã èšé²äžã«ããŒã¿ããã£ã¹ã¯ã«ä¿åãããŠããã«ããããããããªããããªã«é«éã ãšæããŸããïŒ ããŒã¯ãŒãã¯é£ç¶ããŠããŸãã ä»ããèŠããŸãã
Tarantoolã¯ãã©ã³ã¶ã¯ã·ã§ã³ãå®äºãããšãã«äœãããŸããïŒ åœŒã¯ãããã¡ã¢ãªã§å®è¡ãããã°ãã©ã³ã¶ã¯ã·ã§ã³ã«æžã蟌ã¿ãŸãã ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã«ã圌ã¯å埩ã®ç®çãã€ãŸã ãã¹ãŠãäžæããå Žåã¯ããã°ãããã¹ãŠãããŒã«ããã¯ããããŒã¿ããŒã¹ãéå§åãšåãç¶æ ã«æ»ããŸãã
ãã£ã¹ã¯ãžã®æžã蟌ã¿ã¯ã次ã®ããã«è¡ãããŸãã ãã¡ã€ã«ã«é çªã«æžã蟌ãã ãã§ãã ãã¡ã€ã«ãžã®é 次æžã蟌ã¿ãéåžžã«é«éã§ããããšã¯ãåç¥ã®ãšããã§ãã
質åã¯-é ããªãã§ããïŒ ååã«éãã§ãã ç£æ°ãã£ã¹ã¯ã§ã¯ãããã¯1ç§ãããçŽ100 MBã§ãããSSDã§ã¯1ç§ããã250 MBã§ãã ä»ãã確èªã§ããŸãã SSDã¯éåžžMacbookã«ã€ã³ã¹ããŒã«ãããæ¯ç§æ°çŸMBã®å°çã«ãªããŸãã ããã¯SSDäžã«ãããŸãã ç£æ°ãã£ã¹ã¯ã¯å°ãé ãã§ãããããã§ããæ¯ç§100 MBã§ãã 1ç§ããã100 MBãšã¯äœã§ããïŒ ããã¯å®éã«ã¯figã§ããããšãã°ããã©ã³ã¶ã¯ã·ã§ã³ãµã€ãºã100ãã€ãã®å Žåãããã¯åºæ¬çã«å€ããã€ãŸã æ°å€ãæŽæ°ããäœããã®çš®é¡ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãset key = valueãæŽæ°ããã ãã§ãã ããŒãšå€ãèšè¿°ããã ãã§ãã ããããæ°åã®å Žåãããã¯æåéãæ°ãã€ãã§ãã ãã ãããã©ã³ã¶ã¯ã·ã§ã³ã100ãã€ãã§ãã£ãŠãã1ç§ããã100äžãã©ã³ã¶ã¯ã·ã§ã³ã§ãã ããªãã¡ ããŒã¯çç£æ§-1ç§ããã100äžãã©ã³ã¶ã¯ã·ã§ã³ã ããã¯ãéåžžå¿ èŠãšãããªãããã©ãŒãã³ã¹ã§ãããéåžžã«å€§ããã§ãã éåžžãããã«ããã¯ã¯ãã£ã¹ã¯ã§ã¯ãªããããã»ããµãã¡ã¢ãªãªã©ã§ãã ããªãã¡ 1å°ã®ãã·ã³ã§éåžžã«å€ãã®ãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããã®ã«ååãªããŒã¿ãæ ŒçŽããã®ã«ååãªã¡ã¢ãªããããŸããã
ãããããã£ã¹ã¯ããŒã¿ããŒã¹ã¯ã©ã®ããã«ãã£ã¹ã¯ã«æžã蟌ã¿ãŸããïŒ ãªã圌ãã¯åããããæé©ã«æžããªãã®ã§ããïŒ åœŒãã¯ã¿ã©ã³ããŒã«ãšåãããšããã¹ãŠè¡ããŸãã ãããã¯ã¡ã¢ãªå ããã£ãã·ã¥å ã§æŽæ°ããããã©ã³ã¶ã¯ã·ã§ã³ãã°ãæžã蟌ã¿ãŸãã ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã¯ãã¯ã©ãã·ã¥åŸã«ããŒã¿ããŒã¹ãå埩ããå¯äžã®æ¹æ³ã ããã§ãã
ãããŠãããã«å ããŠã圌ãã¯ãŸã ãã£ã¹ã¯äžã®ããŒã¿ãæŽæ°ããŸãã 圌ãã¯ã©ããã£ãŠãããããŸããïŒ
圌ãã¯éåžžãå€ãè¯ãBããªãŒã䜿çšããŸãã
ããã¯ããã£ã¹ã¯ã«ä¿åããããã®æãäžè¬çãªããŒã¿æ§é ã§ãã ãã ããLSMããªãŒãªã©ã®æ°ããããŒã¿æ§é ã¯ãã§ã«ååšããŠãããšèšããããåŸãŸããã ãããã¯Tarantoolãã£ã¹ã¯ãšã³ãžã³ã§äœ¿çšãããFacebookã®RocksDBã§äœ¿çšãããGoogleã§LevelDBã§äœ¿çšãããŸãã åºæ¬çã«ããã¹ãŠã®åŸæ¥ã®ã©ã³ã€ã³ããŒã¿ããŒã¹ã¯BããªãŒãŸãã¯B +ããªãŒã䜿çšããŸãã MySQLãŸãã¯PostgresãOracle-ãã¹ãŠãBããªãŒäžã«æ§ç¯ãããŠããŸãã BããªãŒã¯ããªãŒã®ãããªãã®ã§ãäŸ¡æ Œã¯nã®ã¿ã§ãåããŒãã«ããŒã¿ãããã¯ãããããã®åŸã®ãããã¯ãžã®ãªã³ã¯ãå€æ°ãããŸãã ãããŠãn-narcityã®ãããéåžžã«çãã§ãã ãã ããããã«ä¿åãããŠããããŒã¿ãèªã¿åãã«ã¯ããã£ã¹ã¯ãã3åèªã¿åããè¡ãå¿ èŠããããŸãã ãããŠããããã®ãã£ã¹ã¯èªã¿åãã¯é ãã§ãã ããã§æãéèŠãªè³ªå...ãã£ã¹ã¯ããŒã¿ããŒã¹ã®BããªãŒã¯ãåŸã§ããŒã¿ãèªã¿åãããã«ã®ã¿å¿ èŠã§ãããšæ£ããèšãããŸããã ãã£ã¹ã¯ããŒã¿ããŒã¹ããTarantoolã®ããã«ãããŒã¿ã®ã³ããŒå šäœãã¡ã¢ãªã«ä¿åããå Žåãã€ãŸã 圌ããã¿ã©ã³ããŒã«ãªããèªãå¿ èŠã¯ãªãã§ãããã ãããŠãèªãå¿ èŠããªããšãã¯ãæžãå¿ èŠã¯ãããŸããã 圌ãã¯ãã®æ§é ã«æžã蟌ã¿ãŸãããããã¯åŸã§æ°ããããã ãã§ãã ããã¯å埩çšã§ã¯ãããŸããã ãªã«ããªã«ã¯ãTarantoolã®ããã«ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã䜿çšããŸãã ãããŠãããã¯åã«åœŒãããã£ã¹ã¯ã§ãããšããçç±ã ãã§ãªããæªãããã°ã©ããŒãããããã§ã¯ãªãã圌ããæžãã®ãé ãããŸãã ãããŠãåã«ãã£ã¹ã¯ã§ããããã§ãã
ããã«ããã®ãããªããŒã¿æ§é ã¯åªããŠããŸã-ç·åœ¢æ€çŽ¢ã«ã¯ã€ãªãããŸããããäžæ¹ã§ããã£ã¹ã¯ãžã®ã©ã³ãã ã¢ã¯ã»ã¹ã«ã€ãªãããŸãã ç£æ°ãã£ã¹ã¯ã§ã¯ãããã¯1ç§ãããæ倧100ãããã§ãã ãªãç£æ°ãã£ã¹ã¯ã䜿çšãããšãããŒã¿ã100 MB /ç§ã§é£ç¶ããŠèªã¿æžãã§ãã誀ã£ãŠ100å/ç§ããã¢ã¯ã»ã¹ã§ããªããšæããŸããïŒ ããã¯ãã£ã¹ã¯ãããã®ç©ççãªåãã«ã€ãªããããã£ã¹ã¯ãããã¯éåžžã«éãåãããšãã§ããªãããã§ãã 1ç§éã«100å-ããã¯éåžžã«å€ããæ³åããŠã¿ãŠãã ããã ãããããã£ã¹ã¯å šäœã«æ£ãã°ã£ãŠãã100ãã€ããèªã¿åããšã1ç§ããã100ãã€ãã®é床ã§æžã蟌ã¿ãŸãã¯èªã¿åããè¡ãããŸãã åçŽãªãã¹ããå®è¡ããŸããåçŽãªCããã°ã©ã ãäœæããããã€ãã®ã®ã°ã®ãã¡ã€ã«ãååŸããŠããŒãžãã£ãã·ã¥ã«åãŸããªãããã«ãã誀ã£ãŠããããããã€ãã®ãã€ããèªã¿æžãããããšãã§ããŸãã ãããã100å/ç§ã«ãªããŸãã æçåãããšãããã«æªåããŸãããªããªããããã«æ°åã®sikããããã³ã«ãããã¯æ¯ç§æ°ååã«ãªãããã§ãã ããã¯ããããã®ãã¡ã€ã«ãæçåãããŠããå¥ã®åé¡ã§ãã ããããããŒã¿ããŒã¹ã¯ããã«å¯ŸåŠã§ããããã§ããå®éãããŒã¿ããŒã¹ã¯äºåã«ããã«ããçš®ã®å€§ããªãã¡ã€ã«ãäœæãããã®æçãç·šéããŸãããæçåããªãããã«æã å§çž®ããŸãã SSDã§ã¯ãå°ãé«éã§ãããåãããšã§ãã1ç§éã«1000åã§ãã ç¹°ãè¿ããŸãããéããæããŠãã ãã-ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã§ã¯æ¯ç§100äžãã©ã³ã¶ã¯ã·ã§ã³ãããŒãã«ã¹ããŒã¹ã§ã¯BããªãŒã§SSDã«æ°ååã100åã1000å-ããã3-4æ¡ã®å·®ã§æžã蟌ã¿ãŸãã
ããã§ã¯å ã«é²ã¿ãŸãããã éå§ã«ã€ããŠã
ç§ã¯èªã¿æžãã«ã€ããŠè©±ããŸããã Tarantoolã¯ããã£ãã·ã¥ããã£ãã·ã¥ãå²ãåœãŠã解æŸãããŒã¿æ§é ã®å€æŽãã³ããŒãªã©ãããäœæ¥éãã¯ããã«å°ãªãããããã¹ãŠã®ã€ã³ã¡ã¢ãªããã³ã€ã³ã¡ã¢ãªããã£ãã·ã¥ã§ã¯ãªããããèªã¿åããéããªããŸãã ãŸããTarantoolã¯ããã©ã³ã¶ã¯ã·ã§ã³çšã§ã¯ãªãå埩å°çšã®ãã©ã€ããåããŠãããããè¡šã¹ããŒã¹ãæŽæ°ããå¿ èŠããªããããããé«éã«æžã蟌ã¿ãŸãã
ããã§ã¯ãå§ããŸãããã Tarantoolã¯ã©ã®ããã«èµ·åããŸããïŒ Tarantoolã«ã¯ãã©ã³ã¶ã¯ã·ã§ã³ãã°ããããã¹ãããã·ã§ããããããŸãããŸã 説æããŠããŸããããåŸã§èª¬æããŸãã ã¹ãããã·ã§ããã¯ãããæç¹ã§ã®ããŒã¿ããŒã¹ã®ç¶æ ã§ãã Tarantoolã¯å®æçã«ãã¹ãŠã®ç¶æ ããã£ã¹ã¯ã«ãã©ãã·ã¥ãããã°ãã©ã³ã¶ã¯ã·ã§ã³ã倧ãããªããªãããã«ããŠãåŸã§ç°¡åã«åŸ©å ã§ããããã«ããŸãã ãããã£ãŠãTarantoolã®èµ·åã¯2ã€ã®ãã¡ã€ã«ãèªã¿åãã ãã§ããããã¡ã€ã«ã¯æçåãããŠããããç·åœ¢ã§ã¯ãããŸããã ãããããã®èªã¿åãã¯ç·åœ¢ã§ãã ã¹ãããã·ã§ãããæåããæåŸãŸã§èªã¿ããã°ãæåããæåŸãŸã§èªã¿ããã®èªã¿åãäžã«ãã¹ãŠãã¡ã¢ãªã«é©çšããŸãã Tarantoolã®çºå£²ã¯æ¬¡ã®ãšããã§ãã
ã©ããããéãïŒ
ããããç£æ°ãã£ã¹ã¯äžã§-100 MB /ç§ãSSDäžã§-200-250 MB /ç§ã
ãããŠãããã¯ãã£ã¹ã¯ããŒã¿ããŒã¹ã§ã©ããªããŸããïŒ è³ªåã¯éåžžã«èå³æ·±ããã®ã§ãããã£ã¹ã¯ããŒã¿ããŒã¹ã«æéãèšå®ããå¿ èŠããããã¹ãããã·ã§ãããã¡ã¢ãªã«èªã¿èŸŒãå¿ èŠããªããããã»ãŒç¬æã«éå§ãããããã§ãã
ãããããã®åŸã¯ã©ããªããŸããïŒ PostgresãŸãã¯MySQLããããšããŸãããã 圌ãã¯å§ããŸããã次ã¯äœã§ããïŒ ããã«åäœããŸããïŒ ãã£ãã·ã¥ã¯ãŠã©ãŒã ã¢ããäžã§ã-ããã¯é«ã§ãã çŸåšãç§ãã¡ã¯HighLoadã«ããŸã-ããã¯é«è² è·ã«ç¹åããäŒè°ã§ãã è² è·ãé«ãå Žåã¯ããã£ãã·ã¥ãå®å šã«äœ¿çšããŸããããã¯ããã£ãã·ã¥ããªããšããŒã¿ããŒã¹ãæ£åžžã§ãããååãšããŠæ©èœãããè² è·ã«å¯Ÿå¿ã§ããªãããšãæå³ããŸãã çµéšè±å¯ãªDBAã圌ãã¯ãŠã©ãŒã ã¢ãããããŸããŸãªãã¯ããã¯ãªã©ã匷å¶ããæ¹æ³ãç¥ã£ãŠããŸãã ããããäºå®ã¯æ®ã£ãŠããŸãã éåžžã¯ã©ã®ããã«ãŠã©ãŒã ã¢ããããŸããïŒ
ãã£ãã·ã¥ã¯ã©ã®ããã«ãŠã©ãŒã ã¢ããããŸããïŒ ããããŠã©ãŒã ã¢ããæ¹æ³ã§ãã éããªãã
ãŠãŒã¶ãŒã¯ããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããäœããèŠæ±ããŸãããããŒã¿ããŒã¹ã¯èª€ã£ãŠãã£ã¹ã¯ããäœããèªã¿åã£ãŠïŒããŒã¿ããã£ãã·ã¥ã«ãªãããïŒããããäžããŠãã£ãã·ã¥ããŸãã ãã®åŸã次ã®ãªã¯ãšã¹ããå°çãããã£ã¹ã¯ã®å¥ã®å Žæã§å¶ç¶ã«çºçããŸãã ã¯ãããŠã©ãŒã ã¢ããã§ããcatã€ã³ããã¯ã¹ãã¡ã€ã«ãäœæã§ããããããã®ããšãã§ããŸããã倧éã®ããŒã¿ãããå Žåããã£ã¹ã¯äžã®ãã£ãã·ã¥ã«ããã¯ãã®ãããããŒã¿ã誰ãç¥ããŸããã 調ã¹ãæ¹æ³ã¯ïŒ ãŠãŒã¶ãŒããªã¯ãšã¹ããéå§ãããŸã§ãããã¯ããããŸããã ã€ã³ããã¯ã¹ã¯ãããããŒã¿ã§ããããšã¯ç¥ã£ãŠããŸãããããŒã¿ã¯æ¢ã«ãã®ãã©ãŒãããã§ãã£ã¹ã¯äžã«ããããããããŒã¿ã¯èª€ã£ãŠã©ããã«ãããšããèãæ¹ã§ãã ãã£ãã·ã¥ããŠã©ãŒã ã¢ããããã«ã¯ããã®ã©ã³ãã ãªããŒã¿ãæé©ãªã¢ã«ãŽãªãºã ã§èªã¿åãå¿ èŠããããŸããããã¯ã2ã€ã®ãã¡ã€ã«ãçŽç·çã«èªã¿åããããã¯ããã«é ãã§ãã ããã§ããããã¯ãããããŒã¿ã§ããTarantoolã«ã¯ä»ã«ããŒã¿ããããŸããã ãããããŒã¿ã®å Žåãšåãã§ãã
ãšããã§ãé«è² è·ã·ã¹ãã HighLoad ++ã®éçºè ã®äŒè°ã®éå»5幎éã®å ¬éãããªãå ¬éããŸããã YouTubeãã£ã³ãã«ãèŠèŽãåŠç¿ãå ±æã賌èªããŸã ã
ãã£ã¹ã¯ããŒã¿ããŒã¹ã§ã¯ããããã®ãããããŒã¿ãã©ããã®ç©ç©ã®ããã«æ¢ãå¿ èŠããããŸãã å®éã«ã¯ãMySQLããçµãåºãããã¹ãŠã®åªãã管çè ã§ããMail.ruã¯ã1ã2 MB /ç§ã§ãã ããªã¥ãŒã ã«ã¯100 GBã1 TBã®ããŒã¿ããŒã¹ãããããã®é床ãè¶ ãããšããã¹ãŠã®ææ³ã§èµ·åããŠã©ãŒã ã¢ããã§ããŸããããããããŒã¿ã¯ããŸããŸãªå Žæã®ãã£ã¹ã¯ã«æ£åšããŠãããããé©ãããšã§ã¯ãããŸããã ã·ããããå¿ èŠããããé ãåããå¿ èŠããããŸãã æ¡ä»¶ä»ãã§ã10ãããã€ãã®ããŒã¿ãèªã¿åããé ãåãããŠ1ããªç§è²»ãããããã«æ°ãããã€ããèªã¿åããŸãããŸãã1ããªç§è²»ãããŸããã ãããã£ãŠã10 Kãã€ãããšã«1ããªç§ãè²»ãããšã1 MB /ç§ã«ãªããŸãã ããªãã¯åã«I / Oã«ééããŸãã ãã®ãããªç¶æ³ã ãŠã©ãŒã ã¢ããã®ãã®éãã¯ããã£ãã·ã¥ãšãåžžã«ã¡ã¢ãªãã2ã€ã®ç°ãªããã®ã§ãããšããäºå®ã®çµæã§ããããšã«æ³šæããŠãã ããã ããªãã¡ Tarantoolã¯å¿ èŠãªãã®ãåžžã«ã¡ã¢ãªã«ä¿æããããã«èµ·åãããã°ããèªã¿æžãã§ããŸãã
ãŸãããã£ã¹ã¯ããŒã¿ããŒã¹ã®é 眮ã¯ç°ãªããŸããããŒã¿ã¯ãã£ã¹ã¯äžã«ããããã£ãã·ã¥ã«äœããããå Žåãããããã«èšèšãããŠããããã®ããŒã¿ã¯ãã£ã¹ã¯ããŒã¿ã®äžã«æ£ãã°ã£ãŠããŠãã©ããå¥ã®å Žæã«ãããããã¹ããŒã¹ã¿ãŒããçºçããŸãã éãã¯ã©ããã§100åã§ãã
ããã¯ãTarantoolããã¹ãŠã®ãããããŒã¿ãåã«èšèšã«ãã£ãŠ1ãæã«ã°ã«ãŒãåãããšããããšã§ãã
次ã«ãé 延ã«ã€ããŠèª¬æããŸãã ã¬ã€ãã³ã·ã¯ããªã¯ãšã¹ãã®éå§ããçµæã®åä¿¡ãŸã§ã®æéã§ãã Tarantoolã«ã€ããŠè©±ããšãã¯ããã£ã¹ã¯ããŒã¿ããŒã¹ãšã¯æ¯èŒããŸããããã¹ãŠãæ確ã§ãããããä»ã®ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ãšæ¯èŒããŸãã
ã©ã®ããã«ãã¹ãŠãå§ãŸããŸãããïŒ ãããããããæ¯æ©Mail.ruã§ããã®ãããªã¬ã€ãã³ã·ã®ããŒã¯ãã€ãŸã äœããã®çç±ã§ãã¯ãšãªã®å®è¡æéãå®æçã«1000åã«å¢å ããŸããã ããªãã¡ ããªç§ã§ã¯ãããŸããã§ãããã1ç§ã§ããã
ç§ãã¡ã¯ãªããããèµ·ãã£ãŠããã®ãèãå§ããŸããã ããã«ãããã¯å€ã«èµ·ãããŸããæããã«ããŠãŒã¶ãŒãããã責ããã®ã§ã¯ãªããããã¯ç§ãã¡ã®äžã«ãããã®ã§ãã ç§ãã¡ã¯ããã«å¯ŸåŠãå§ãããã®çç±ã¯ç°¡åã§ããããšãããããŸãã-ããã¯ã¹ãããã·ã§ããã§ãã
ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ã¯ããã£ã¹ã¯ããŒã¿ããŒã¹ãšã¯ç°ãªãããã€ãã¹ã§ããããšãéåžžã«æåã§ãããæã ã¹ãããã·ã§ãããäœæããå¿ èŠããããŸãã ããªãã¡ ãã£ã¹ã¯ããŒã¿ããŒã¹ãã¹ãããã·ã§ãããããªãå Žåãèªåçã«åäœããBããªãŒå ã®ããŒã¿ãå€æŽãããã©ã³ã¶ã¯ã·ã§ã³ããã°ã«æžã蟌ã¿ãŸãããã£ã¹ã¯ã«ãã¹ãŠã®ç¶æ ãå®æçã«ãã©ãã·ã¥ããå¿ èŠã¯ãããŸãããèªã¿åãå¯èœãªåœ¢åŒã ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ã«ã¯ãããŸããã ã¹ãããã·ã§ãããããŸã«äœæããå¿ èŠããããŸãããããè¡ããªããšã巚倧ãªãã©ã³ã¶ã¯ã·ã§ã³ãã°ãèç©ãããéåžžã«é·ãé䜿çšãããããã§ãã ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã«ã¹ãããã·ã§ãããããæéããããçç±ãç解ããŠããŸããïŒ åããã£ãŒã«ãã«å¯ŸããŠ50ã100ã1000ã®æäœãè¡ãããšãã§ãããã©ã³ã¶ã¯ã·ã§ã³ãã°ã§ã¯åæäœãåå¥ã«å®è¡ããããããããããã¹ãŠããŒã«ãªãŒããŒããå¿ èŠããããŸãã ã¹ãããã·ã§ããã§ã¯ãçŸåšã®æåŸã®å€ãšããŠ1ã€ã«ãªããŸãã ãããã£ãŠãã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ã¯åžžã«ã¹ãããã·ã§ãããäœæããå¿ èŠããããŸãã
ã¹ãããã·ã§ããããã¹ãŠãé ãããã®ã¯ãªãã§ããïŒ ããŒã¿ããŒã¹ã¯ã¹ãããã·ã§ãããšã¹ãããã·ã§ããã§ããããã£ã¹ã¯äžã§ã¹ãããã·ã§ãããããŠããããã«èŠããŸããããã£ã¹ã¯ã¯ããã«ããã¯ã§ããããã«èŠããŸãããã¡ã¢ãªã§åäœããŸãããªãã¹ãããã·ã§ããã¯ããŒã¿ããŒã¹å šäœãé ãããããšãã§ããŸããïŒ ããããã³ã°ã ããã¯éåžžã«èå³æ·±ãããã¯ã§ãã
ããŒã¿ããŒã¹å šäœãããã¯ããŠã¹ãããã·ã§ãããäœæããªãããã«ãããããé©åãªã¿ã€ãã³ã°ã§åå²ãããŸããã ForkïŒïŒã¯ãããã»ã¹ã®ã³ããŒãäœæããã ãã®LinuxãŸãã¯Unixã·ã¹ãã ã³ãŒã«ã§ãã ããªãã¡ .
Snapshot? fork(), . Fork() , parent, . parent . log , ? Copy-on-write.
fork()? Fork(), -, parent' child', , . 100 . 4- , , - , . copy-on-write. ããã¯äœã§ãã child, , parent', .. . parent child 1 , , , â 4 . T.O. ? Tarantool parent update', update' -, update , update', 4 . update - â . ããªãã¡ , . T.O. CPU, .
, in-memory , , , , Redis, Couchbase, Aerospike. - . , , .
, ? , snapshoting'?
, copy-on-write, copy-on-write, Tarantool, , . - multiview concurrency control.
, .. , , . , , , â Tarantool, , . â snapshoting' . , copy-on-write. , . , , profit. . fixed cost . snapshoting, , .
. , . - , . , . , snapshoting'. ããªãã¡ . , , , , , , , , , .
. . â 1.6.6. 9 . Snapshot , , .
, , latency. â .
, , , , « ».
C++, Java , . , ++, std::unordered_map â , . , .. , , , , (1), . , , . .
( ) 2 . . , , â . - /.
, , . 10 . , 20. 2 . â ++ , , , 100 , , . ãªããã , , « ».
? , - , â , , .. â .
? 5 , , . â , mutex. - . , mutex. log , , table space, log , . ããªãã¡ 5 . , Postgres, MySQL, Oracle 10, , -.
SQLite memory , .. SQLite â std::unordered_map, , . , , , , , , . , .
? . . , , , . - , read /dev/zero, , . /dev/zero, , 0, , , , 1 . . , std::unordered_map, . 1. 5, . log, , , 90%-95% â .
Tarantool? : ? ããªãã¡ , . , - , , , . write, Tarantool read, , , read. . Tarantool , , . , , , , , .. . . ããªãã¡ write, syscall write - . write .
ãããªæãã§ãã , , thread', . , , Tarantool read', transaction-, in-memory, write, .. thread, thread write. , inter thread communication, .. , , , per , per , per . . , , , , , âŠ
, , , . 100 â 100, . 1 â 1, . latency . , , . , , , , , ?
, , . , :
, â
: , , transaction-, thread transaction- . thread⊠Redis, , Redis CPU, , interthread-, thread. , thread, , , , .
: , , â .
: 2- , thread event-, thread , â event-. shared memory .
: , Tarantool , . âŠ
, , 2-3 , , , , , , .
, . open-source, , . ( ), . ããªãã¡ -. , - , . , , , .
» anikin@corp.mail.ru
» danikin
» Mail.ru
â HighLoad++ . HighLoad++ 2017 .
, .
Tarantool?
- PgSQL Tarantool / (Calltouch);
- NoSQL Tarantool / (Mail.Ru);
- : key-value- / , (RAIDIX)
- libfpta â SQLite Tarantool / (Positive Technologies)
ãŸãããããã®è³æã®äžéšã¯ãé«è² è·ã·ã¹ãã HighLoadã®éçºã«é¢ãããªã³ã©ã€ã³ãã¬ãŒãã³ã°ã³ãŒã¹ã§äœ¿çšãããŸãã¬ã€ãã¯ãç¹å¥ã«éžæãããæåãèšäºãè³æããããªã®ãã§ãŒã³ã§ããç§ãã¡ã®æç§æžã«ã¯ãã§ã«30以äžã®ãŠããŒã¯ãªè³æããããŸããæ¥ç¶ããŠãã ããïŒ