
æåã«ãé«è² è·ãããžã§ã¯ãã®ãã¯ãããžãŒã®éžæã«ã¢ãããŒãããæ¹æ³ã説æããŸãã
- ãŸã第äžã«ããããã©ã®ããã«æ©èœããããç解ããå¿ èŠããããŸãã é·æã ãã§ãªãã匱ç¹ããããŸãã
- ç£èŠããã³ããã¯ã¢ããæ¹æ³ã®ç¥èã ããã«é©ããããŒã«ããªããã°ããã®ãã¯ãããžãŒã¯å®çšŒåã§äœ¿çšããã«ã¯æ©ãããŸãã
- é ããæ©ãããã·ã¹ãã ã¯ãèœäžããïŒããã¯éåžžã®éåžžã®ç¶æ³ã§ãïŒããã®å Žåã«äœããã¹ãããç¥ãå¿ èŠããããŸãã
æåããæè¡ã®äŸãæããŸãã

MySQLãšMongoDBã¯ãéåžžã«ã·ã³ãã«ã§ããªãŒã¯ã®ããã«æ©èœããæããã«æ©èœããæãããªæ¬ é¥ããããœãªã¥ãŒã·ã§ã³ããå§ãŸããŸããã
ã¿ã©ã³ããŒã«
Tarantoolã¯ã©ã®ãŠãŒã¶ãŒã±ãŒã¹çšã«äœæãããŸãããïŒ ãœãŒã·ã£ã«ãããã¯ãŒã¯ãšãŠãŒã¶ãŒããŒã¿ã100ã®mysqlãµãŒããŒã«åæ£ããŠãããšæ³åããŠãã ããã åæã«ããŠãŒã¶ãŒã¯ãŠãŒã¶ãŒIDã«ãã£ãŠå ±æãããŸãã ãŠãŒã¶ãŒã¯èªåã®é»åã¡ãŒã«ãå ¥åãããã°ã€ã³ããããšèããŠããŸãã

æãããªæ¹æ³ã¯ãé»åã¡ãŒã«ã§ãŠãŒã¶ãŒããã£ãŒãããããšã§ãã ãããã人ã ã¯åœŒããã°ã€ã³ãããé»è©±çªå·ãæã£ãŠããŸãã ãããã£ãŠã2çªç®ã®æçœãªè§£æ±ºçã¯ãéä¿¡ã¡ãŒã«=> userIdãé»è©±=> userIdãå«ãé«éã®ç¹å®ã®ããŒã¿ããŒã¹ã§ããããã®ãããªããŒã¿ããŒã¹ã¯æ°žç¶çã§ããããšãæãŸããã ããããåœæã¯ãã®ãããªããŒã¿ããŒã¹ã¯ãããŸããã§ãããåœæã®éžæè¢ã®1ã€ã¯ãããããã¹ãŠãmemkeshã«å ¥ããããšã§ããã ããããuserIdãæ€çŽ¢ããããã«æ°ãããã£ãŒã«ããè¿œå ããæäœã¯éåžžã«é£ãããšä»®å®ããŸãã memkeshã«ã¯å€ãã®åé¡ããããŸãããå°ãªããšãå€ãã®èªã¿åããšæžã蟌ã¿ã«èããããšãã§ããŸãã
ã ãããã¿ã©ã³ããŒã«ã ãã¹ãŠã®ããŒã¿ãã¡ã¢ãªã«ä¿åããŸãã ãããŠãåæã«ããã£ã¹ã¯äžã éçºè ã«ãããšãããã»ããµã³ã¢ããã1ç§ããã100äžã®ãªã¯ãšã¹ãã«èããŸãã mail.ruã§éçºãããŠããŸãã Tarantooléçºè ã®1人ã§ããKonstantin Osipovã¯ãMySQLã®éçºã«äœ¿çšããŠããŸããã

Tarantoolã®ãªã¯ãšã¹ãåŠçããã»ã¹ã«ã¯ããã€ãã©ã€ã³ã¢ãŒããã¯ãã£ããããŸãã å€ãã®ã¯ã©ã€ã¢ã³ããTarantoolãµãŒããŒãèŠæ±ããŸãã ãããã®èŠæ±ã¯ãã¹ãŠãI / Oã¹ã¬ããã®ãã¥ãŒã«å ¥ããããŸãã ãã®åŸã圌ã¯ããã€ãã®ééã§ããããå®è¡ã«æž¡ããŸãã ãããã£ãŠãå®è¡ã¹ã¬ããã®ããã¯ã¯ããªãçãæéç¶ããŸãã

