Peter Zaitsevã¯ãMySQLãšMongoDBã®éãã瀺ããŠããŸãã ããã¯ã Highload ++ 2016ã䜿çšããã¬ããŒãã®ãã©ã³ã¹ã¯ãªããã§ã ã
ãã®ãããªããç¥ãããŠããDB-Enginesã©ã³ãã³ã°ãèŠããšãé·å¹Žã«ããã£ãŠããªãŒãã³ãœãŒã¹ããŒã¿ããŒã¹ã®äººæ°ãé«ãŸã£ãŠãããåæ¥çã§ããããšãåŸã ã«äœäžããŠããããšãããããŸãã
ããã«èå³æ·±ãã®ã¯ãããŸããŸãªçš®é¡ã®ããŒã¿ããŒã¹ã®ãã®é¢ä¿ãèŠããšãå€ãã®çš®é¡ïŒåæ±ç¶ããŒã¿ããŒã¹ãæç³»åãããã¥ã¡ã³ãã¹ããŒãªãŒãªã©ïŒã§ãªãŒãã³ãœãŒã¹ããŒã¿ããŒã¹ãæã人æ°ãããããšãããããŸãã ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãªã©ã®å€ããã¯ãããžããŸãã¯å€å€ããŒã¿ããŒã¹ãªã©ã®ããã«å€ããã¯ãããžã®å Žåã®ã¿ãåçšã©ã€ã»ã³ã¹ãã¯ããã«äººæ°ããããŸãã
å€ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ããã®é·æã掻çšããããã«è€æ°ã®ããŒã¿ããŒã¹ã䜿çšããŠããããšãããããŸãã ããããçš®é¡ã®ãŠãŒã¶ãŒã±ãŒã¹ã«æé©åãããããŒã¿ããŒã¹ã¯ãããŸããã ããšããããPostgreSQLã§ãã£ãŠã[ã¹ããŒãžäžããã³ããŒã«ã§ã®ç¬ã声]ã
äžæ¹ã§ãããã¯è¯ãéžæã§ããä»æ¹ã§ã¯ããã©ã³ã¹ãåããŠãããã©ããã確èªããå¿ èŠããããŸããããŸããŸãªæè¡ãããã°ããã»ã©ãç¹ã«äŒç€Ÿãããã»ã©å€§ãããªãå Žåã¯ããããããµããŒãããã®ãé£ãããªããŸãã
å€ãã®å Žåã人ã ã¯ãã®ãããªäŒè°ã«åå ããFacebookãYandexãèããŠãããããŒïŒ é¢çœãããšãããŠãã人ã®æ°ã 20çš®é¡ã®ãã¯ãããžãŒããããããã«10çš®é¡ã®æè¡ãäœæããŸãããã ãããŠã圌ãã¯10人ã®ã¹ã¿ãŒãã¢ããã§åãã¢ãããŒãã䜿ãããšããŸããããã¡ããããŸããããŸããã ããã¯ãŸãã«ãµã€ãºãéèŠãªå Žåã§ãã
ã¢ãŒããã¯ãã£ã®ã¢ãããŒã
å€ãã®å Žåãã¡ã€ã³ã®éçšã¹ãã¬ãŒãžãšããã€ãã®è¿œå ãµãŒãã¹ã䜿çšãããŠããããšãããããŸãã ããšãã°ããã£ãã·ã¥ãŸãã¯å šææ€çŽ¢çšã
ããŸããŸãªããŒã¿ããŒã¹ã䜿çšããã¢ãŒããã¯ãã£ãžã®å¥ã®ã¢ãããŒãã¯ããã€ã¯ããµãŒãã¹ã§ããåãã€ã¯ããµãŒãã¹ã«ã¯ç¬èªã®ããŒã¿ããŒã¹ãããããã®ç¹å®ã®ãµãŒãã¹ã®ã¿ã¹ã¯ã«æé©åãããŠããŸãã äŸãšããŠãã¡ã€ã³ã¹ãã¬ãŒãžã¯ãMySQLãRedisãMemcacheïŒãã£ãã·ã³ã°ãElastic SearchããŸãã¯ãã€ãã£ãSphinxïŒã«ãããæ€çŽ¢ã«äœ¿çšã§ããŸãã ãŸããKafkaã®ãããªãã®-ããŒã¿ãåæã·ã¹ãã ã«è»¢éããŸããããã¯ãHadoopã®ãããªãã®ã§ããè¡ãããŠããŸããã
ã¡ã€ã³ã®éçšã¹ãã¬ãŒãžã«ã€ããŠè©±ããŠããå Žåããããã2ã€ã®éžæè¢ããããŸãã äžæ¹ã§ã¯ãSQLèšèªã䜿çšããŠãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãéžæã§ããŸãã äžæ¹ãéãªã¬ãŒã·ã§ãã«ãªãã®ã§ããã®å Žåã«å©çšå¯èœãªäºçš®ãèŠãŠãã ããã
NoSQLããŒã¿ã¢ãã«ã«ã€ããŠè©±ããšãå€ãã®ã¢ãã«ããããŸãã æãå žåçãªã®ã¯ãããŒå€ãããã¥ã¡ã³ãããŸãã¯ããŒã¿ããŒã¹ã®å¹ ã®åºãåã§ãã äŸïŒãããããMemcacheãMongoDBãCassandraã
ãã®å ŽåããªãMySQLãšMongoDBãæ¯èŒããã®ã§ããïŒ å®éãããã€ãã®çç±ããããŸãã ã©ã³ãã³ã°ããŒã¿ããŒã¹ãèŠããšããã®è©äŸ¡ã«ãããšãMySQLã¯æã人æ°ã®ãããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ãããMongoDBã¯æã人æ°ã®ããéãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ããããšãããããŸãã ãããã£ãŠãããããæ¯èŒããããšã¯åççã§ãã
ãŸããããã2ã€ã®ããŒã¿ããŒã¹ã䜿çšããçµéšãæããããŸãã Perconaã®ç§ãã¡ã¯åœŒããšå¯æ¥ã«é£æºããå€ãã®ã¯ã©ã€ã¢ã³ããšååãããã®éžæãæ¯æŽããŸãã å¥ã®çç±ïŒäž¡æ¹ã®ãã¯ãããžãŒã¯åœåãåçŽãªã¢ããªã±ãŒã·ã§ã³ã®éçºè ã察象ãšããŠããŸããã PostgreSQLãè€éããã人ã ã®ããã«ã
MongoDBã¯åœåãMySQLãŠãŒã¶ãŒã«éåžžã«çŠç¹ãåãããŠããŸããã ãã®ãããå€ãã®å Žåã人ã ã¯ãããã®2ã€ã®ãã¯ãããžãŒã®äœ¿çšçµéšãšéžæè¢ãæã£ãŠããŸãã
Perconaã§ã¯ããããã®æè¡ã®ãµããŒããšã³ã³ãµã«ãã£ã³ã°ã«åãçµãã§ãããšããäºå®ã«å ããŠãäž¡æ¹ã®æè¡çšã«äœæãããéåžžã«å€ãã®ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ããããŸãã ã¹ã©ã€ãã§èŠãããšãã§ããŸãã ããã«ã€ããŠã¯è©³ãã説æããŸããã
å人çã«ç§ãåŸãããšïŒç§ã¯MySQLãMongoDBãããã¯ããã«æ±ããŸãã ãã©ã³ã¹ã®ãšããæŠèŠãæäŸããããšããŠãããšããäºå®ã«ããããããããŽãããªã®æ¹ãããããã£ãŠããã®ã§ãMySQLã®çŽ 質ããããããããŸããã
MySQLãšMongoDBã®éžæ
ç§ã®æèŠã§ã¯èæ ®ã«å€ããããŸããŸãªåé¡ã®ãªã¹ãã以äžã«ç€ºããŸãã ããã§ãããããã«ã€ããŠããã«è©³ããæ€èšããŸãã
ç§ã®æèŠã§æãéèŠãªããšã¯ãããŒã ã®çµéšãšå¥œã¿ãèæ ®ã«å ¥ããããšã§ãã ã©ã¡ãã®ãœãªã¥ãŒã·ã§ã³ãå€ãã®ã¿ã¹ã¯ã«é©ããŠããŸãã äž¡æ¹ãè¡ãããšãã§ãããããå°ãè€éã«ãªããå°ãç°¡åã«ãªããŸãã ããããSQLããŒã¿ããŒã¹ãé·ãé䜿çšããŠããããªã¬ãŒã·ã§ãã«ä»£æ°ãªã©ãç解ããŠããããŒã ãããå Žåãå®å šãªãã©ã³ã¶ã¯ã·ã§ã³ããååšããªãMongoDBãªã©ã®éãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã䜿çšããããã«ãã©ãã°ããŠåŒ·å¶ããããšã¯å°é£ã§ãã
éããŸãåæ§ã§ããMongoDBã䜿çšããããç¥ã£ãŠããã³ãã³ããããå ŽåãSQLèšèªã¯è€éã«ãªãå¯èœæ§ããããŸãã ãŸããå ã®éçºãšãããªãã¡ã³ããã³ã¹ãšç®¡çã®äž¡æ¹ãæ€èšããããšã¯çã«ããªã£ãŠããŸããããã¯ãã¹ãŠãã¢ããªã±ãŒã·ã§ã³ãµã€ã¯ã«ã§æçµçã«éèŠã§ããããã§ãã
ãããã®ã·ã¹ãã ã®å©ç¹ã¯äœã§ããïŒ
MySQLã«ã€ããŠè©±ããšãããã¯å®èšŒæžã¿ã®ãã¯ãããžãŒã§ãã MySQLã¯15幎以äžã«ããã£ãŠå€§äŒæ¥ã§äœ¿çšãããŠããããšãç解ãããŠããŸãã SQLæšæºã䜿çšããŠãããããå¿ èŠã«å¿ããŠãä»ã®SQLããŒã¿ããŒã¹ãžã®ããªãåçŽãªç§»è¡ã®å¯èœæ§ããããŸãã ååŒã®å¯èœæ§ããããŸãã åæãå«ãè€éãªã¯ãšãªããµããŒããããŠããŸãã ãªã©ãªã©ã
MongoDBã®èŠ³ç¹ããèŠããšãããã§ã®å©ç¹ã¯ãããã¥ã¡ã³ãçšã®æè»ãªJSON圢åŒãããããšã§ãã äžéšã®ã¿ã¹ã¯ãšäžéšã®éçºè ã«ãšã£ãŠã¯ãSQLããŒã¿ããŒã¹ã«åãè¿œå ããŠèŠåŽããããã䟿å©ã§ãã SQLãåŠã¶å¿ èŠã¯ãããŸãã-äžéšã®äººã«ãšã£ãŠã¯é£ããã§ãã åçŽãªã¯ãšãªãåé¡ãåŒãèµ·ããå¯èœæ§ã¯äœããªããŸãã ããã©ãŒãã³ã¹ã®åé¡ãèŠããšã倧éšåã®ããŒãã«ãš
GROUP BY
ã§
JOIN
ããŠè€éãªã¯ãšãªãäœæãããšãã«äž»ã«çºçããŸãã ã·ã¹ãã ã«ãã®ãããªæ©èœããªãå Žåãè€éãªã¯ãšãªãäœæããããšã¯ããå°é£ã§ãã
MongoDBã«ã¯ãã·ã£ãŒãã£ã³ã°ãã¯ãããžãŒã䜿çšããããªãåçŽãªã¹ã±ãŒã©ããªãã£ãçµã¿èŸŒãŸããŠããŸãã è€éãªã¯ãšãªãçºçããå Žåãéåžžã¯ã¢ããªã±ãŒã·ã§ã³åŽã§è§£æ±ºããŸãã ã€ãŸãã
JOIN
ãªã©ã®æäœãå¿ èŠãªå Žåã¯ãããŒã¿ãéžæãããªã³ã¯ããããŒã¿ãéžæããŠãã¢ããªã±ãŒã·ã§ã³åŽã§åŠçããããšãã§ããŸãã SQLèšèªãç¥ã£ãŠãã人ã«ãšã£ãŠã¯ããªããšãªãæ²æšã§äžèªç¶ã«èŠããŸãã ãããå®éã«ã¯ãå€ãã®äººã«ãšã£ãŠãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®éçºã¯
JOIN
ç解ãããããã¯ããã«ç°¡åã§ãã
éçºã¢ãããŒããšã¢ããªã±ãŒã·ã§ã³ã©ã€ããµã€ã¯ã«
MongoDBã䜿çšããã¢ããªã±ãŒã·ã§ã³ãšãããããäœã«çŠç¹ãåœãŠãŠãããã«ã€ããŠè©±ãå Žåãããã¯éåžžã«é«éãªéçºã§ãã ãã¹ãŠãåžžã«å€æŽã§ãããããããã¥ã¡ã³ãã®å³å¯ãªåœ¢åŒãåžžã«æ°ã«ããå¿ èŠã¯ãããŸããã
2çªç®ã®ãã€ã³ãã¯ãããŒã¿ã¹ããŒãã§ãã ããã§ãããŒã¿ã«ã¯åžžã«ã¹ããŒã ãããããšãç解ããå¿ èŠããããŸããå¯äžã®åé¡ã¯ãããŒã¿ã®å®è£ å Žæã§ãã äœããã®æ¹æ³ã§ãã®ããŒã¿ã䜿çšãããããã¢ããªã±ãŒã·ã§ã³ã«ããŒã¿ã¹ããŒã ãå®è£ ã§ããŸãã ãŸãã¯ããã®ã¹ããŒã ã¯ããŒã¿ããŒã¹ã¬ãã«ã§å®è£ ãããŸãã
éåžžã«å€ãã®å Žåãäœããã®ã¢ããªã±ãŒã·ã§ã³ãããå Žåããã®ã¢ããªã±ãŒã·ã§ã³ã®ã¿ãããŒã¿ããŒã¹å ã®ããŒã¿ãåŠçããŸãã ããšãã°ããã®ã¢ããªã±ãŒã·ã§ã³ãããã®ããŒã¿ããŒã¹ã«ããŒã¿ãä¿åããŸãã ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®åè·¯ã¯ããŸãæ©èœããŸãã åãããŒã¿ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããŠããå Žåãããã¯éåžžã«äžäŸ¿ã§å¶åŸ¡ãå°é£ã§ãã
ãŸããããã¯ã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœã®åé¡ãæèµ·ããŸãã MongoDBã䜿çšãããšãã©ã€ããµã€ã¯ã«ãéåžžã«å¶éãããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã ã€ãŸããé·çãããªãã¢ããªã±ãŒã·ã§ã³ãããšãã°æ ç»ããªãªã³ãã¢ãŒããèµ·åãããµã€ããäœæããå Žåã§ãã ç§ãã¡ã¯ãã®æ°ã¶æåŸã«çããŸãããããã®ã¢ããªã±ãŒã·ã§ã³ã¯å®éã«ã¯äœ¿çšãããŠããŸããã ã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãé·ãå Žåã¯ãå¥ã®è³ªåããããŸãã
ã¢ããªã±ãŒã·ã§ã³éçºãµã€ã¯ã«ã®èŠ³ç¹ãããMySQLãšMongoDBã®é·æãšçæã®ååžã«ã€ããŠè©±ããšã次ã®ããã«è¡šãããšãã§ããŸãã
ããŒã¿ã¢ãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãšããŒã ã®çµéšã«å€§ããäŸåããŸãã ããŒã¿ããŒã¹ã«å¯Ÿãããªã¬ãŒã·ã§ãã«ãŸãã¯éãªã¬ãŒã·ã§ãã«ã®ã¢ãããŒããåžžã«ããåªããŠãããšèšãã®ã¯å¥åŠã§ãã
ããããäºãã«æ¯èŒãããšãæã ãæã£ãŠããããšã¯æããã§ãã MySQLã§ã¯ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã䜿çšãããšãããŒãã«éã®é¢ä¿ãç°¡åã«ãããã§ããŸãã ããŒã¿ãæ£èŠåããããšã§ãããŒã¿ã®å€æŽã1ãæã§ååçã«åŒ·å¶çã«çºçãããããšãã§ããŸãã ããŒã¿ãéæ£èŠåãããŠããå Žåãããã€ãã®å€æŽãå ããŠå€æ°ã®ããã¥ã¡ã³ããå®è¡ããã³å€æŽããå¿ èŠã¯ãããŸããã
ããã¯è¯ãã§ããæªãã§ããïŒ çµæã¯åžžã«è¡šã§ãã äžæ¹ã§ãããã¯åçŽã§ãããäžæ¹ã§ãäžéšã®ããŒã¿æ§é ã¯åžžã«ããŒãã«ã«ããŸãåãŸããªããããããã§äœæ¥ããã®ã¯äžäŸ¿ãããããŸããã
ããã¯ãã¹ãŠçè«äžã§ãã MySQLã®å®éã®äœ¿çšã«ã€ããŠèšãã°ãããŒã¿ãéæ£èŠåããããšããããããŸããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã¯ãJSONãXMLããŸãã¯å¥ã®æ§é ãã¢ããªã±ãŒã·ã§ã³ã®åã«æ ŒçŽããã¢ããªã±ãŒã·ã§ã³ããããŸãã
MongoDBã«ã¯ããã¥ã¡ã³ãããŒã¹ã®ããŒã¿æ§é ããããŸãã å€ãã®Webã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã¯éåžžã«ç°¡åã«è¡šç€ºã§ããŸãã ãªããªããã¢ããªã±ãŒã·ã§ã³ã®é¢é£ä»ããããé åã®ãããªæ§é ãä¿åãããšãéçºè ãJSONããã¥ã¡ã³ãã«ã·ãªã¢ã«åããã®ã¯éåžžã«ç°¡åã§ç解ããããããã§ãã ããŸããŸãªã¿ãã¬ããäžã®ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ãããæ¡åŒµããããšã¯ãããéèŠãªäœæ¥ã§ãã
å®å šã«ç°ãªãæ§é ãæã€ããšãã§ããããã¥ã¡ã³ãã®ãªã¹ããšããŠã®çµæ-ããæè»ãªãœãªã¥ãŒã·ã§ã³ã
äŸã é»è©±ããé£çµ¡å ãªã¹ããä¿åããŸãã 1ã€ã®ãªã¬ãŒã·ã§ãã«ã¿ãã¬ããã«é©åã«é©åããããŒã¿ãããããšã¯æããã§ããå§ãåãªã©ã ããããé»è©±ãã¡ãŒã«ã¢ãã¬ã¹ãèŠããšã1人ã§è€æ°ã®äººãããå ŽåããããŸãã ãããé©åãªãªã¬ãŒã·ã§ãã«åœ¢åŒã§ä¿åãããŠããå Žåã¯ãå¥ã ã®ããŒãã«ã«ä¿åããã®ãè¯ãã§ããã
JOIN
ãåéããã ãã§ãéå±€ããã¥ã¡ã³ãã眮ãããŠãã1ã€ã®ã³ã¬ã¯ã·ã§ã³ã«ãã¹ãŠãä¿åãããããäžäŸ¿ã§ãã
ããã¯ãã¹ãŠå³å¯ãªãªã¬ãŒã·ã§ãã«çè«ã«åºã¥ããŠãããšèšããŸã-äžéšã®ããŒã¿ããŒã¹ã¯é åããµããŒãããŠããŸãã MySQLã¯JSON圢åŒããµããŒãããŠããŸããJSON圢åŒã§ã¯ãè€æ°ã®ã¡ãŒã«ã¢ãã¬ã¹ãªã©ãè©°ããããšãã§ããŸãã ãŸãã¯ãé·å¹Žã«ããã£ãŠäººã ã¯ããããã³ã§ã·ãªã¢ã«åããŠããŸãããè€æ°ã®é»åã¡ãŒã«ã¢ãã¬ã¹ãä¿åããããããã³ã³ãã§åºåã£ãŠæžã蟌ãå¿ èŠããããŸããã¢ããªã±ãŒã·ã§ã³ã¯ãããç解ããŸãã ããããã©ããããããããã¯ããŸãã³ãŒã·ã£ã§ã¯ãããŸããã
èŠçŽ
èå³æ·±ãããšã«ãMySQLãšMongoDBã®é-äžè¬ã«ããªã¬ãŒã·ã§ãã«DBMSãšéãªã¬ãŒã·ã§ãã«DBMSã®é-äœããåãã§ãäœããç°ãªããŸãã ããšãã°ãã©ã¡ãã®å ŽåãããŒã¿ããŒã¹ã«ã€ããŠè©±ããŸããããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®ããŒãã«ãšåŒã°ãããã®ã¯ãéãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®ã³ã¬ã¯ã·ã§ã³ãšåŒã°ããããšããããããŸãã MySQLã®å Žåã¯åãMongoDBã®å Žåã¯ãã£ãŒã«ãã§ãã ãªã©ãªã©ã
JOIN
ã䜿çšãããšãã芳ç¹ããèŠããšãMongoDBã«ã¯ãã®ãããªæŠå¿µã¯ãããŸãããããã¯äžè¬ã«é¢ä¿æ§é ããã®æŠå¿µã§ãã ããã§ãéæ£èŠåã®æŠå¿µã«è¿ãåã蟌ã¿ããã¥ã¡ã³ããäœæããããåã«ãã£ãŒã«ãã«ããã¥ã¡ã³ãèå¥åãä¿åããŠãªã³ã¯ãšåŒã³ããã³ã§å¿ èŠãªããŒã¿ãéžæããŸãã
ã¢ã¯ã»ã¹ã«é¢ããŠïŒãªã¬ãŒã·ã§ãã«ããŒã¿ã«SQLèšèªã䜿çšããå ŽåãMongoDBããã³ä»ã®å€ãã®NoSQLããŒã¿ããŒã¹ã¯CRUDãªã©ã®æšæºã䜿çšããŸãã ãã®èŠæ Œã§ã¯ãããã¥ã¡ã³ããäœæãèªã¿åããåé€ãæŽæ°ããããã®æäœããããšè¿°ã¹ãŠããŸãã
ããã€ãã®äŸã
MySQLããã³MongoDBã§ããã¥ã¡ã³ããæäœããããã®æãäžè¬çãªã¿ã¹ã¯ã¯ã次ã®ããã«ãªããŸãã
æ¿å ¥ã®äŸã次ã«ç€ºããŸãã
æŽæ°äŸã
ã¢ã³ã€ã³ã¹ããŒã«ã®äŸã
JavaScriptèšèªã«ç²ŸéããŠããéçºè ã§ããã°ãCRUDïŒMongoDBïŒãæäŸããæ§æã¯SQLæ§æãããèªç¶ã§ãã
ç§ã®æèŠã§ã¯ãæãåçŽãªæäœãã€ãŸãæ€çŽ¢ãæ¿å ¥ãããå Žåããããã¯ãã¹ãŠéåžžã«ããŸãæ©èœããŸãã ç§ã®æèŠã§ã¯ãããèå³æ·±ããã§ããæäœã«é¢ããŠã¯ãSQLèšèªã®æ¹ãã¯ããã«èªã¿ããããªã£ãŠããŸãã
åçŽãªã>ãèšå·ã®ä»£ããã«
>
ã ç§ã®æèŠã§ã¯ãããŸãèªããŸããã
ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšãããŒãã«ãã³ã¬ã¯ã·ã§ã³ã®è¡æ°ãã«ãŠã³ããããªã©ã®æäœãç°¡åã«å®è¡ã§ããŸãã
ãã ããMongoDBã§
GROUP BY
ãªã©ã®ããè€éãªããšãè¡ãå ŽåãAggregation Frameworkã䜿çšããå¿ èŠããããŸãã ããã¯ããã£ã«ã¿ãªã³ã°ã®æ¹æ³ãã°ã«ãŒãåã®æ¹æ³ãªã©ã瀺ããããå°ãè€éãªã€ã³ã¿ãŒãã§ãŒã¹ã§ãã Aggregation Frameworkã¯ãã§ã«
JOIN
æäœã®ãããªãã®ããµããŒãããŠããŸãã
次ã®ãã€ã³ãã¯ããã©ã³ã¶ã¯ã·ã§ã³ãšäžè²«æ§ïŒACIDïŒã§ãã MongoDBã®ããã¥ã¡ã³ããèªããšããACIDãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããŠããŸãããå¶éããããŸããããšè¡šç€ºãããŸãã ç§ã®æèŠã§ã¯ããACIDã¯ãµããŒãããŠããŸããããä»ã®æå°éã®éãã©ã³ã¶ã¯ã·ã§ã³ä¿èšŒããµããŒãããŠããŸããããšèšã䟡å€ããããŸãã
ãããã®éãã¯äœã§ããïŒ
MySQLãšããã°ãä»»æã®ãµã€ãºã®ACIDãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããŸãã ãããã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¢ãããã¯æ§ããã«ãããŒãžã§ã³ç®¡çããã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ã¬ãã«ãéžæã§ããŸãããã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ã¬ãã«ã¯ã
READ UNCOMMITED
å§ãŸã
SERIALIZABLE
ã§çµããããšãã§ããŸãã ãã¹ãããã³ã¬ããªã±ãŒã·ã§ã³ã¬ãã«ã§ãããŒã¿ã®ä¿åæ¹æ³ãæ§æã§ããŸãã
InnoDBã䜿çšããŠããã°ãã¡ã€ã«ã®æäœæ¹æ³ãæ§æã§ããŸãããã©ã³ã¶ã¯ã·ã§ã³ãã³ããããããšãã«ãã£ã¹ã¯ã«ä¿åããããå®æçã«å®è¡ããŸãã ããŒã¿ã®ã³ããŒãã¹ã¬ãŒãã®1ã€ã§åä¿¡ãããå Žåã«ã®ã¿ããŒã¿ãä¿åãããŠãããšèŠãªãããå Žåã¯ãããšãã°ååæã¬ããªã±ãŒã·ã§ã³ãæå¹ã«ããŠã¬ããªã±ãŒã·ã§ã³ãæ§æã§ããŸãã
MongoDBã¯ãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããŠããŸããããããã¥ã¡ã³ãã®ã¢ãããã¯æäœããµããŒãããŠããŸãã ããã¯ã1ã€ã®ããã¥ã¡ã³ãã®èŠ³ç¹ããã¯ãæäœãã¢ãããã¯ã§ããããšãæå³ããŸãã æäœã«ãã£ãŠè€æ°ã®ããã¥ã¡ã³ããå€æŽããããã®æäœäžã«äœããã®äžå ·åãå éšã§çºçããå Žåããããã®ããã¥ã¡ã³ãã®äžéšã¯å€æŽã§ããäžéšã¯å€æŽã§ããŸããã
äžè²«æ§ã¯ããã¥ã¡ã³ãã¬ãã«ã§ãå®è¡ãããŸãã ã¯ã©ã¹ã¿ãŒã§ã¯ãæè»ãªäžè²«æ§ãéžæã§ããŸãã å¿ èŠãªä¿èšŒã瀺ãããšãã§ããŸã-ããŒã¿ã1ã€ã®ããŒãã«ã®ã¿æžã蟌ãŸããããšããŸãã¯ã¯ã©ã¹ã¿ãŒã®ãã¹ãŠã®ããŒãã«è€è£œãããããšãä¿èšŒããŸãã äžè²«æ§ã®èªã¿åãã¯ãããã¥ã¡ã³ãã¬ãã«ã§ãè¡ãããŸãã
ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ããåé¢ããŠæŽæ°ãå®è¡ã§ããåé¢æŽæ°ãªãã·ã§ã³ããããŸãããéåžžã«éå¹ççã§ã-ããŒã¿ããŒã¹ãæä»ã¢ã¯ã»ã¹ã¢ãŒãã«åãæ¿ãããããã»ãšãã©äœ¿çšãããŸããã ç§ã®æèŠã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãšäžè²«æ§ã«ã€ããŠè©±ããšãMongoDBã¯ååã«è²§åŒ±ã§ãã
æ§èœ
ããŸããŸãªããŒã¿ããŒã¹ã¹ããŒããšã¢ããªã±ãŒã·ã§ã³èšèšãäœæããããšãå€ããããããã©ãŒãã³ã¹ãçŽæ¥æ¯èŒããããšã¯éåžžã«å°é£ã§ãã ããããäžè¬çã«ãMongoDBã¯å ã ãã·ã£ãŒãã£ã³ã°ãä»ããŠå€ãã®ããŒãã«ããŸãæ¡åŒµã§ããããã«äœãããŠãããããå¹çã«ã€ããŠã¯ããŸã泚æãæãããŸããã§ããã
ãããã¯ãMark Callaghanãè¡ã£ããã³ãããŒã¯ã®çµæã§ãã ããã§ãããã»ããµã®äœ¿çšçã«é¢ããŠãMySQL I / OïŒInnoDBãšMyRocksã®äž¡æ¹ïŒãFacebookã®Linkbenchãã³ãããŒã¯æäœã§äœ¿çšããCPUãšãã£ã¹ã¯I / Oãå€§å¹ ã«å°ãªãããšãããããŸãã
ã¹ã±ãŒã©ããªãã£ã
ãã®ã³ã³ããã¹ãã§ã®ã¹ã±ãŒã©ããªãã£ãšã¯äœã§ããïŒ å°èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãæ°çŸäžãå Žåã«ãã£ãŠã¯æ°ååã®ãŠãŒã¶ãŒã«ç°¡åã«æ¡åŒµã§ããŸãã
ã¹ã±ãŒã©ããªãã£ã¯ç°ãªããŸãã åäžã®ãã·ã³ã®ãã¬ãŒã ã¯ãŒã¯å ã§ã¯ãäžèŠæš¡ã®ã¢ããªã±ãŒã·ã§ã³ããµããŒããããå Žåã¯å¹³åçã§ãããã¢ããªã±ãŒã·ã§ã³ããã§ã«éåžžã«å€§ããå Žåã¯ãæã匷åãªãã·ã³ã®1ã€ã§ã察å¿ã§ããªãããšãæãããªå Žåã¯ã¯ã©ã¹ã¿ãŒäžã®ã¹ã±ãŒã©ããªãã£ã§ãã
ãŸããããŒã¿ã®èªã¿åããæžã蟌ã¿ããŸãã¯ããªã¥ãŒã ãã¹ã±ãŒãªã³ã°ãããã©ããã«ã€ããŠè©±ãããšãçã«ããªã£ãŠããŸãã ç°ãªãã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããã®åªå é äœã¯ç°ãªãå ŽåããããŸãããäžè¬ã«ãã¢ããªã±ãŒã·ã§ã³ãéåžžã«å€§ããå Žåããããã¯éåžžããããã¹ãŠã®ããšãåŠçããå¿ èŠããããŸãã
MySQLã§ã¯ãæ°ããããŒãžã§ã³ã¯LTPããŒãã®åäžããŒãå ã§éåžžã«åªããã¹ã±ãŒã©ããªãã£ãåããŠããŸãã å°ããªãã©ã³ã¶ã¯ã·ã§ã³ãããå Žåã64åã®ããã»ããµãããããŒããŠã§ã¢ãããã€ããããéåžžã«ããŸãã¹ã±ãŒãªã³ã°ããŸãã MySQLã¯ã¯ãšãªããšã«1ã€ã®ã¹ã¬ãããã䜿çšã§ããªããããåæãè€éãªã¯ãšãªã¯é©åã«æ¡åŒµã§ããŸããããããã¯æªãããšã§ãã
åŸæ¥ãMySQLã§ã®èªã¿åãã¯ãè€è£œãæžã蟌ã¿ãã·ã£ãŒãã£ã³ã°ã«ããããŒã¿ãµã€ãºã«åãããŠèª¿æŽãããŸãã ãã¹ãŠã®å€§äŒæ¥ïŒFacebookãTwitterïŒãèŠããšããããã¯ãã¹ãŠã·ã£ãŒãã£ã³ã°ã䜿çšããŠããŸãã åŸæ¥ãMySQLã®ã·ã£ãŒãã£ã³ã°ã¯æåã§äœ¿çšãããŠããŸããã ããã«ã¯ããã€ãã®ãã¬ãŒã ã¯ãŒã¯ããããŸãã ããšãã°ãVitessã¯GoogleãYouTubeãµãŒãã¹ã®ã¹ã±ãŒãªã³ã°ã«äœ¿çšãããã¬ãŒã ã¯ãŒã¯ã§ããããªãŒãã³ãœãŒã¹ã§ãªãªãŒã¹ããŸããã ãã®åã«ãJetpantsãã¬ãŒã ã¯ãŒã¯ããããŸããã MySQLã¯ã·ã£ãŒãã£ã³ã°ã®æšæºãœãªã¥ãŒã·ã§ã³ãæäŸããŠããŸãããã·ã£ãŒãã£ã³ã°ã«åãæ¿ããã«ã¯ãéçºè ã®æ³šæãå¿ èŠã«ãªãããšããããããŸãã
MongoDBã§ã¯ãåœåã¯å€ãã®ããŒãã®ã¹ã±ãŒã©ããªãã£ã«éç¹ã眮ãããŠããŸããã å°èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã®å Žåã§ããæåããã·ã£ãŒãã£ã³ã°ã䜿çšããããšããå§ãããŸãã ãã¶ããã»ãã®2ã3ã®ã¬ããªã«ã»ããã ãã§ãã¢ããªã±ãŒã·ã§ã³ãšãšãã«æé·ããŸãã
MongoDBã®ã·ã£ãŒãã£ã³ã°ã«ã¯ããã€ãã®å¶éããããŸãããã¹ãŠã®ãªãã¬ãŒã¿ãŒãããã䜿çšããããã§ã¯ãããŸãããããšãã°ãäžè²«æ§ã確ä¿ããããã®ç¬ç«ãããªãã·ã§ã³ããããŸãã ã·ã£ãŒãã£ã³ã°ã䜿çšããå Žåã¯æ©èœããŸããã ãããåæã«ãå€ãã®åºæ¬çãªæäœã¯ã·ã£ãŒãã£ã³ã°ã§ããŸãæ©èœããããã人ã ã¯ã¢ããªã±ãŒã·ã§ã³ãããè¯ãã¹ã±ãŒãªã³ã°ããããšãã§ããŸãã ç§ã®æèŠã§ã¯ãMongoDBã§ã®äžè¬çãªã·ã£ãŒãã£ã³ã°ãšã¬ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã«ãšã£ãŠäœ¿ããããMySQLãããã¯ããã«åªããŠããŸãã
éå¶
管çã¯ãéçºè ãèããŠããªããã¹ãŠã®ãã®ã§ãã å°ãªããšãããããã 管çãšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã¯ã¢ãããããŒãžã§ã³ã®æŽæ°ãç£èŠãé害ããã®å埩ãªã©ãè¡ãå¿ èŠããããšããããšã§ãã
MySQLã«ã¯ååãªæè»æ§ããããããŸããŸãªã¢ãããŒãããããŸãã ãã¹ãŠã®åªãããªãŒãã³ãœãŒã¹å®è£ ããããŸããããã®ãªãã·ã§ã³ã®ã»ããã¯è€éããåŒãèµ·ãããŸãã ç§ã¯ãMySQLãç¿ãå§ããã°ããã®ãŠãŒã¶ãŒãšé »ç¹ã«ã³ãã¥ãã±ãŒã·ã§ã³ãåããŸãã 圌ãã¯èšãïŒãã¯ãªã¹ãã¹ããªãŒãã¹ãã£ãã¯ãããã€ã®ãªãã·ã§ã³ããããŸããïŒ ããã¯åãªãã¬ããªã±ãŒã·ã§ã³ã§ã-ã¹ããŒãã¡ã³ãã¬ããªã±ãŒã·ã§ã³ãããŒã¬ããªã±ãŒã·ã§ã³ããŸãã¯ããã¯ã¹ã®ã©ãã䜿çšããå¿ èŠããããŸããïŒ ãŸããgtidãšæšæºã®ã¬ããªã±ãŒã·ã§ã³ããããŸãã ãä»äºããšèšããªãã®ã¯ãªãã§ããïŒã
MongoDBã¯ã1ã€ã®æšæºçãªæ¹æ³ã§æ©èœãããšããäºå®ã«ãŸããŸãçŠç¹ãåœãŠãŠããŸã-管çã®æå°åããããŸãã ããããããã¯æè»æ§ã®æ倱ã§èµ·ããããšã¯æããã§ãã MongoDBã®ãªãŒãã³ãœãŒã¹ãœãªã¥ãŒã·ã§ã³ã®ã³ãã¥ããã£ã¯ã¯ããã«å°ãããªã£ãŠããŸãã æšå¥šã®èŠ³ç¹ããèŠãMongoDBã®å€ãã®èŠçŽ ã¯ãMongoDBã®åçšéçºã§ââããOps Managerãšéåžžã«å³å¯ã«çµã³ã€ããŠããŸãã
ç¥è©±
MongoDBãšMySQLã®äž¡æ¹ã«ã¯ãéå»ã«ä¿®æ£ãããç¥è©±ããããŸãããç¹ã«äœããããŸããããªãå Žåã人ã ã¯è¯ãèšæ¶ãæã£ãŠããŸãã InnoDBãšã®ãã©ã³ã¶ã¯ã·ã§ã³ãç»å ŽããåŸãMySQLã§èŠããŠãããšã人ã ã¯ç§ã«10æ³ã«ã€ããŠèšã£ãïŒããããMySQLã«ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãããŸãããïŒã
MongoDBã«ã¯ãMMAPã¹ãã¬ãŒãžãšã³ãžã³ã«é¢ããããŸããŸãªããã©ãŒãã³ã¹ã®åé¡ããããŸããã巚倧ãªããã¯ããã£ã¹ã¯ã¹ããŒã¹ã®éå¹ççãªäœ¿çšã§ãã çŸåšãæšæºã®WiredTigerãšã³ãžã³ã«ã¯ãããã®åé¡ã®å€ãããããŸããã ä»ã«ãåé¡ã¯ãããŸããããããã¯ãããŸããã
ãåè·¯ã®å¶åŸ¡ã¯ãããŸããããšããå¥ã®ç¥è©±ããããŸãã MongoDBã®æ°ããããŒãžã§ã³ã§ã¯ãããŒã¿ãæ€èšŒãããã³ã¬ã¯ã·ã§ã³ããšã«JSONæ§é ãå®çŸ©ã§ããŸãã æ¿å ¥ããããšããŠããããŒã¿ã¯ãã©ã®ãã©ãŒãããã«ã察å¿ããŠããªããããç Žæ£ããããšãã§ããŸãã
ã
JOIN
ã®é¡äŒŒç©ã¯ãããŸããã-åãããšã MongoDBã§ã¯ããããç»å ŽããŸããããããã€ãã®å¶éããããŸãã 1ã€ã®ã·ã£ãŒãã®ã¬ãã«ã§ã®ã¿ãéçŽãã¬ãŒã ã¯ãŒã¯ã䜿çšããå Žåã«ã®ã¿ãæšæºã¯ãšãªã§ã¯äœ¿çšããŸããã
MySQLã«ã¯ã©ã®ãããªç¥è©±ããããŸããïŒ ããã§ã¯ãMySQLã§ã®NoMySQLãœãªã¥ãŒã·ã§ã³ã®ãµããŒãã«ã€ããŠè©³ãã説æããŸããããã«ã€ããŠã¯ææ¥ã話ããŸãã MySQLã¯ãCRUDã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠäœ¿çšã§ããããã«ãªããŸãããCRUDã€ã³ã¿ãŒãã§ã€ã¹ã¯ãMongoDBãšã»ãŒåãããã«NoSQLã¢ãŒãã§äœ¿çšãããŸãã
MySQLãœãªã¥ãŒã·ã§ã³ã䜿çšãããå žåçãªäŸã¯ãeã³ããŒã¹ãµã€ãã§ãã ãéã«ã€ããŠè³ªåãããå Žåãå€ãã®å Žåãå®å šãªãã©ã³ã¶ã¯ã·ã§ã³ãšäžè²«æ§ãå¿ èŠã§ãã ãã®ãããªããšã«ã€ããŠã¯ã解決ããããªã¬ãŒã·ã§ãã«æ§é ãé©åã§ããããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®åååŒã¯äœå幎ãè¡ãããŠããŸããã ãããã£ãŠãããŒã¿æ§é ã«å¯ŸããŠæ¢è£œã®ã¢ãããŒãã®ããããã䜿çšããŠäœ¿çšã§ããŸãã
éåžžãeã³ããŒã¹ã®èŠ³ç¹ããèŠããšãä¿æããããŒã¿ã®éã¯ããã»ã©å€ããªããããããªã倧ããªåºèã§ããã·ã£ãŒãã£ã³ã°ããããšãªãé·æéåäœã§ããŸãã åœç€Ÿã®ã¢ããªã±ãŒã·ã§ã³ã¯ãé·å¹Žã«ããã£ãŠåžžã«éçºããã³æ¹åãããŠããŸãã ãããŠããã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãåãããŒã¿ãæ±ãå€ãã®ã³ã³ããŒãã³ãããããŸãã誰ããäŸ¡æ Œãå€æŽããå Žæãèšç®ããä»ã®èª°ããäœããããŸãã
MongoDBã¯ã倧èŠæš¡ãªãªã³ã©ã€ã³ã²ãŒã ã®ããã¯ãšã³ããšããŠãã䜿çšãããŸãã Electronic Artsã¯ãéåžžã«å€ãã®ã²ãŒã ã«MongoDBã䜿çšããŠããŸãã ãªãã§ïŒ ã¹ã±ãŒã©ããªãã£ãéèŠã ããã§ãã ã²ãŒã ãããŸãã·ã¥ãŒãããå Žåãäºæ³ãããå€§å¹ ã«æ¡å€§ããå¿ èŠããããŸãã
äžæ¹ããããçºçããªãå Žåã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãåæžããããšèããŠããŸãã å€ãã®ã²ãŒã ã§ã¯ã次ã®ããã«ãªããŸããã²ãŒã ãèµ·åããŸããããäœããã®ããŒã¯ãããã倧ããªã¯ã©ã¹ã¿ãŒãäœæããå¿ èŠããããŸãã ãã®åŸãã²ãŒã ã¯ãã§ã«äººæ°ããªããªã£ãŠããŸãããã®çç±ã¯ãããã¯ãšã³ããå§çž®ãä¿åã䜿çšããå¿ èŠãããããã§ãã ãã®å Žåã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ïŒã²ãŒã ïŒããããããŒã¿ããŒã¹ã¯è€éã§ã¯ãªããã²ãŒã ã«éèŠãªãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãæ ŒçŽããã¢ããªã±ãŒã·ã§ã³ã«åŒ·ãçµã³ä»ããããŠããŸãã
å€ãã®å Žåããªããžã§ã¯ãã¬ãã«ã§ã®ããŒã¿ããŒã¹ã®äžè²«æ§ã¯ååã§ããããã¯ãäžè²«æ§ã®åé¡ã®å€ããã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§å¯ŸåŠãããããã§ãã ããšãã°ã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã®ã¿ã1人ã®ãã¬ãŒã€ãŒã®ããŒã¿ãä¿åããŸãã
è¿œå æ å ±
http://www.mongodb-is-web-scale.com/ [ YouTube ]ã«ããã®å€ããŠå€ããŠéåžžã«é¢çœããããªããå§ãããŸã ã ããã§çµãããŸãã
MySQLãšMongoDB-ã©ã¡ãã䜿çšããã®ãé©åã§ããïŒ