ãšãã²ããŒã»ã·ã£ããªã³ïŒSberbank Digital VenturesïŒ
éå»æ°å¹Žã®ãã¥ãŒã¹ã远跡ãããšãæ°ããNoSQLãœãªã¥ãŒã·ã§ã³ãããã€ãã®ãªãªãŒã¹ãã»ãŒ2é±éããšã«è¡šç€ºãããããšãããããŸãã ãã¡ããããããã®å€ãã¯åç¶ããã競äºã«è² ããæ¶æ» ããŸãããNoSQLã®äžçã¯é »ç¹ã«æ°ãããœãªã¥ãŒã·ã§ã³ã§è£å ãããŸãã
äŒè°ã§ã¯ã人çã§NoSQLã䜿çšããããšã®ãªã人ãšããããžã§ã¯ããäŒæ¥ã§5幎以äžNoSQLã䜿çšããŠãã人ãããŸãã ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«åå ãã人ãããŸãã ãããã¯å°æ°ã§ããããã®ãããªãã®ããããŸãã
ç§ã®ååã¯ãŠãŒãžãŒã³ã§ãã ç§ã¯Sberbank Digital Venturesã®å°ããªæ¯åºã§åããŠããŸããSberbankDigital Venturesã¯ãé©æ°çãªè£œåãšãœãªã¥ãŒã·ã§ã³ã®å®è£ ã«åãââçµãã§ããŸãã ç§ãã¡ã¯ãæ°ããæè¡ã®æ¥ç¹ã§ITãããã¿ã€ããäœæããŸãã
ãã®ã¬ããŒãã§ã¯ããŠãŒã¶ãŒåŽã§NoSQLãœãªã¥ãŒã·ã§ã³ã䜿çšããå Žåã«ã€ããŠèª¬æãããã®ã§ãæåã¯çè«ã«ã€ããŠç°¡åã«èª¬æããŸãã
NoSQLãšã¯äœã§ããïŒ
ç§ã¯é åèªãSQLã ãã§ãªããã€ãŸã䜿çšããŠããŸãã SQL ã ãã§ã¯ãããŸãã ã ãããã¯ããªã¬ãŒã·ã§ãã«ãšã¯ç°ãªããããã€ãã®åé¡ã解決ããããã«èšèšãããããŒã¿ã¢ãã«ãå«ããœãªã¥ãŒã·ã§ã³ã§ãã ããšãã°ãã¹ã±ãŒãªã³ã°ã®å®¹æãã®åé¡ã å€ãã®å ŽåãããŒã¿ãä¿åããã³æäœããããã®NoSQLãœãªã¥ãŒã·ã§ã³ã¯ãç¹å®ã®ã¹ããŒã ããšã³ãã£ãã£ãããã³å€ãã®æ§æãæå®ããå¿ èŠããªããããã¹ã±ãŒãªã³ã°ã®åé¡ã解決ããå€æ°ã®ããŒããæã€å€§èŠæš¡ãªã¯ã©ã¹ã¿ãŒãå±éãããããã®ããŒããè¿œå ããã³åé€ããããšã¯éåžžã«ç°¡åã§ç°¡åã§ãã ãŸããNoSQLãœãªã¥ãŒã·ã§ã³ã¯å€ãã®å Žåéåžžã«å°éåãããŠããŸãã åéçºããŒã ã¯åžžã«å€§èŠæš¡ãªæ®éçãªãããžã§ã¯ããäœæããããšããã®ã§ã¯ãªããåé¡ã解決ããããšããŸãã ãã®ãããªãœãªã¥ãŒã·ã§ã³ã®ç¹æ®åã«ãããç¹å®ã®ã¿ã¹ã¯ã§éåžžã«é«ãããã©ãŒãã³ã¹ã€ã³ãžã±ãŒã¿ãŒãå®çŸã§ããŸãã ãã®ãããªã¿ã¹ã¯ã§ã¯ãNoSQLãœãªã¥ãŒã·ã§ã³ã䜿çšãããšäŸ¿å©ã§ç°¡åã«ãªããŸãã
ããã§ã¯ãæã人æ°ã®ããããŒã¿ããŒã¹ãåé¡é ã«ç€ºããŸããã RedisãªããžããªãšRiakãªããžããªã®Key-Valueã«ã€ããŠèããããšããããŸãããããã¯ãKey-Valueã¢ãã«ã䜿çšããŠããŒã¿ãä¿åããŸãã MongoDBã®ããã¥ã¡ã³ãæåããŒã¿ããŒã¹ã¯éåžžã«äžè¬çã§æåã§ãã ããã¥ã¡ã³ãæåã¢ãã«ã¯ãããŒå€ã¢ãã«ãããããè€éã§ãããéåžžã«å€§ããªéå±€æ å ±ãä¿åã§ããŸãã ããã«ã衚圢åŒã®ãããªãã¯ã¹ããŒã¿ããŒã¹ïŒApache HBaseãªã©ïŒããããŸãã 圌ãã¯å€ãã®åæ£æ å ±ãæ±ãããšãã§ããŸãã ãããšã¯å¥ã«ãOrientDBã¯éç«ã£ãŠããŸã-ãã«ããã©ãã€ã ããµããŒãããããŒã¿ããŒã¹ã§ãããã°ã©ãã¢ãã«ããµããŒãããããŒã¿ããŒã¹ã®äŸãšããŠæããŸããã ã°ã©ãã¢ãã«ã«ã¯å©ç¹ããããŸããããŒã¿éã®é¢ä¿ã远跡ããããšã¯éåžžã«äŸ¿å©ã§ããããã¯ããœãŒã·ã£ã«ãããã¯ãŒã¯ã«äŒŒããããžã§ã¯ãã§äœæ¥ããå Žåã¯æªããããŸããã
ããããå€æ§æ§ã®äžãããèªåã«åã£ããœãªã¥ãŒã·ã§ã³ãéžæããæ¹æ³ã¯ïŒ ç§ã¯æ¬¡ã®ååã䜿çšããŸãã
- è»èŒªãåçºæããªãã§ãã ããã æŠãã«æ欲çãªéçºããŒã ã«äŒãã圌ãã¯èªåã«åã£ãç¬èªã®å°ããªãªããžããªãããã«äœæããå¿ èŠãªçš®é¡ã®ããŒã¿ãä¿åãããšè¿°ã¹ãŸããã ãã¹ãŠãããã»ã©åçŽã§ã¯ãããŸããã ããã§ã¯ãTarantoolããŒã¿ããŒã¹ã¯4幎以äžã«ãããããã®éçºè ããŒã ã«ãã£ãŠéçºãããŠãããåžžã«è§£æ±ºã解決ã解決ã«å€ãã質åãããã€ããããŸãã å€ãã®NoSQLãœãªã¥ãŒã·ã§ã³ã¯10幎以äžåã®ãã®ã§ãã ãããã£ãŠãç¹å®ã®ã¿ã¹ã¯ã«åºã¥ããŠå¿ èŠãªãœãªã¥ãŒã·ã§ã³ãéžæããã®ã¯æ£ããããšã§ãã
- ã»ãšãã©ã®ããŒã¿ããŒã¹ã¯ãåé¡ã解決ããããã«èšèšãããŠããŸãã 解決ããŠããåé¡ãç解ããŠããã°ãé©åãªè§£æ±ºçãèŠã€ããããšãã§ããã§ãããã
- ãä»è ã®çµéšã掻çšããããšããç¹ãæ確ã§ããããšãé¡ã£ãŠããŸãã ã€ã³ã¿ãŒãããã®äžçã§ã¯ãç»ããã°ãŒã°ã«ã§èªã¿ãæ¬ãèªãã§ãæåŸã«åããŸããæžããŠããããããŒã«æçŽãæžããŠèšãã®ã¯ããã»ã©é£ããããšã§ã¯ãããŸããã æããŠãã ããã圌ã«ããã解決ããããã«ã©ã®ããã«ã¢ããã€ã¹ããŸããïŒã å€ãã®éçºè ã¯ãéåžžã«åå¿ãè¯ãã圹ã«ç«ã¡ãŸãã
- éãè¯ããã¿ã¹ã¯ã«ããã€ãã®è§£æ±ºçãããå Žåã¯ãããã©ãŒãã³ã¹ãé·æéæ¯èŒãããããã¹ãã¹ã¿ã³ããæ§ç¯ããããAãšBã®ã©ã¡ããè¯ãããç解ãããããªãã§ãã ããã 補åã®å解ãå解ã®æéãç¯çŽããŠãã ããã ããªããç¥ã£ãŠããã°-ãŸããããªãã®ååãç¥ã£ãŠããã°-ãŸãæªããªããªãããã€ã§ã圌ã«é Œãããšãã§ããŸãã
ãŸããNoSQLã解決ããã±ãŒã¹ã®ç°¡åãªãªã¹ãã
ç§ã¯ãããã®ã»ãšãã©ã«å人çã«åºäŒã£ãã
- ããã£ãã·ã¥ãããŒã¿-æåãªMemcachedããŒã¿ããŒã¹ã ããã§ãäžéããŒã¿ã®ã¹ãã¬ãŒãžãè¿œå ã§ããŸãã ããã¯ãé©åãªã¿ã€ãã³ã°ã§ãããã«ã¢ã¯ã»ã¹ãããããŒã¿ã§ãã
- ã倧éã®ããŒã¿ãæ±ããã¯ããããæ£ãããšã¯æããŸããããªããªãããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã¯å€§èŠæš¡ã§å·šå€§ãªããŒã¿ã¹ããªãŒã ã§ãæ©èœããããã§ããã€ãŸãããã¹ããªãŒã ããšããèšèãæå³ããŸãããµãŒããŒãªã¯ãšã¹ãããããŠãããããã°ããä¿åãã次ã«äœããã¹ãããèããŸãã ããšãã°ãHBaseã¯Hadoop補åã®äžéšãšããŠãã®åé¡ã解決ããŸãã
- ãã¥ãŒãµãŒãã¹ã NoSQLã¯ãã¥ãŒãµãŒãã¹ã®äžéšãšããŠæ©èœã§ããŸãã ããšãã°ãRabbitMQãšRedisã®çµã¿åããã¯ãç§ã®ç·Žç¿ã§æ°åæºããããŸãããNoSQLã®åœ¢åŒã®ã·ã³ãã«ã§äŸ¿å©ãªããã¯ãšã³ãã§ãã
- ãããšã¯å¥ã«ãçµ±èšããŒã¿åŠççšã®ãã©ãããã©ãŒã ãæã¡åºããŸããã ããã¯ãããŒã¿ãåä¿¡ããããããã¹ãŠãä¿åããããªãå Žåã§ããã¡ã¢ãªããªãããªãœãŒã¹ãéãããŠããŸãã ãã®ããŒã¿ãããã«åŠçã§ããŸãã ããšãã°ããŠãŒã¶ãŒã®å åãååŸããäžå¿ èŠãªå åãæšãŠãæ®ããæ£èŠåããŠãåçŽã«ãããŒå€ããã¯ãã«ã®åœ¢åŒã§ãããšãã°Redisã«æ ŒçŽã§ããŸãã
- ãŸããNoSQLãã¹ãã¬ãŒãžã®å°ããªäŸ¿å©ãªããã¯ãšã³ããšããŠäœ¿çšã§ããŸãã ãã æŸã£ãŠä¿åããŸããã MongoDBã¯ããã®ã±ãŒã¹ã«é©ããé«éã§äŸ¿å©ãªå±éå¯èœãªããŒã¿ããŒã¹ã§ãã
ãã¡ãããã±ãŒã¹ã¯ãã£ãšå€ããããŸãããç§ãééããã±ãŒã¹ã«ã€ããŠè©±ããŸããã äžè¬ã«ãSberbank Digital Venturesã§ã¯ããªã¢ã«ã¿ã€ã ã§åäœãããµãŒããŒããæ å ±ãåä¿¡ãä¿åãåŠçãå 容ãç解ãããµãŒããŒã«æ£ããçããæäŸããããšãäž»ãªç®çãšããã·ã¹ãã ãéçºããŠããŸãã
ããšãã°ãã€ã³ã¿ãŒãããã®ã©ãããæ©ããŠãããŠãŒã¶ãŒã«é¢ããå¿ èŠãªæ å ±ãååŸããŸãã åéãåæã§ãããã¹ãŠã®ããŒã¿ãååŸãããŠãŒã¶ãŒãã»ã°ã¡ã³ãåããŠã1ã€ãŸãã¯å¥ã®ã«ããŽãªãã€ãŸã ããšãã°ãããã¯è»ã«èå³ããã25æ³ã®è¥è ããŸãã¯å€§åŠã«é²åŠããŠå ¥åŠã®ããã«è³briãåãåãå Žæãæ¢ããŠãã18æ³ã®å°å¥³ã§ãã
ç§ã®åé¡ã解決ããããã«ãNoSQL TarantoolããŒã¿ããŒã¹ã䜿çšããŸãã å°æ¥çã«ã¯ããªãããã䜿çšããã®ãããªã䜿çšããã®ãããããŠç®ã®åã§çºçããåé¡ã®è§£æ±ºã«ã©ã®ããã«åœ¹ç«ã€ã®ãã説æããŸãã
ã¹ã©ã€ãã«ã¯ãéçºè ãµã€ãã®ã¡ã€ã³ããŒãžããã®åŒçšããããŸããããã¯ãããžã§ã¯ãã®äœçœ®ä»ãã§ãã ãLuaã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§å®è¡ãããŠããNoSQLããŒã¿ããŒã¹ããã€ãŸã éçºè èªèº«ãTarantoolã2ã€ã®éšåã§æ§æããããããžã§ã¯ããšããŠäœçœ®ä»ããŠããŸããæåã®éšåã¯éãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ããã2çªç®ã®éšåã¯Luaã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§ãã Luaèšèªã䜿çšããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã
ãšããã§ãæè¿ã®ã»ãšãã©ã®NoSQLããŒã¿ããŒã¹ã¢ã€ã³ã³ã¯ã°ã¬ãŒãšèµ€ã®è²ã䜿çšããŠããããšã«æ³šæããŠãã ããã ããã¯ãããããã¬ã³ãã«ãããŸã=ïŒ
ããã«ãã³ãŒãäŸã瀺ããŸãã 誰ãã«æ©äŒãããã°ããµãŒããŒtry.tarantool.orgãžã®ãªã³ã¯ããã©ãããšãã§ããŸããããã¯ãTarantoolãããã«äœ¿çšã§ããã€ã³ã¿ã©ã¯ãã£ããªãµãŒãã¹ã§ãã ããã¯äžçš®ã®ã€ã³ã¿ã©ã¯ãã£ããªTarantoolã§ãããéçºãµãŒããŒã§éç«ã£ãŠããŸãã ãããã誰ããããã«ã³ãŒãäŸãé§åããããšæãã§ãããã
TarantoolãNoSQLãã¯ãããžãŒã®å€§èŠæš¡ãªã¹ã¿ãã¯ãšåºå¥ãããã®ã¯äœã§ããïŒ
Tarantoolã¯ãã¹ãŠã®ããŒã¿ãã¡ã¢ãªã«ä¿åãããããããã«ã¢ã¯ã»ã¹ã§ããŸãã Tarantoolãã¡ã¢ãªã«ããããä¿åãããšããäºå®ã¯ããããå®å šã§ã¯ãªããããŒã¿ã倱ãå¯èœæ§ãããããšãæå³ããŸããã Tarantoolã«ã¯ããã°ãšãã€ããªç¶æ ã®ã¹ãããã·ã§ãããšããããŒã¿ã¹ãã¬ãŒãžã¡ã«ããºã ããããŸãã ãããã®2ã€ã®ã¡ã«ããºã ã¯é£æºããŠæ©èœããŸããä¿åãããããŒã¿ãšããã®ããŒã¿ã䜿çšããŠååŸã«å®è¡ãããã¢ã¯ã·ã§ã³ã®èª¬æãå«ããã€ã³ãããããŸãã ãã®æ å ±ã«ããããã€ã§ãæ£ããç¶æ ã«å°éã§ããŸãã
ãã€ãŠãããŒã¿ãã¡ã¢ãªã«ä¿åãããšããã®ã¡ã¢ãªãéåžžã«æ©ãçµäºãããšããäºå®ã«è³ããŸããã çŸåšã¯çµäºããŠããŸãããããã§ãRAMã®éã¯çµ¶ããå¢å ããŠãããåæ§ã®ããŒã¿ããŒã¹ã¯ããåºç¯ãªã¢ããªã±ãŒã·ã§ã³ãååŸããŠããŸãã Tarantoolã¯ããã¥ã¡ã³ãããŒã¹ã®ããŒã¿ã¢ãã«ã䜿çšããŠããŸãã 圌ã¯ãã¹ãŠã®ããŒã¿ãããã¥ã¡ã³ããšåŒã°ããæœè±¡æŠå¿µã«ä¿åããŸãã ãã®ããã¥ã¡ã³ãã«ã¯ç¬èªã®ãã£ãŒã«ãããããTarantoolã§äœ¿çšã§ããŸãã
ããŒã¿ããŒã¹ãšããŠã®Tarantoolã®æ©èœã®1ã€ã¯ãã»ã«ã³ããªã€ã³ããã¯ã¹ã®å¯çšæ§ã§ãã ã»ã«ã³ããªã€ã³ããã¯ã¹ãååšããããšã§ãããŒã¿ã䜿ã£ãã¢ã¯ã·ã§ã³ããã掻çºã«ãèå³æ·±ããããéãããããšãã§ããŸãã
ç§ã¯ãããžã§ã¯ãã§ãã©ã³ã¶ã¯ã·ã§ã³ããŸã 䜿çšããŠããŸããããTarantoolã¯æ¬æ Œçãªãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããŠããŸãã ç§ãç¥ãéããäžéšã®äŒæ¥ïŒAvitoã®Mail.Ru GroupïŒã§ã¯ããããã䜿çšããŠåé¡ã解決ããŠããŸãã Tarantoolã«ã¯ã軜éã¹ã¬ãããŸãã¯ã°ãªãŒã³ã¹ã¬ããã®ã¢ãã«ããããŸãã ããã¯ãã«ãã¹ã¬ããã¢ãã«ã§ãããUnixã¬ãã«ã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³èªäœã®å éšã§ã¹ã¬ããã®ã¿ãäœæãããŸããããã«ãããäœããã®éåæã€ãã³ãã€ãã³ãã¢ãã«ãå®è£ ã§ããŸãã
Tarantoolã¯ãããã¯ãŒã¯ãšãã¡ã€ã«ã§ãåäœããŸããç¬èªã®HTTPãµãŒããŒããã¡ã€ã«ãä¿åããã³éãç¬èªã®ã©ã€ãã©ãªãåããŠããŸãã ãŸããåé¡ã®è§£æ±ºã«ã圹ç«ã¡ãŸããã
Tarantoolã¯Luaã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§ãããLuaã¯Tarantoolåã蟌ã¿èšèªã§ãã ããã§ã¯ãLuaãäœã§ãããã瀺ãããã«å®éã«ã¯çµ¶å¯Ÿã«äœ¿çšãããªãéåžžã«äººå·¥çãªã¹ã¯ãªããã®äŸã瀺ããŸããã
#!/usr/bin/tarantool -- This is lua script function hw(a, b) print (a.hello..b.world) end b = {} a = { hello = 'Hello ' } b['world'] = 'world!' hw(a, b)
Luaèšèªã¯ãã©ãžã«ã®ã«ããªãã¯å€§åŠã§éçºãããŸããã ããã¯ãããŒã¿ãåŠçããããŒã¿ããŒã¹ãåŠçããããã«åŒ·åãããSOLèšèªããæ¥ãŸããã ããã§ãããã¯åãªãã¹ã¯ãªããã§ã¯ãªããå®è¡å¯èœãªã¹ã¯ãªããã§ããããšãããããŸãã ãã³ãèšå·ãšæå笊ã¯ããã®ã¹ã¯ãªããã誰ãã©ã®ããã«å®è¡ããããæå®ã§ããã¡ã«ããºã ã§ãã ã³ã³ãœãŒã«ã«
tarantool script.lua
ãšå ¥åãããšãç»é¢ã«
hello world
ã衚瀺ãããŸãã ããã§ã¯ã2ã€ã®ãªããžã§ã¯ãã§æ©èœããé¢æ°ãåç §ãã以äžã§ã¯ãããã®ãªããžã§ã¯ãèªäœãåæåããŸãã
Luaã®äž»ãªããŒã¿æ§é ã¯ããŒãã«ã§ãã ãªããžã§ã¯ã
a
ãš
b
ã¯ããŒãã«ã§ãããLuaãéåžžã«æè»ã§æ§æçã«åªããŠããããšã瀺ãããã«ãæå³çã«ç°ãªãæ¹æ³ã§åæåããŸããã ãããã®ããŒãã«ã«ã¯ãä»ã®ããŒã¿ãå«ãŸããŠããå ŽåããããŸããããšãã°ãåãããŒãã«ã«ä»ã®ããŒã¿ãå«ãŸããŠããå ŽåããããŸãã æã ãçµéšã®æµ ããéåžžã«å€§ããªãã¹ããæ§æããŠããŸããã é¢æ°ã¯ããŒãã«å ã«ä¿åããããšãã§ããŸãã äžè¬ã«ãããŒãã«ãšåæ§ã«ãé¢æ°ããªããžã§ã¯ããæäœããããšãã§ããŸããããã«ã¯ã¡ãœããããããŸãã
ããã«ãå¶äœã®äžéšã§å€æŽããã³äœ¿çšã§ãããããå®çšçãªã¹ã¯ãªããã®äŸã瀺ããŸãã 圌ã¯å°ããªåé¡ã解決ããéåžžã«ç°¡åã«è§£æ±ºããŸãã圌ã¯ããŒãžäžã®ãŠããŒã¯ããžã¿ãŒã®æ°ãèæ ®ããŸãã
#!/usr/bin/tarantool -- Tarantool init script local log = require('log') local console = require('console') local server = require('http.server') local HOST = 'localhost' local PORT = 8008 box.cfg { log_level = 5, slab_alloc_arena = 1, } console.listen('127.0.0.1:33013') if not box.space.users then s = box.schema.space.create('users') s:create_index('primary', {type = 'tree', parts = {1, 'NUM'}}) end function handler(self) local id = self:cookie('tarantool_id') local ip = self.peer.host local data = '' log.info('Users id = %s', id) if not id then data = 'Welcome to tarantool server!' box.space.users:auto_increment({ip}) id = box.space.users:len() return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' }) else local count = box.space.users:len() data = 'You id is ' .. id .. '. We have ' .. count .. ' users' return self:render({ text = data }) end end httpd = server.new(HOST, PORT) httpd:route({ path = '/' }, handler) httpd:start()
ããã¯ãããããå®è¡å¯èœãªLuaã¹ã¯ãªããã§ãããTarantoolã§èµ·åãããããã«åã蟌ãŸããäžé£ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
ããã«ãããã®ã®ãããã¯ãç°¡åã«èŠãŠããã詳现ãåæããŸãã
äžéšã§ãå¿ èŠãªã¡ã«ããºã ïŒãã°ãã³ã³ãœãŒã«ããµãŒããŒïŒãä»ããŠå¿ èŠãªããã±ãŒãžãæ¥ç¶ããŸãã 䜿çšããããã€ãã®å®æ°ãå®çŸ©ããŸãã
次ã®ã¹ãããã¯ã
box.cfg
ã¢ãžã¥ãŒã«ã䜿çšããŠTarantoolããŒã¿ããŒã¹ãæ§æããããšã§ããããã§ãå¿ èŠãª2ã€ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã ã³ã³ãœãŒã«ãèµ·åãã
box.schema.space.create('users')
ã䜿çšããŠããŒã¿ããŒã¹ãšã³ãã£ãã£ãäœæããŸãã ãŠãŒã¶ãŒã¹ããŒã¹ãäœæããŸããã ããã«ã€ããŠã¯å°ãåŸã§èª¬æããŸãã
ã¹ã¯ãªããã®2çªç®ã®éšåã¯TarantoolãµãŒããŒã§åäœããŠããŸãã
handler
é¢æ°ïŒèŠæ±ãã³ãã©ãŒïŒã«ã€ããŠèª¬æãã以äžã§ãµãŒããŒãäœæããåŠççšã®
route
ãäœæããŠãã®ãµãŒããŒãèµ·åããŸãã
ãŠãŒã¶ãŒåŽããèŠããšããã®ã¹ã¯ãªããã®å®è¡çµæã¯æ¬¡ã®ããã«ãªããŸãã
ãŠãŒã¶ãŒã¯ãããšãã°localhostã«ãã°ãªã³ãããŠã§ã«ã«ã ã¡ãã»ãŒãžãèŠãŸããã å°æ¥ã圌ãããŒãžãæŽæ°ãããšã圌ã¯ãã§ã«
cookie
ãžã®ãªã³ã¯ãæã¡ãããçš®ã®
id
ãå²ãåœãŠããããã®ããŒãžã«ã¢ã¯ã»ã¹ãããŠããŒã¯ãŠãŒã¶ãŒã®æ°ãããããŸãã
ãã®å°ããªã¹ã¯ãªããã¯ãç§ãå¿ èŠãšããããã€ãã®åé¡ã解決ããŸã-ããã¯ããªãLuaèšèªã䜿çšããã®ããšãã質åã«å¯Ÿããçãã§ãã
Luaèšèªã¯éåžžã«ã·ã³ãã«ã§ãã ã15åã§ã«ã¢ããã30åã§ããšããèšäºããã¹ãŠãããŸãããã®èå³æ·±ãèšèªã«æ £ããã«ã¯ãå°ãã ãå¿ èŠã§ãã æ°æéã§ããã®ãã¹ãŠã®æ©èœãåŠç¿ããŸãã
äž»ãªããŒã¿æ§é ãããŒãã«ã§ãããšéåžžã«äŸ¿å©ã§ãã ããã«ãããä»ã®ãã¹ãŠã®ããŒã¿ãåäžã«åŠçã§ããŸãã
æšæºã®Luaã€ã³ã¿ãŒããªã¿ãŒèªäœã¯éåžžã«é«éã§ã¯ãªãããããéåžžã«é«éã§ã¯ãããŸããããJITã³ã³ãã€ã«ãè¡ãåæ§ã®LuaJITã€ã³ã¿ãŒããªã¿ãŒããããã¯ããã«é«éã§ãã Luaãéåžžã«çç£çãªèšèªã«ããã®ã¯åœŒã§ãã
æ©èœçãªã¹ã¿ã€ã«ã§Luaã§ããã°ã©ã ã§ããããã«ããluafunã©ã€ãã©ãªããããŸãã LuaJITã®ãããã§ããã®ã©ã€ãã©ãªã¯éåžžã«é«éã§ãã ããªãã¯ã°ãŒã°ã«ãããã«ã€ããŠèªãã§ããã®ããã©ãŒãã³ã¹ã«é¢ããã¬ãã¥ãŒãèŠãããšãã§ããŸã-éåžžã«èå³æ·±ãã
Luaã¯åã蟌ã¿èšèªãšããŠãéåžžã«åªããŠãããCèšèªãšã®åªããçµ±åæ§ãåããŠããŸãã æåãªWorld of Warcraftã²ãŒã ã®éåžžã«å€ãã®æ¡åŒµæ©èœãã¯ãšã¹ããããã³ããŸããŸãªã²ãŒã ã¡ã«ãã¯ã¹ãšããžãã¯ã¯ãLuaã§èšè¿°ãããŠããŸãã
Tarantoolã¯æ¬æ ŒçãªLuaã€ã³ã¿ãŒããªã¿ãŒã§ãã Tarantoolãèµ·åããã ãã§ããã°ãLuaãç°¡åã«äœ¿çšã§ããŸãã
Tarantoolã¯ã2ã€ã®ãšã³ãã£ãã£ã§èµ·åã§ããŸãã
- 1ã€ç®ã¯ã€ã³ã¿ãŒããªã¿ãŒãšããŠãã€ãŸã Tarantoolãèµ·åããããã€ãã®ã³ãã³ãã1è¡ãã€å®è¡ããŸãã ããã¯ãäœããç¥ããªãå Žåããããã¥ã¡ã³ãããã³ãã³ããå®è¡ããå Žåã«äŸ¿å©ã§ãã
- 2çªç®
init.lua
èµ·åã¹ã¯ãªããã䜿çšããŠïŒå¥œããªããã«åŒã³åºãããšãã§ããŸãïŒãã³ãã³ãã®ã·ãŒã±ã³ã¹ãæžã蟌ãŸããŸãã
äžèšã®init.luaèµ·åã¹ã¯ãªããã®äŸãããã«è©³ããèŠãŠã¿ãŸãããã
äœæ¥ã¯ããã®æ§æãæã€ããŒã¿ããŒã¹ãã€ãŸã
box.cfg
ã¡ã«ããºã ã¯ãå éšã«
cfg
ã©ãã«ãå«ã
box
ããã±ãŒãžã§ãããããã€ãã®ãã©ã¡ãŒã¿ãŒãèšå®ã§ããŸãã ããã¯ã¹ã¯ããã¯ã¹ã§ãã ãã®ããã±ãŒãžã¯ãããŒã¿ããŒã¹ãçŽæ¥ç®¡çããŸãã Tarantoolã®èµ·åãããã·ãŒãžã£ãé¢æ°ã®å®è¡ãã¡ãã»ãŒãžã®æžã蟌ã¿ãªã©ãå®è¡ã§ããŸããã
box.cfg
ãæ§æããªããšããŒã¿ããŒã¹ã¯èµ·åããŸããã ãã®å Žåã衚瀺ããã2ã€ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã ãŸããå°å·ããããã°ã®ã¬ãã«ãèšå®ããŸã-ããã¯5çªç®ã®ã¬ãã«ã§ããDEBUGã§ãã ãŸããéåžžã«éèŠãªãã©ã¡ãŒã¿ãŒ
slab_alloc_arena
èšå®ããŸãããããã¯ãå²ãåœãŠãšããŒã¿é 眮ã®ããã«Tarantoolã§ãããæ£ç¢ºã«ã¯RAMã§å²ãåœãŠãããã¡ã¢ãªã§ãã ãã®å Žåãã1ãã¯1 GBã§ãã
ããã¯ã¹ããã±ãŒãžã«ã¯ã次ã®ãããªå€ãã®ä»ã®è£å©çãªãã®ãšããŒã«ãå«ãŸããŠããŸãã
-
box.info
ã¯ãbox.info
ã«é¢ããäžè¬æ å ±ã衚瀺ããã©ã€ãã©ãªã§ãã -
box.slab
ã¯ãbox.slab
ã®ããŒã¿ãç£èŠããæ®ã£ãŠããã¹ããŒã¹ã確èªããããã®éèŠãªãã¬ãŒãã§ãã -
box.stat
çµ±èšã©ã€ãã©ãªãinsert
ãselect
ãããã³å®è¡ãããã®ä»ã®æäœã®æ°ã瀺ããŸãã
ãã©ã¡ãŒã¿ãŒãèšå®ããåŸã«Tarantoolã€ã³ã¿ãŒããªã¿ãŒã§box.cfgãš
box.cfg
ãããšãããã«ãããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã®èª¬æãå«ããªããžã§ã¯ããååŸãããŸããèšå®ãããã©ã¡ãŒã¿ãŒã ãã§ãªããããã©ã«ãã§èšå®ãããŠãããã©ã¡ãŒã¿ãŒããããŸãã
ããã§ã
slab_alloc_arena
-1 GBã®å²ãåœãŠã¹ããŒã¹ã5çªç®ã®ã¬ãã«
log_level
ïŒDEBUGïŒãéèŠãªãã©ã¡ãŒã¿ãŒsnapshot_countãèšå®ãããŠããããšãããããŸããããã¯Tarantoolãä¿åããã¹ãããã·ã§ããã®æ°ã§ãã ãã®å Žåãç¹å®ã®æéã«æ®åœ±ãããææ°ã®6æã®åçãä¿åãããŸãã ãšããã§ããã®æéã¯ãŸãã
snapshot_period
ãã©ã¡ãŒã¿ãŒã䜿çšããŠããã§èšå®ãããŸãã ããã©ã«ãã§ã¯ããã®å€ã¯3600ç§ã§ãã Tarantoolã¯1æéã«1åã¹ãããã·ã§ãããæ®ããŸãã èªåã§å¿ èŠãªã»ãã¥ãªãã£ã¬ãã«ãéžæããããšãã§ããå°ãªããšã1ç§ããšãŸãã¯1åããšã«åçãæ®ãããšãã§ããŸããããªãœãŒã¹ãéåžžã«å æããŸãã
snap_dir
ããã³
wal_dir
ãã¹ãããã·ã§ãããšãã°ãããããä¿åããå Žæã決å®ããŸãã
次ã«ã
box.info
ããã±ãŒãžã®äŸã
box.info
ãŸãã ããã§ã¯ãTarantoolã«é¢ããæ å ±ãã€ãŸã TarantoolãããŒã¢ã³ãšããŠå®è¡ãããŠããå Žåããã®pidãããŒãžã§ã³ïŒçŸåšãããŒãžã§ã³1.6.5ãé¢é£ããŠããŸãïŒã皌åæéãããã³ãã·ã³ã®ã¹ããŒã¿ã¹ã確èªã§ããŸãã
ããŒã¿ãèšå®ããããTarantoolå ã®ãšã³ãã£ãã£èªäœãããŒã¿èªäœã®äœæã«é²ãããšãã§ããŸãã
ããã§ãããã¥ã¡ã³ãããåçãåããŸããã ããã¯ãTarantoolããŒã¿ã¢ãã«ã®ç»åã§ãã Tarantoolã§ã¯ãããŒã¿ã¯ã¹ããŒã¹ã«æ ŒçŽãããåã¹ããŒã¹ã«ã¯ã¿ãã«ãšã³ãã£ãã£ããããŸãããããã¯ããã©ã€ããªãŸãã¯ã»ã«ã³ããªã®æå®ããã¬ã³ãŒããšã€ã³ããã¯ã¹ã§ãã
æ§æãå®äºããããããŒã¿ããŒã¹ã®å ¥åã«é²ã¿ãŸãã ãŠãŒã¶ãŒæ å ±ãèšå®ããã¹ããŒã¹ãå¿ èŠã§ãã
ãã®æ å ±ãæ¡ä»¶ä»ãæ§é ã«å ¥ããŠããããšã«æ°ã¥ããããããŸããã ããã¯ç¹å®ã®ç®çã®ããã«è¡ãããŸããïŒäœããã®çç±ã§Tarantoolãåæ¢ããä¿åãããç»åãšãã°ã§åèµ·åããå Žåãèµ·ååã«ç¶æ ã埩å ããŸãã ã¹ãããã·ã§ãããåããxlogããã¢ã¯ã·ã§ã³ãå®è¡ããŸãã ãã®æ¹æ³ã§å®è¡ãããšãå¿ èŠãªãŠãŒã¶ãŒã¹ããŒã¹ãäœæã§ããŸããããã»ãšãã©ã®å Žåã¯å¿ èŠãªãããããšã©ãŒãçºçããªãããã«ãã®ãããªãã§ãã¯ãæ¿å ¥ããããšãéåžžã«å€ããããŸãã ãã®ãããªã¹ããŒã¹ãäœæããŠããªãå Žåã¯ãã¹ããŒã¹ãšãã®ã€ã³ããã¯ã¹ãäœæããŸãã ãã®å Žåãããã¯
primary
-åäžã®æ°å€ã§ããããªãŒåœ¢åŒã®ãã©ã€ããªã€ã³ããã¯ã¹ã
å°æ¥ãã¹ã¯ãªããã«æ°ãããŠãŒã¶ãŒãšã³ããªãè¿œå ããå¿ èŠããããŸãã ããŒãšå€ã®ãã¢ãæž¡ãæšæºã®
insert
æäœã䜿çšããŠãããè¡ãããšãã§ããŸãããç§ã®å Žåããã®åçŽãªã¹ã¯ãªããã§ã¯
auto_increment
ã䜿çšããŠãããè¡ãã®ã䟿å©
auto_increment
ã ãŠãŒã¶ãŒã¯ãã°ã€ã³ãããã®æç¹ã§ããŒã¿ããŒã¹å ã®ã¬ã³ãŒãæ°ããã1ã€å€ãããŒãèªåçã«å²ãåœãŠãããŸãã ããŒã¿ããŒã¹å ã®ã¬ã³ãŒãæ°ã調ã¹ããå Žåã¯ãæšæºã®
len()
ã¡ã«ããºã ã䜿çšã§ããŸãã ã芧ã®ãšãããæ§æã¯éåžžã«ã·ã³ãã«ã§ç°¡åã§ãã
åè¿°ã®ããã«ãTarantoolã¯åãªãããŒã¿ããŒã¹ã§ã¯ãªããæ¬æ ŒçãªLuaã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§ãã ãããããããã§ã®éçºè ã¯ãLuaã§ä»»æã®ã¢ãžã¥ãŒã«ãšããã±ãŒãžãäœæããããã«ãã£ãŠå¿ èŠãªããžãã¯ãå®è£ ã§ããããšãæå³ããŸããã å®éãããªãã¯å€§ããªèªè»¢è»ãçºæããŸãã-ããªããæ¬åœã«ãããå¿ èŠãšããããä»ã®ãœãªã¥ãŒã·ã§ã³ã§å¿ èŠãšããªããªããããªãã¯ããã€ãã®å°ããªèªè»¢è»ãçºæããããšãã§ããŸãã
ãããã¯ãã¹ãŠãGitHubã®ãªããžããªã§ç¢ºèªã§ããŸãã äœããã®åœ¢ã§äœ¿çšãããäž»ãªã¢ãžã¥ãŒã«ã¯ãhttpãšãã¥ãŒã§ãã ããšãã°ã try.tarantool.orgã¯å®å šã«Tarantoolã§èšè¿°ãããŠãããTarantoolãµãŒããŒã§ããTarantoolãªããžããªã䜿çšããŸãã Tarantoolã¯ãLuaRocksããµããŒãããŠããŸããLuaRocksã¯ããã®ãªããžããªãšé£æºããããã±ãŒãžã®ã€ã³ã¹ããŒã«ã«éåžžã«äŸ¿å©ãªããã±ãŒãžãããŒãžã£ãŒã§ãã ããã¯1ã€ã®ããŒã ã«ãã£ãŠè¡ãããŸãã
ããã±ãŒãžã ããã±ãŒãžãæ¥ç¶ããå¿ èŠããããŸãã
ããã±ãŒãžãšã¯ãäœããã®ããžãã¯ãå®è£ ããä»ã®Luaã¹ã¯ãªãããæããŸãã ãã®ããã±ãŒãžãæ¥ç¶ãããšããã®ãã¡ã€ã«ããã¡ãœããããã®ãã¡ã€ã«ããã®ããŒã¿ãå€æ°ãååŸã§ããŸãã ãã®äŸã§ã¯ãLuashã¡ã«ããºã ã®requireã¡ã«ããºã ã䜿çšããŠã
console
ãš
log
2ã€ã®ããã±ãŒãžãæ¥ç¶ããŸãã
localhostã§
console
ãå®è¡ããããŒã33013ã§ãã³ã°ãã
log
ããã±ãŒãžã䜿çšããŠã
log
æžã蟌ãããšãã§ããŸãã ããã§ã³ã³ãœãŒã«ãšã¯ã管çè ã³ã³ãœãŒã«ãŸãã¯ãªã¢ãŒã管çã³ã³ãœãŒã«ãæå³ããTarantoolã®ã¹ããŒã¿ã¹ãç£èŠã§ããŸãã ãããè¡ãã®ã¯é£ãããããŸãããã³ã³ãœãŒã«ãå®è¡ãããŠããå Žåã¯ãæšæºã®UnixããŒã«ãŸãã¯ãã®ä»ã®ããŒã«ïŒtelnetãrlwrapãªã©ïŒãé©ããŠããŸãã ããŒãã«æ¥ç¶ããŠãªãã¹ã³ããã«ã¯telnetãå¿ èŠã§ããã³ãã³ãã®äŸ¿å©ãªå ¥åãšã³ãã³ãã®å±¥æŽã®ä¿åã«ã¯rlwrapãå¿ èŠã§ãã
èªåã«åã£ãTarantoolã«ã¢ã¯ã»ã¹ããŠã
box.info
ãŸãã¯
box.stat
ããã®æ å ±ã
box.info
ã§ã
box.stat
ã
ç§ã䜿çšããéåžžã«é »ç¹ã«å¿ èŠãªããã±ãŒãžã¯httpã§ãã ããã¯ãŸã å¶éãããHTTPãµãŒããŒã§ãããå¿ èŠãªã¡ã«ããºã ã®å€ãã§æ©èœããŸãã ãã®å Žåãããã±ãŒãžãæ¥ç¶ãããµãŒããŒãäœæããåŠççšã®
route
ãåæããŠèµ·åããŸããã 次ã«ã
handler
é¢æ°ã§ãããã¹ãæ å ±ã®åœ¢åŒã§ãµãŒããŒã«å¿çãè¿ã
cookie
ãŠãŒã¶ãŒ
tarantool_id
ã
value = id
cookie
èšå®
cookie
ãŸãã ãŸããæå¹æéãèšå®ããŸãã é€å»æé;
cookie
ã¯ããã«ä¿åãããŸãã
http
ããã±ãŒãžã®åºæ¬çãªã¡ã«ããºã ã«ãããæå°éã®ããžãã¯ãå®è£ ã§ããŸãã éåžžã«å®å šãªãµãŒããŒããããã¯ã©ã€ã¢ã³ãããããŸãã ãã®ããã±ãŒãžã¯Cookieã§åäœããLuaããã³ãã¬ãŒãå ã®äžéšã®å€æ°ã®ããçš®ã®åã蟌ã¿å¯èœèšèªãšããŠãµããŒãããŸãã Luaã®HTMLå ã«å°ããªããã·ãŒãžã£ãäœæã§ããŸãã
#!/usr/bin/tarantool -- Tarantool init script local log = require('log') local console = require('console') local server = require('http.server') local HOST = 'localhost' local PORT = 8008 box.cfg { log_level = 5, slab_alloc_arena = 1, } console.listen('127.0.0.1:33013') if not box.space.users then s = box.schema.space.create('users') s:create_index('primary', {type = 'tree', parts = {1, 'NUM'}}) end
ãã®ã¹ã¯ãªããã®èŠç¹ã説æããããšããã®ã§ãæ¢ã«æ確ã«ãªã£ãŠããã¯ãã§ãã ä¿®æ£ããã«ã¯ãããäžåºŠæ©ãããšãã§ããŸãã ã³ã¡ã³ãä»ãã®å®è¡å¯èœãªTarantoolã¹ã¯ãªããããããŸãã 次ã«ã
require
ãä»ããŠããã±ãŒãžãæ¥ç¶ããŸãã
HOST
ãš
PORT
2ã€ã®å€æ°ããããŸãã 次ã«ãTarantoolãbox.cfgãä»ããŠæ§æããã
log_level
ïŒãã®ã³ã°ã¬ãã«ïŒãš
slab_alloc_arena
ïŒå²ãåœãŠçšã®ã¹ããŒã¹ïŒã®2ã€ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã
䜿çšãã管çã³ã³ãœãŒã«ãäœæããŠããŸãã ããã«ãå¿ èŠãªã¹ããŒã¹ããªãå Žåã¯ã
box.schema.space.create
ã䜿çšããŠ
users
ã¹ããŒã¹ãäœæãããã®ã€ã³ããã¯ã¹ãäœæããŸãã
function handler(self) local id = self:cookie('tarantool_id') local ip = self.peer.host local data = '' log.info('Users id = %s', id) if not id then data = 'Welcome to tarantool server!' box.space.users:auto_increment({ip}) id = box.space.users:len() return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' }) else local count = box.space.users:len() data = 'You id is ' .. id .. '. We have ' .. count .. ' users' return self:render({ text = data }) end end httpd = server.new(HOST, PORT) httpd:route({ path = '/' }, handler) httpd:start()
åŠçæ©èœã§ã¯ãããŒãžã«ã¢ã¯ã»ã¹ãããŠãŒã¶ãŒãä¿æãã
cookie
ãååŸããŸãã ç§ã¯åœŒã®IPãèŠãŠããã°ã«æžã蟌ã¿ãŸãã
id
tarantool_id
ã«ãªãå Žåããã®ãŠãŒã¶ãŒã®IPæ å ±ãèªåçã«ããŒã¿ããŒã¹ã«å ¥åãããã®
id
ã確èªããŠãŠã§ã«ã«ã æ å ±
data
ãè¿ãã
cookie
ã
id
èšå®ããŸãã ãã以å€ã®å Žåã¯ãããŒãã«å ã®ã¬ã³ãŒãã®æ°ãã«ãŠã³ããããŠãŒã¶ãŒã«äžæã®èšªåè ã®æ°ãè¿ãã ãã§ãã ãããŠæåŸã«ãé¢æ°ã説æãããšãã«ããµãŒããŒèªäœãèµ·åããŠãæ¢ã«ããã䜿çšããŠããŸãã
ããã¯ç°¡åãªäŸã§ãããã¢ãžã¥ãŒã«ãšLuaèšèªã®ã¢ã¯ã»ã¹ã®æ¡åŒµæ§ã®ãããã§ãè¿œå ãè¿œå ãè¿œå ãã§ãããã°ãããããšå®éã®ãããžã§ã¯ãã§äœ¿çšãããç¶æ ã«ãªããŸãã
Tarantoolã«ã¯ããŸããŸãªããã±ãŒãžããããŸãã JSONãæäœããããã®ããã±ãŒãžããã¡ã€ããŒããã±ãŒãžïŒä»¥äžã§ããå°ã詳ãã説æããŸãïŒãyamlãæå·ã©ã€ãã©ãªãã€ãžã§ã¹ãïŒåºæ¬çãªå¿ èŠãªæå·åã¡ã«ããºã ãå«ãŸããŠããŸãïŒããããŸãã ãã³ããããã³ã°ãœã±ããã®ããã±ãŒãžãããããããã¯ãŒã¯ã§èªåã§äœæ¥ããããã€ãã®ãããã³ã«ãå®è£ ã§ããŸãã MessagePackã«ã¯äœæ¥ãããããã¡ã€ã«ãæäœããããã®ã©ã€ãã©ãªfioïŒãã¡ã€ã«å ¥å/åºåïŒããããŸãã ãŸããTarantoolããã€ããªãããã³ã«ã§åäœããããšãå¯èœã«ããèå³æ·±ãnet.boxã¡ã«ããºã ããããŸã-ããšãã°ãå¥ã®Tarantoolã§ã éåžžã«è¿ éãã€äŸ¿å©ã§ãã Net.box.sqlã¯ãäžéšã®ãªã¬ãŒã·ã§ãã«SQLããŒã¿ããŒã¹ãæäœããããã«ãå®è£ ãããŠããŸãã
ãã¡ã€ããŒã¯ããããã©ã€ãã¹ã¬ããã§ãã°ãªãŒã³ã¹ã¬ããã¢ãã«ã«åŸã£ãŠæ©èœããŸãã ããããšæšæºãããŒã®äž»ãªéãã¯ãããããäœæãããTarantoolå ã§åäœããããšã§ãããããã£ãŠããããã¯ååã«è¿ éã«äœæãããåªããã¹ã€ããã³ã°ããã©ãŒãã³ã¹ãåããŠããŸãã äœããã®éåæã¢ãã«ãå®è£ ããŠããå Žåããã¡ã€ã³ããžãã¯ãšäžŠè¡ããŠäœãä»ã®ããšãããŠããããŒã¢ã³ãèµ·åããå¿ èŠãããå Žåã«åœ¹ç«ã¡ãŸãã
ãã¡ã€ããŒã䜿çšããåºæ¬çãªååïŒãã¡ã€ããŒãäœæããå¿ èŠããããŸãããã¡ã€ããŒãfiber.sleepã§ã¹ã¿ã³ãã€ã¢ãŒãã«ã§ããŸãããŸããfiber_objectã¯fiber.createã§ãããã€ã§ãã¹ãã£ã³ããŠäœæ¥ãçµäºã§ããŸãã
éåžžã«äŸ¿å©ãªfiber.timeã©ã€ãã©ãªãããã¯ãæéãã«ãŠã³ãããã€ãã³ãã«ãŒãããç®çã®å€ãåžžã«æšæž¬ã§ããŸãã
ãã¡ã€ããŒã©ã€ãã©ãªã䜿çšããŠãéåžžã«äººæ°ã®ããæéåãã®ã©ã€ãã©ãªãäœæãããŸãããããã¯ãäœããã®çç±ã§ããŒã¿ããŒã¹ããåé€ãå®è¡ã§ããŸãã éåžžã¯ä»åãã€ãŸã 1ãæãªã©ãä¿åãããŠãããã¹ãŠã®ãã®ãåé€ããŠã¯ãªãŒãã³ã°ã§ããŸãã
ããªãã¯ã¿ã©ã³ããŒã«ã«ã€ããŠé·ãé話ãããšãã§ããŸããç§ãã¡ããã¹ãŠãç¥ã£ãŠããããã§ã¯ãããŸããã éçºè èªèº«ã圌ã«ã€ããŠãã¹ãŠãç¥ã£ãŠãããã©ããã¯ããããŸããã tarantool.orgã®ããã¥ã¡ã³ãããã€ã§ãèªãããšãã§ããŸãããæè¿å€æŽãããããèªã¿ããããªããŸããã
Tarantoolã¯ãã»ãšãã©ã®Unixã©ã€ã¯ã·ã¹ãã ããµããŒãããç¬èªã®BuildbotãåããŠãããæ°ããããã±ãŒãžã®åºçŸãåžžã«ç£èŠããŠããŸã-Red Hat Enterprise Linuxã§äœæ¥ããŠããŸãã ãŸããTarantooléçºè ã¯ãåãDebianã§Tarantoolããã±ãŒãžãå ¬åŒã«ãµããŒãããŠããŸãã
ãããŠãç§ãæ°ã«å ¥ã£ãŠããéåžžã«éèŠãªç¹ïŒTarantoolã§ã¯ãéçºè ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãå¯èœã§ãã 質åããããŸããããSkypeã§éçºè ãèŠã€ããŸããã Tarantoolã®ããŒãéçºè ã§ããKostya Osipovã¯ããã®äŒè°ã®ãã¥ãŒã«é¢ããçãã¬ããŒããèªã¿ãŸããã éçºè ãç¹ã«åå¿è ã«ãšã£ãŠãã¢ããã€ã¹ãæ±ãããããè¡ãæ¹æ³ãçŽæ¥åŠã¶ããšãéåžžã«éèŠã§ãã ããªãã¯ããªãŒãã³ãœãŒã¹ã¢ããªã±ãŒã·ã§ã³ãéçºãã人ãã¡ãéåžžã«ç¬ç¹ã§ããã圌ããéåžžã«ç¬ç¹ãªã³ãã¥ããã£ãæã£ãŠããããšãèŠæããªããã°ãªããŸããã ããããããã®åçã¯ç§ãã§ãã以äžã®ããšãèšãããšãã§ããŸãïŒ
ãããåæã«ãã³ãã¥ããã£ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯éåžžã«èå³æ·±ãçµéšãšãªããèªåèªèº«ãæé·ããããããžã§ã¯ããå°ãè¯ãããããšãã§ããŸãã
æåŸã«ãã¬ããŒããèŠçŽããããšæããŸãã
åNoSQLãœãªã¥ãŒã·ã§ã³ã«ã¯ãç¬èªã®ã¢ããªã±ãŒã·ã§ã³åéããããŸãã ã©ã®ããŒã¹ãè¯ããæªãããã©ã¡ããçç£çã§ããããèšãã®ã¯éåžžã«é£ããå ŽåããããããŸãã 圌ãã¯æ¬åœã«ããŸããŸãªåé¡ã解決ããŸãã
éçºããŒã«ã¯éåžžã«éèŠã§ããæ£ããéžæãããããŒã«ã䜿çšãããšãè¿ éãã€ç°¡åã«éçºã§ããå€ãã®åé¡ãåé¿ã§ããŸãã ããããããéèŠãªã®ã¯ã¢ã€ãã¢ãç®æšã§ããããšãå¿ããªãã§ãã ããã ããã§ããåéçºè ã®èª²é¡ã¯ãåé¡ã解決ãã圌ã®ã¢ã€ãã¢ã®äžéšãå®çŸãããã®äžçãå°ãè¯ãããããšã§ãã
Tarantoolãå®å šã«åçŽã§ããã䜿çšããããšãã§ããããšããèŠãã§ããããšãé¡ã£ãŠããŸãã ãæž èŽããããšãããããŸããã
ãã®ã¬ããŒãã¯ãè² è·ã®é«ãã·ã¹ãã HighLoad ++ Juniorã®éçºè ã®ãã¬ãŒãã³ã°äŒè°ã§è¡ãããæé«ã®ãã¬ãŒã³ããŒã·ã§ã³ã®1ã€ã§ãã
ãŸãããããã®è³æã®äžéšã¯ãé«è² è·ã·ã¹ãã HighLoadã®éçºã«é¢ãããªã³ã©ã€ã³ãã¬ãŒãã³ã°ã³ãŒã¹ã§äœ¿çšãããŸãã¬ã€ãã¯ãç¹å¥ã«éžæãããæåãèšäºãè³æããããªã®ãã§ãŒã³ã§ãã ç§ãã¡ã®æç§æžã«ã¯ãã§ã«30以äžã®ãŠããŒã¯ãªè³æããããŸãã æ¥ç¶ããŠãã ããïŒ
ããŠãäž»ãªãã¥ãŒã¹ã¯ã HighLoad ++ Juniorãå«ã8ã€ã®äŒè°ãå«ãæ¥ç¥ãã Russian Internet Technologies ãã®æºåãéå§ããããšã§ãã