åå¥ã«èšåãã䟡å€ãããã®ã¯æ°žç¶æ§ã§ãã 誰ããæ°žç¶çã«redisã䜿çšããå Žåããã©ãŒã¯ãäœæããããã»ã¹ãé²è¡ããŠããç¬éã«ãå€§æ ¹ãããªãé·ãæéãåºçãããŠããããšã«æ°ä»ãã§ãããã Tarantoolã«ã¯ç°ãªãã¢ãã«ããããŸãã ããŒãžã§ã³1.6.7ããåã¯ãå ±æé åã«ã¡ã¢ãªã®äžéšãä¿æããŠããããã©ãŒã¯äžã¯ã³ããŒãããŸããã ãããŠããã©ãŒã¯ãããåããã£ã¹ã¯ã«æžã蟌ãŸããŠããéã芪ã¯ãã®ã¡ã¢ãªã®äžéšã«è§Šããããšãã§ããªãããšãç¥ã£ãŠããŸãã ããŒãžã§ã³1.6.7以éã圌ãã¯ãã©ãŒã¯ãå®å šã«æŸæ£ããŸããã ãããã¯ããŠãŒã¶ãŒç©ºéã®ä»®æ³ã¡ã¢ãªã¡ã«ããºã ããµããŒãããŠãããšèšããŸãã ãŠãŒã¶ãŒç©ºéã®ã¡ã¢ãªã¢ãã¬ã¹å€æã ãã©ãŒã¯ããã»ã¹ãäœæãã代ããã«ããŠãŒã¶ãŒç©ºéã®ã¡ã¢ãªã¹ãããã·ã§ãããå®è¡ããŠãäžè²«ããã¹ãããã·ã§ããããã£ã¹ã¯ã«æžã蟌ãã¹ã¬ãããäœæãããŸãã
Tarantoolãé©ããŠããç¶æ³ïŒ
- å€æ°ã®èªã¿åã/æžã蟌ã¿ã¯ã©ã€ã¢ã³ãããããŸãã
- å€ãã®æµ ãèªã¿åã/æžã蟌ã¿ã
- äœããã®äžå€®ã¹ãã¬ãŒãžãå¿ èŠã«ãªããã¯ãŒãã³ã°ã»ãããã¡ã¢ãªã«æ ŒçŽãããå Žåã Tarantoolã¯ãŸã ã·ã£ãŒãã£ã³ã°ããµããŒãããŠããŸããã
- ã¹ãã¢ãããã·ãŒãžã£ãèšè¿°ãããã Tarantoolã¯Luaã§ãããããµããŒãããŠããŸãã
- æ¿èªãã»ãã·ã§ã³ãã«ãŠã³ã¿ãŒã
䜿çšããªãå ŽåïŒ
- å¿ èŠã«å¿ããŠïŒèªåã·ã£ãŒãã£ã³ã°ãšãã§ã€ã«ãªãŒããŒãRaft / Paxosãé·ããã©ã³ã¶ã¯ã·ã§ã³ã
- å°æ°ã®é¡§å®¢ãšæå°é 延èŠä»¶ã ãã€ãã©ã€ã³åãããã¢ãŒããã¯ãã£ã«ãããé 延ã¯å¯èœãªæå°å€ãã倧ãããªããŸãã
- ã¯ãŒãã³ã°ã»ãããã¡ã¢ãªã«åãŸããŸããã Kostya Osipovã¯Tarantoolã®æ°ããVinylãšã³ãžã³ã«ã€ããŠè©±ããŸããããæåã«ç¢ºèªããããšããå§ãããŸãã
- ç§ã®å人çãªæèŠïŒTarantoolã¯åæã¿ã¹ã¯ã«ã¯é©ããŠããŸããã 圌ã¯ãã¹ãŠãã¡ã¢ãªã«ä¿æããŠããŸããããããã®ã¿ã¹ã¯ã«å¿ èŠãªæ¹æ³ãä¿æããŠããŸããã
ã¯ãªãã¯ããŠã¹
åæã®ããã ãã«Yandexã«ãã£ãŠäœæãããŸããã Yandex.Analyticsãªã©ã®ã·ã¹ãã ã§ã¯ã次ã®ããŒã¿ããŒã¹ãå¿ èŠã§ããã
- å¹ççã§ç·åœ¢ã«ã¹ã±ãŒã©ãã«ã
- ãªã¢ã«ã¿ã€ã åæã
- ç¡æã§ãªãŒãã³ãœãŒã¹ã
åœæã3ã€ã®åºæºããã¹ãŠæºãã補åã¯ãããŸããã§ããã å¯èœãªè§£æ±ºçïŒ
- MySQLïŒMyISAMïŒ-é«éæžã蟌ã¿ãäœéèªã¿åã
- VerticaãExasol-ææ
- Hadoop-æžã蟌ã¿ã¯æ©èœããŸãããèªã¿åãã¯ãªã¢ã«ã¿ã€ã ã§ã¯ãããŸããã
Yandexã¯æåã«MySQLã䜿çšããŸããã ãããã圌ã¯ClickHouseãäœæããŸãããããã¯ãåããŒã¿ãæ ŒçŽããåæ£åæDBMSã§ãHDDïŒSSDã¯éåžžã«é«äŸ¡ã§ãïŒã«æé©åãããéåžžã«é«éã§ãïŒ1ç§ãããæ倧10åã¬ã³ãŒããã¹ãã£ã³ã§ããŸãïŒã Yandexã®çç£ã§æ¢ã«ãã¹ããããŠããŸãã ClickHouseã¯ãããŒã¿ã®æ¿å ¥ãšã¯ãšãªã®ã¿ããµããŒãããŸãã åé€ãšç·šéã¯ãããŸããã

