ãè¦ãããããå°ãæãåºãã¦èãã¦ã¿ã
ãè¦ãããã¯ããã¾ãé¢ä¿ãªãã®ã§ãããã¹ã±ã¼ã«ã¢ã¦ãã«ã¤ãã¦ã
ããè¦ãããã¯æ¢ã« MySQL Cluster ã使ã£ã¦ãããªãé¢ä¿ãªãã®ã§ãããä½åº¦ãæ¸ãã¾ãããã©ããJOINç¦æ¢ãã¯ã¹ã±ã¼ã«ã¢ã¦ãã¨é¢ä¿ãªãã
ãTwitterè¦æ¨¡ã«ãªãã°å¥ã®èãæ¹ãå¿ è¦ã«ãªãã¾ãããåããããä»ã¯ DBãµã¼ã ã¯1å°ã ããã©ããã¹ã±ã¼ã«ã¢ã¦ãã®ããã«JOINç¦æ¢ãã¯ã究極ã®ããããã¯ããã¯ãã§ãã®ã§ãããªãããã«ï¼
ãåç´ã ããè¯ãããè¤éã ããè¯ãããªãã
ãå¿ è¦ãªã®ã¯å¹ççãã©ãããèãããã¨ã ãã§ãããã¯ã©ããªã·ã¹ãã ã§ãåãã
ãè¦ãããã¯â¦â¦
ããè¦ããã㯠MySQL Cluster ã使ã£ã¦ããã¨ã®ãã¨ãç§ãå§ããé ã¯ã4ã»5åã®é®å®åºï¼ãµã¼ã群ï¼ããã£ãæ§ã«è¨æ¶ãã¦ãã¾ãã
ãMySQL Clusterã¨èãã¦ãDBã¯1ã¤ã®ã¯ã©ã¹ã¿æ§æã§å¦çããã¦ããã¨æã£ãã®ã§ãããé害ã¯é®å®åºï¼ãµã¼ã群ï¼åä½ã§èµ·ãã¦ããæ§ã§ããDBãµã¼ãã®ä¸èª¿ãã§ããé®å®åºã§é害ãèµ·ãã¦ãããã¨ããã¢ãã¦ã³ã¹ããã°ãã°ãã£ãæ§ã§ãã
ãã¤ã¾ããå³ã®æ§ã«
é®å®åºï¼ãµã¼ã群ï¼æ¯ã«ãDBãµã¼ãã¯ã©ã¹ã¿ãé ç½®ãã¦ãããããã®DBãµã¼ãã¯é£æºãã¦ãªãã¨ããã¤ã¡ã¼ã¸ã®ããã§ãå ¨ä½ãè½ã¡ãªãã¨ãããã¨ã¯ãDBãµã¼ããã·ã³ã°ã«ãã¤ã³ãã«ãªã£ã¦ãã訳ã§ã¯ãªãã¨ãããã¨ã§ããã
ãã¦ã¼ã¶æ°60ä¸ãã¢ã¯ãã£ãã¦ã¼ã¶35ä¸ãåæã¦ã¼ã¶10ä¸ãæ´ã«å¢ãç¶ãã¦ããã¨è¨ããã¦ãã¾ãããé®å®åºï¼ãµã¼ã群ï¼åä½ã§è¦ãã°ãã£ã¨å°ãªããã¨ãããã¨ã¯ãMySQL Clusterã¯ãè² è·åæ£ã§ã¯ãªãããã©ã¼ã«ããã¬ã©ã³ã¹ã®ããã«ä½¿ã£ã¦ããã®ããªï¼
ãç§ã®è¨æ¶ã®ç¯å²ã§ã¯ãã²ã¼ã å ã§ä»ã®ã¦ã¼ã¶ã®ãã¼ã¿ãå¿ è¦ã«ãªãå¦çã¯ããã©ã³ãã³ã°ãã¨ãæ¼ç¿ããããªãã£ãããã«æãã¾ãã
ãã©ã³ãã³ã°ãé®å®åºï¼ãµã¼ã群ï¼åä½ãªã®ããå ¨ä½ãªã®ãåããã¾ãããããªã¢ã«ã¿ã¤ã ãªã®ãããã£ã¬ã¤ããï¼ãããå¦çï¼ãªã®ãã¯åããã¾ããããã¾ãééããªããããå¦çã§ãããããããå¦çãªããé®å®åºï¼ãµã¼ã群ï¼ãè·¨ãã§ãå ¨ã大ãããã¨ã¯ãªãã
ãã¾ãããæ¼ç¿ãã§ã¯1æ¥2å対æ¦ç¸æã5åé¸ãã§ããï¼ã¤ã¾ããããå¦çããï¼ããã§ããããªã¢ã«ã¿ã¤ã ã§å¯¾æ¦ããããã§ã¯ãªããèªåã誰ãã®å¯¾æ¦ç¸æã«ãªã£ããã©ãããåããã¾ãããæ´ã«ãé®å®åºï¼ãµã¼ã群ï¼ãè¶ ãã¦ã®å²ãå½ã¦ã¯ãªãã®ã§ã¯ï¼
ãä¸è¬çãªããã対æ¦åã²ã¼ã ãªããã¦ã¼ã¶ã®ãã¼ã¿ãå¤åããã¨åæã«å¯¾æ¦ç¸æã®ãã¼ã¿ãå¤åãã¾ããã対æ¦ç¸æã®ãã¼ã¿ã«å¤åã®ãªããè¦ãããã¯é常ã«åç´ã§ãåºæ¬çãªã²ã¼ã é¨åã¯ã¹ã¿ã³ãã¢ãã¼ã³ã§ãååå¯è½ã§ãããã
ãæ¼ç¿ã®ç¸æã¯æ¶ç©ºã§ãåãããªãï¼ï¼ï¼ãããâ¦â¦ã
æ´æ°å¦çã¯ã©ããªã£ã¦ãï¼
ãã³ãã¯ã·ã§ã³æ°ããããã«é¢ããã¡ã¢ãªã¼ãããã«ããã¯ã«ãªããªãããã«èª¿æ´ãããã次ã«æ¥ãã®ã¯ããã¼ã¿æ´æ°æã®åé¡ãã«ãªãã¾ãã
ãããã¯LOCKã®åé¡ããI/Oã®åé¡ãªã©æ§ã ãªãã¨ãèµ·ããã¾ãããããã¯åå¥ã«è¦ãªããã°åããã¾ããã®ã§ããã¨ãã¦ãæ´æ°ã«ã¤ãã¦ã¯ãäºç¨®ã¯ããã¤ãããã¾ããããè¦ãããã®ãããªã·ã¹ãã ãªãã主ã«ä»¥ä¸ã®æ§ãªå¦çã«ãªãã§ãããã
ãç§ãªããAPãµã¼ãã®è² è·ãä¸ããããã«ã¯ã©ã¤ã¢ã³ãã«æ½é¸ãããã¦ãã¾ãããªâ¦â¦ãã¾ããæ½é¸ã®å
ã«ãªããã¼ã¿ãã¯ã©ã¤ã¢ã³ãã«éä¿¡ããã®ã¯å«ãã人ãå¤ãã§ããããã解æããããæ¹é ãããããéæ³ãªäººéã¯ãããã¯ã¢ãããã¦éä¼ããããªãã訴ãããªãããã°ããããâ¦â¦ã
ããããï¼ å°æ¥ã対æ¦åã«ãã¼ã¸ã§ã³ã¢ããããããã«â¦â¦ã
ããããï¼ ã¾ããããããããããªâ¦â¦ã
ãéã«ãããããã°ãå¿ è¦ãªãããå³æ ¼ãªã·ã¹ãã ã§ããã°ããã°ã¯ãUPDATE ãã軽ã INSERTã ãï¼æ¸ãæããããã°ãããªãï¼ã«ãªãã¾ãããããã°ã ãæ¸ãè¾¼ãã ãå¦çãç¶ããããããã«ãã¾ãããã°ãå¿ è¦ãªã·ã¹ãã ã§ããã°ã®INSERT ã¨ãã¼ã¿ã® UPDATE ãçµããã¾ã§æ¬¡ã«é²ã¾ãªãã·ã¹ãã ã§ã¯ã大éã¢ã¯ã»ã¹ã«ãªãã°ããã ãå³ãããªãã
ãä½è«ã§ãããä¼¼ããããªå¦çã§ãä¾ãã°ãECãµã¤ãã§ããã°ã注æãã¿ã³ã§ãã°ï¼ã¨ããã仮注æï¼ãæ¸ãã¦ç¢ºèªç»é¢ã«é·ç§»ã確å®ãã¿ã³ã§ãã°ã®IDã¨å
±ã«å®éã®ãã¼ãã«ã«æ¸ãè¾¼ããã¨ããå¦çãããã¾ããã1åã®ã¦ã¼ã¶ã¢ã¯ã·ã§ã³ã§2åæ¸ãè¾¼ãã®ã¯å³ããã§ããããã¼ã¸é·ç§»ãæã¾ãã°ãã³ãã¯ã·ã§ã³ãæ´ã¿ã£ã±ãªãã®å¦çã¨ã¯éããDBãµã¼ãã«ã¨ã£ã¦å¤§å¤ãªæé稼ãã«ãªãã¾ãã
ãå°¤ãã確å®ãã¿ã³æ¼ä¸æã®ããã«ããã¯ã¯ã大æµç¢ºèªã¡ã¼ã«ã®æ¹ã§ããã©ï¼è¦ç¬ï¼
å人çãªææ³
ãç§ãç¡èª²éã¦ã¼ã¶ï¼ååå ¥ä¼ãã¼ãã¹ã®500ååã¯ä½¿ãã¾ãããï¼ã ããããç¥ãã¾ãããããè¦ãããã£ã¦å¾ ã¡æéã°ã£ããã§ãæ¿ãããµã¼ãã«ã¢ã¯ã»ã¹ãããã¨ãã¦ãã§ããªããåæãªã³ã©ã¤ã³ã®ã¦ã¼ã¶ã10ä¸ãã¦ããä¸äººä¸äººã¯ã1æéã«ä½åãæ´æ°ãã¦ãªãã¨æãã®ã§ãå¤ããè¦ãéããããªã«ã·ãã¢ã¨ã¯æããªãã®ã§ãã
ãMySQL Clusterã®ãã³ããã¼ã¯ http://www-jp.mysql.com/why-mysql/benchmarks/mysql-cluster/ ãè¦ãéãã2å°ã®ãµã¼ãã§1ç§éã«100ä¸åã® UPDATEæãæµãã¦ããã
ãã¡ãããããã¯çè«å¤ã«è¿ããã¹ãã§ãç¾å®ã«ã¯ãã®ã¾ã¾ã®ããã©ã¼ãã³ã¹ã¯åºãªãã§ãããããããã10ä¸ã®åæã¦ã¼ã¶ãå¹³å10ç§ã«1åã®æ´æ°ï¼ãããªã«ã§ããï¼ï¼ï¼ãè¡ãããã¨ãã¦ãã1ç§1ä¸åã§ãã
ã¤ã¾ããé®å®åºãåããªãã§2å°ã§çµãã æå°ã®ã¯ã©ã¹ã¿æ§æã§ããNoSQL ã® API ã使ã£ã¦ããã°çè«ä¸ã¯100å以ä¸ãç¾å®çã«ã¯ãã¨10åãããã¯å¯¾å¿ã§ãã¦ããããããªãã
ãããã§ããè¦ããããã
ããããåæã¦ã¼ã¶10ä¸ Ã· é®å®åºã®æ°
ãã§ãã©ãã«ããªãâ¦â¦ãã¹ã¿ã¼ãã©ã¤ã³ã®ã³ãã¯ã·ã§ã³æ°ã®ãã³ã¯ã®å¯è½æ§ãé«ãããã§ãã
ããè¦ãããã®ãããªã·ã¹ãã ã§ããã°ã¢ãã¡ã¼ã·ã§ã³ã®éã¯ãAPãµã¼ãããDBãµã¼ããå¥ã®å¦çãå¯è½ã§ãããããã·ã¼ã±ã³ã·ã£ã«ã«å¦çãã¦ããããããããå¾
ã¡æéãçºçãããã³ã¯ã®å¯è½æ§ããã¦ã¼ã¶ã®ã¹ãã¬ã¹ãé«ã¾ããã¨ã«ãªãã§ãããã
ï¼ç§ã¯ã¤ã©ããªã®ã§æ»
è¶è¦è¶ã¹ãã¬ã¹ãæºã¾ã£ãâ¦â¦ï¼ä½åº¦ãè½ã¨ãããã¿ã¤ãã³ã°ã®ã¤ã¡ã¼ã¸ã§ã¯ãã·ã¼ã±ã³ã·ã£ã«ãªå¦çã«ãã¦ãNoSQLã§ã¯ãªããUPDATE ã® SQL ãæµãææªã®ãã¿ã¼ã³ã®å¯è½æ§ããããããããªããã¨â¦â¦ã
ãããã# æéçµéæ¯ã«è³æºãå¢ãã¾ãããã¾ããããã®åº¦ã«UPDATEãæµãã¨ãâ¦â¦ã
ãããã# ã¾ããâ¦â¦ããããªâ¦â¦è¨è¨ã«ã¯ãªã£ã¦ãªãããã
ãã¾ããç§ã«ã¯èª¿ã¹ããããªãããã©ãä¾ãã°ãè¦ãããã®å¯¾æ¦ã·ã¼ã³ãªããã¦ã¼ã¶ã®1ã¢ã¯ã·ã§ã³ã«å¯¾ãã¦æ°åã®UPDATEæãæµããã¨ã«ãªãããºã§ãããã㧠NoSQL(API) ã使ãããã©ããã¯é常ã«å¤§ãããOracle ãªã©ã® SQL ãã·ã§ã¼ãã«ãããããã㪠API ããªãå ´åã¯ããã®éä¿¡ã1åã§çµããããã«å¼æ°ã«è©°ãè¾¼ãã ã¹ãã¢ãããã·ã¼ã¸ã£ã«ããã¹ãã§ãããã
ããããã«ãã¦ãããè¦ãããã«éãããä¼¼ããããªã½ã¼ã·ã£ã«ç³»ã®ã²ã¼ã ã§ããã°ã¢ãã¡ã¼ã·ã§ã³ã¨ããé常ã«é·ãä½è£ãä½ããã¨ãã§ãã¾ãããè¦ãããã¦ã¼ã¶ã¯ãã®ã¢ãã¡ã¼ã·ã§ã³ã楽ããã§ããã訳ã§ããã§ãããããã®ã¦ã¼ã¶ã飽ããªãããã«ä½ç¨®é¡ãã¢ãã¡ã¼ã·ã§ã³ãç¨æãã¦ãã¯ã©ã¤ã¢ã³ãã§ã©ã³ãã ï¼ã¬ã¢ãç¨æï¼ã«ã¢ãã¡ãæµãã¦æé稼ããã¦ãéåæå¦çããã° DBãµã¼ãã«å¯¾ããæµé調ç¯ã¯ååã«ã§ããã§ãããã
ãç§ãªãããããã§xç§é£½ããããªãã¢ãã¡ã¼ã·ã§ã³ãããããï¼ãã¨ããåãã¾ããæ±ãããã©ãï¼è¦ç¬ï¼å°¤ããã»ã³ã¹ããªãã®ã§ãä½ããã£ã¦é£½ããããªãããã¯ãå ¨ãåãããªãã®ã§ããâ¦â¦ã
å½ããåã®è©±ãâ¦â¦
ãããã°ã©ã ããã£ããã¨ã®ãªã人ã¯ãããã³ã³ã§ãªã¼ããæãã£ã¦ç¥ã£ãããå©ããããã人éãçµæ§ãã¾ãï¼è¦ç¬ï¼ãè¦ããããããã³ã³ã¨åãããã«ãæ¼åºï¼ã¢ãã¡ã¼ã·ã§ã³ï¼ã®éä¸ã§æ½é¸ããã¦ããã¨æãã人ãããããç¥ããªãããã©â¦â¦ã
ãã¾ããã©ã®ã¿ã¤ãã³ã°ã§æ½é¸ãã¦ãã¦ããç¥ããããå©ãããé¢ä¿ãªãã§ããï¼è¦ç¬ï¼
ãããã³ã³ã§ããè¦ãããã¨åãããã«æ´¾æãªæ¼åºãããã¾ããããã¡ãããæ¼åºã®ã»ã¼å ¨ã¦ï¼æè¿ã¯æ¼åºã追å ããããã®ãã¿ã³ãã¤ãã¦ããï¼ããã§ãã«ã¼ã«çãéã£ãç¬éã«æ±ºã¾ã£ã¦ãã¾ãã
ããè¦ããããããã³ã³ã¨åãã§ããè¦å¨ãã®è£½é ã«20åæãã£ã¦ããã¯ãªãã¯ããç¬éï¼æ£ç¢ºã«ã¯APãµã¼ãã«è¡ã£ã¦ããã§ããããï¼ã«ä½ãã§ãããã¯ç¢ºå®ãã¦ããããºã§ããæ¦éç»é¢ã§ã¯é£å½¢ã決å®ããç¬éã«ããä½ããã©ã®é çªã«ãã©ãã ãã®ãã¡ã¼ã¸ãåããããï¼æ¬¡ã®ã¦ã¼ã¶ã¢ã¯ã·ã§ã³ã®ï¼å¤æ¦ã®é¸æã«å ¥ãã¾ã§ã®å ¨ã¦ã®æ¼åºã決ã¾ã£ã¦ãã¾ããï¼éã£ããè °æããã»ã©é©ããâ¦â¦ï¼
ããããåãã£ã¦ãã¦ããè¦ãããã®å¾ ã¡æéã«èããããã¨ããã®ã¯â¦â¦ãã¤ã©ãã®ç§ã«ã¯ç解ã§ãã¾ããâ¦â¦ã
ãããããè¨ã£ã¡ããããçµãããããã£ã¦ãã¨ãªãã§ããããâ¦â¦ãããããã¦ãåãã£ã¦ãªã人ã®æ¹ãå¤ãããããªããã¨â¦â¦ã