ããŒã¿ã¯æ¯æã®ããŒãã£ã·ã§ã³ã«ä¿åãããŸãã åããŒãã£ã·ã§ã³ã§ã¯ãäž»ããŒãå¢ããããšã§ããŒã¿ãé åºä»ããããŸãã ãã®å Žåã®ãäž»ããŒãã¯ãäžææ§ãä¿èšŒãããŠããªããããããŸãæ£ç¢ºã§ã¯ãããŸããã

äž»ããŒã§ãã°ããæ€çŽ¢ã§ããããã«ããããã«ãClickHouseã¯ãserifããã¡ã€ã«ã䜿çšããŸãããã®ãã¡ã€ã«ã§ã¯ãäž»ããŒã®å€ã䜿çšããŠç¹å®ã®æ°ã®ãšã³ããªã§ã»ãªããäœæããããã®å Žæã«é 眮ãããŸãã ããã«ãããå°æ°ã®ãã£ã¹ã¯æäœã§ããŸããŸãªäž»ããŒã§ã¯ãšãªãå®è¡ã§ããŸãã

æ¿å ¥ã¯æ¬¡ã®ããã«è¡ãããŸãã ããŒã¿ã¯äžæããŒãã£ã·ã§ã³ã«æžã蟌ãŸãããœãŒããããŸãã ãã®åŸãããã¯ã°ã©ãŠã³ãããã»ã¹ã§ãèšé²ããã°ããåæ¢ãããšããããã®ããŒãã£ã·ã§ã³ãããŒãžãããŸãã
ClickHouseã®æ©èœïŒ
- JOINã«ãã£ãŠå¶éãããSQLã
- ã¬ããªã±ãŒã·ã§ã³ãšã¯ã©ã¹ã¿ãŒãæ©èœããŸãã ãµããŒããããŠããŸãããè©ŠããŠã¿ãå¿ èŠããããŸãã
- 17ïŒãããããã以äžïŒå®è¡ã¢ã«ãŽãªãºã ããšã®ã°ã«ãŒãã
- ãããªã¢ã©ã€ãºããã¥ãŒãã°ããŒãã«ãžã§ã€ã³ã
- ãµã³ãã«ã®ãµã³ããªã³ã°ã ããŒã¿ã®äžéšã®ã¿ãæé©ã«èªã¿åãããšãã§ããå Žåã ããšãã°ãYandex.Analyticsã®ç¹å®ã®ãŠãŒã¶ãŒã®ã¿ã
䜿çšã·ããªãªïŒ
- ãªã¢ã«ã¿ã€ã åæã®ã¿ã¹ã¯ã
- æç³»å-github.com/yandex/graphouse
- ClickHouseãéåžžã«è¿ éã«éçŽã§ããçããŒã¿ã®ã¹ãã¬ãŒãžã ã€ã³ãã¬ãã·ã§ã³ãã¯ãªãã¯ããã°ãªã©
䜿çšããªãå ŽåïŒ
- OLTPã¿ã¹ã¯ïŒãã©ã³ã¶ã¯ã·ã§ã³ãªãïŒ
- ãéãæ±ãïŒååŒãªãïŒ
- éèšããŒã¿ã®ä¿åïŒæå³ãªãïŒ
- ããã/ã¿ã¹ã¯ã®åæžïŒãããã®å€ãã¯SQLã䜿çšããŠå®å šã«è§£æ±ºãããŸãïŒ
- å šææ€çŽ¢ïŒæå³ããªãïŒ
ãŽãããª

äœæã®åææ¡ä»¶ã¯ãTarantoolã®å Žåãšåãã§ãã ãµãŒããŒå šäœã«åºãããŠãŒã¶ãŒããŒã¹ããããŸãã ãããŠãããšãã°ã¡ãŒã«ãé»è©±ã§æ€çŽ¢ããå¿ èŠããããŸãã ãã ãããã®äŸã®TarantoolãããŒã¿ããŒã¹ã·ã£ãŒãã«å¯Ÿããé«ã¬ãã«ã®ã€ã³ããã¯ã¹ãšããŠæ©èœããå ŽåãCockroachDBã¯ãã¹ãŠãèªå® ã«ä¿åããããšããå§ãããŸãã
CockroachDBã®åã«èãããã解決çïŒ
Google Cloud Spanner
æ¿èªè +æåã·ã£ãŒãã£ã³ã°ïŒæ¢ã«Tarantoolã§èŠãããã«ïŒ
CockroachDBã¯ããšããšåæ£Key-Valueã¹ãã¬ãŒãžãšããŠäœæãããŸããããçŸåšã®çŸå®ã§ã¯ãæ°ããKey-ValueããŒã¿ããŒã¹ãå¿ èŠãšãã人ã¯ã»ãšãã©ããŸããã 誰ããSQLãæãã§ããŸãã SQLãJOINããã©ã³ã¶ã¯ã·ã§ã³ãACIDãäžæã®ã€ã³ããã¯ã¹ãèªåã·ã£ãŒãã£ã³ã°ããµããŒãããŠããŸãã Google Spannerã«ãã£ãŠäœæãããŸããã Goã§æžãããŠããŸãã ã»ãŒåããŠãJepsenãã¹ãã«åæ ŒããŸããã ãããŠããã§ã«Baiduã®çç£ã§äœ¿çšãããŠããŸãã
ããã§ã¯ããªã¬ãŒã·ã§ãã«ã¢ãã«ã¯Key-Valueã¹ãã¬ãŒãžã«ã©ã®ããã«é©åããŸããïŒ ããã¯æåã§ç°¡åã«é 眮ã§ããŸãã éåžžã«ç°¡ç¥åããããŒãžã§ã³ãæäŸããŸãã CockroachDBã§ã¯ããã¹ãŠãå°ãè€éã§ãã ããŒã¯éåžžã«åçŽã§ã-ããŒãã«å/ãã©ã€ããªããŒå€/ãã£ãŒã«ãåã

ã»ã«ã³ããªã€ã³ããã¯ã¹ãéåžžã«ç°¡åã§ãã ã€ã³ããã¯ã¹ã®ååãæã€å¥ã®ããŒã äž»ããŒã®å€ãšãšãã«ãäžæã§ãªãã€ã³ããã¯ã¹ã®å Žåã


ããŒã¿ã¯ããªãç°¡åãªæ¹æ³ã§ä¿åãããŸãããç§ã«ã¯éåžžã«æ£ããããã§ãã ã°ããŒãã«ã«ãœãŒããããKey-Valueãããã¯é åã«åå²ãããããŒã¿ããŒã¹ã¯çŽ64 MBãç¶æããããšããŸãã ãããã®åãªãŒãžã§ã³ã¯è€æ°ã®ããŒãã«è€è£œããããªãŒãžã§ã³ã®ãããã®ããŒãã®1ã€ã¯RaftãªãŒããŒã§ãã ã¬ã³ãŒãå šäœïŒããããèªã¿åããïŒã«å ¥ããŸãã ããã§ãããã€ãã®ããŒããèœã¡ããšæ³åããŠãã ããã Raftã䜿çšãããšãåå°åã®æ°ãããªãŒããŒããã°ããéžæã§ããŸãã ãããã£ãŠãæžã蟌ã¿ãšèªã¿åãã®äž¡æ¹ã䜿çšå¯èœã«ãªããŸãã
äž»ãªæ©èœã®1ã€ã¯ãåæ£ãã©ã³ã¶ã¯ã·ã§ã³ã®ãµããŒãã§ãã è€æ°ã®ããŒãã§ããŒã¿ããã©ã³ã¶ã¯ã·ã§ã³çã«å€æŽããå¿ èŠãããå Žåã ãããã¯ãã®ããã«å®è£ ãããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã®ãªã¹ããå«ãã·ã¹ãã ããŒãã«ããããŸãã ããŒã®å€ãå€æŽãããšããã©ã³ã¶ã¯ã·ã§ã³çªå·ãæã€ããŒãè¿ãã«è¿œå ãããŸãã ãã®ãããªããŒãèªã¿åããšããã©ã³ã¶ã¯ã·ã§ã³ããŒãã«ã¯ã³ããããããŠãããã©ããã確èªããç®çã®å€ãéžæãããŸãã æåãããšãå€ã¯æçµå€ã«çœ®ãæããããŸãã 倱æãããã©ã³ã¶ã¯ã·ã§ã³ã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠã¯ãªã¢ãããŸãã
å°æ¥ãCockroachDBã¯å€§èŠæš¡ãããžã§ã¯ãã®ã¡ã€ã³ããŒã¿ããŒã¹ãšããŠäœ¿çšãããå¯èœæ§ããããŸãã 1.0ãªãªãŒã¹ãæè¿ãªãªãŒã¹ãããŠä»¥æ¥ãããã¯ææå°æ©ã§ãã
䜿çšããªãå ŽåïŒ
CockroachDBåæ£ãã©ã³ã¶ã¯ã·ã§ã³ã¢ã«ãŽãªãºã ã®èª¬æãããããããã«ããã®ããã»ã¹ã¯é«éã§ã¯ãããŸããã ãããžã§ã¯ãã§äœã¬ã€ãã³ã·ãŸãã¯æ¯ç§é«ãã¯ãšãªãå¿ èŠãªå Žå-䟡å€ã¯ãããŸããã é²é³ãæéã§ã¯ãããŸããã
å³å¯ãªäžè²«æ§ãå¿ èŠãªãå Žåã åæ£ããŒã¿ããŒã¹ã®å Žåãããã¯éåžžã«éèŠãªèŠçŽ ã§ãã æ¡ä»¶ä»ãã§ããããŠãŒã¶ãŒããå¥ã®ãŠãŒã¶ãŒã«ã¡ãã»ãŒãžãéä¿¡ããå¿ èŠãããå Žåãã¡ãã»ãŒãžã®äœæè ã®ãµãŒããŒãšããã®ã¡ãã»ãŒãžã®éä¿¡å ã®ãµãŒããŒã«ã¡ãã»ãŒãžã«é¢ããèšé²ã衚瀺ãããŸãããããã¢ãããã¯ã«å®è¡ããããšããå§ãããŸãã
çµè«ãšããŠãåããŒã«ã¯è³¢æã«éžæããå¿ èŠãããã解決ããã¿ã¹ã¯ãšãã®å¶éãæ確ã«ç解ããå¿ èŠããããŸãã ç§ã®èšãããšãèããŠèªåã§ãã¹ãŠããã§ãã¯ããªãã§ãã ããã
ä»å¹ŽãStorageã®èå³æ·±ãã»ã¯ã·ã§ã³ã§ãã ããªãã®çµéšãå ±æããŠãã ããã Habrachitateli å²åŒ ã