MongoDBãé©ããªãã±ã¼ã¹
> åæ(Why MongoDB is a bad choice for storing our scraped data)
ç§èªèº«ã¯MongoDBãæ¨é²ããç«å ´ãªã®ã ãã確ãã«MongoDBã«é©ããªãã±ã¼ã¹ã¯ããã
éé²ã«æ¨é²ãã¦ãçµå±ã¯å
¨å¡ãã¢ã³ãããã¼ã«ãªãã®ã§ããã®æ§ãªãã¿ãã©ãã©ãç´¹ä»ãã¦ãããã¨æãã
ãã®è¨äºã¯MongoDBãå¾¹åºçã«ä½¿ãå°½ãããã¨ã³ã¸ãã¢ãæ¸ãã¦ããæ§ã§ç¶æ³ãè¯ã解ã£ãã
ã¡ãã£ã¨é£ããæãããã®ã§è¦ç¹ãæ訳ãã¦ã軽ã解説ãæ¸ãã¦ã¿ãã
ï¼ãã¡ããæ¯éåæã§èªãã®ããå§ãããï¼
ç¶æ³
æåã¯MongoDBã§ãã¾ãåãã¦ããããã ãã ãè¦å´ãå¢ãã¦ãã¦
å
ã
ã®ã¢ã¼ããã¯ãã£ãå·æ°ããã¿ã¤ãã³ã°ã§MongoDBããå¥ã®ãããã¯ãã«ä¹ãæããäºã«ããã
ã·ã¹ãã ã®è¦æ¨¡
詳ããæ¸ããã¦ããªãããï¼ãã¼ã辺ãæ°TBã¨ããã®ã§Shardingç°å¢ã§ã¯ãªããã¨æãããã
ããããã®æã®ãã¼ã¿ã§Shardingã¯é£ããã®ã§ãã£ã¦ãªããããããªãã
ããã¥ã¡ã³ã
è²ã
ãªããã¥ã¡ã³ããæ±ã£ã¦ãããã ããã¡ã¤ã³ã¯ï¼é層æ§é ãæãå¾ãï¼å°ããªã¯ãã¼ã«ãã°ãã¼ã¿ã大éã«æ±ãã
ãã¼ã¿æ§é ã¯äºåäºæ¸¬ä¸è½ã
ã¯ã¨ãªã¼
PVåä½ã§ã®åç §ã®æ§ãªçãã¯ã¨ãªã¼ã¨ãããç¨åº¦æéãè¦ããã¯ã¨ãªã¼ï¼ä¸æ¬export/delete,ãã£ã«ã¿ãªã³ã°,ã½ã¼ããªã©ï¼ãããã
åé¡
ããã¯
MongoDB 2.2以åã¯Readers-Writerããã¯ãªã®ã§ãé·ãã¯ã¨ãªã¼ãèµ°ã£ããã®ç¬éãããçãã¯ã¨ãªã¼ãããã¯ãããã
Webããã®PVãæãæ§ãªã·ã¹ãã ã®å ´åãä¸ç¬ã§ãããã¯ãèµ°ãã°ãWEBãµã¼ãä¸ã®å
¨ã¦ã¯ã¼ã«ã¼ã¹ã¬ãããæ½°ããã¦ãµã¤ãããã¦ã³ããã
ãã®çºãè²ã
ãã£ã
- MongoDBãã©ã¤ãã¼ãå¼ãã¿ã¤ã ã¢ã¦ãã¨ãªãã©ã¤ãä¸æããã¨ããæ§ã«ãããï¼ç§ããã£ãï¼
- èªåã§ããã¯ã¨ã³ãã¹ãã¬ã¼ã¸ãç¨æãã¦ãã¼ã¿ãåæãé·ãã¯ã¨ãªã¼ã¯ãã¡ãã§å®è¡ã
- ãã¼ã¿ãã¼ã¹ãåããããã¯ãé£ãããã«ããã
- é«æ§è½ãµã¼ãã«å¤æ´ãï¼åæ£ã·ã¹ãã ã®ãã¾å³ãã»ã»ã»ï¼
- é 延æ©è½ï¼jobã§ãå®è£ ããã®ã ãããï¼ï¼Delayed implementing (or disabled) features that need to access a lot of fresh dataï¼
ãã£ã¹ã¯é åãéå¹ç
ããã¯paddingFactorã®åé¡ï¼MongoDB 2.4 ã®æ§è½ å¾¹åºè©ä¾¡ - å
¨ä»¶(relocation)ï¼ã«ã©ã ã¢ãããã¼ã -ã§ã触ãã¦ããï¼ãã¾ã¨ãã«é£ãã£ãã®ã ããã
ããã¥ã¡ã³ããäºåäºæ¸¬ã§ããªããªãã°ä»æ¹ããªãã
ãããã¥ã¡ã³ããäºåäºæ¸¬ã§ããªãäºã
ããããããMongoDBã«é©ããªãæ大ã®çç±ã ããã
大éã®ãã¼ã¿ãã¼ã¹
çµæçã«ç®¡çããããªãç¨ã®å¤§éã®ãã¼ã¿ãã¼ã¹ãä½ãäºã«ãªã£ãã
ã¾ãmongodããªã¹ã¿ã¼ãããéã®ãã§ãã¯æéãè¨å¤§ã«ãªã£ãã
ãã¼ã¿ãã½ã¼ã
大éã®ãã¼ã¿ãã½ã¼ããã¦åºåããã®ã¯éç¾å®çã ã
MongoDBã§é çªãä¿æã§ããã®ã¯ãcapped collectionã ãã ããããã¯ã¯ãã¼ã«ãã°ã«ã¯é©ããªãã
å®ã¯ããªãæ ¸å¿ãã¤ããé¨åã
- #FF0000;">æ§è½é¢:MongoDB 2.4 ã®æ§è½ å¾¹åºè©ä¾¡ï¼ã¬ã³ã¼ãé·ã«ããè©ä¾¡ï¼- ã·ã¼ã±ã³ã·ã£ã«FETCHæ§è½ -ã§è¿°ã¹ãã¨ãããMongoDBã¯ï¼ç¹ã«å°ããªãã¼ã¿ç¨ï¼ã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ããªãã¨æ§è½ãåºãªã
- #FF0000;">capped collection:æ§è½é¢ãã½ã¼ããªã©ã¯è§£æ±ºã§ãããã¢ãããã¼ãåºæ¥ãªããªã©ã使ãé£ã
- #FF0000;">ãã¼ã¿é åºé¢:in-placeã¢ãããã¼ããä¿è¨¼ã§ããªããã°å ¥ããé çªã¯ä¿æãããªã
- #FF0000;">ã½ã¼ã:ãã¨ãã£ã¦å¤§éãã¼ã¿ã®ã½ã¼ãã¯éç¾å®ç
ãããMongoDBã«éããæ®ã©ã©ããªã·ã¹ãã ã§ãçµå±è¾ããMongoDBã¯ããã¯åé¡ããããæ·±å»ã«ãã¦ããï¼2.2以åï¼ã
ãã®ã½ã¼ãåé¡ãç§ãªãPVç³»ã¯ã¤ã³ããã¯ã¹ã«é ¼ã£ã¦ãéè¨ç³»ã¯MongoHadoopã§éãããããããªãã
Skip + Limitãé ã
ãããå½ç¶é
ãããã»ã»ã»
ã«ã¼ã½ã«å¦çã¨ã¯ããã大éã®èªã¿é£ã°ãã¯ããã¤ã
ãããªã®ä¸æãå¦çã§ããã·ã¹ãã ããã®ãï¼ï¼
ãã£ã¼ã«ãåã®å¶é
MongoDBã®ãã£ã¼ã«ãåã«ã¯ãdot(.)ã¨dollar($)ã使ããªãã
ç§ãã¤ãã¦ãã«ãªãã£ã¦ãã¾ã
ã¡ã¢ãªã¼å¶å¾¡
MongoDBã¯ã¡ã¢ãªã¼å¶å¾¡ã«é¢ããæ©è½ãæä¾ãã¦ããªãã
é »ç¹ã«ã¢ã¯ã»ã¹ãããã¼ã¿ã解ã£ã¦ããã®ã«ãã¡ã¢ãªã¼ãã追ãåºããã¦ãã¾ãã
ããã¯ç§ãä¸æºã
MongoDBã¯ããªãã¹ãèªååãã¦ã¼ã¶ã«è¤éãªå¶å¾¡ãæ±ããªããã¨ããå²å¦ãããã£ã½ãã¦
ãã®æã®ãªãã·ã§ã³ã追å ããããããä½ã£ã¦ãåãå
¥ãã¦è²°ããªãã
çµå±mmapã®åããèªãã§ãªãã¨ããããããªãã
ãã¼ã¿æ´åæ§ã®åé¡è²ã
- ãã©ã³ã¶ã¯ã·ã§ã³
- ç¡ãããã³ã¼ããè¤éåãã
- ã¨ã©ã¼ãåãã«ãã
- ä¾ãã°åå¨ããªãã³ã¬ã¯ã·ã§ã³ã«insertãã¦ãã¨ã©ã¼ã«ãªããªããã ããä½è¨ã«ã³ã¼ããè¤éåããã
ï¼ãã®éãï¼ä¸æºï¼ï¼ï¼ - Safeã¢ã¼ã
- Trueãããªãå ´åã®åä½ãã¤ããã
ï¼ãã®è¾ºãã¯write concern使ãã®ãçããªããï¼ - ã¹ãã¼ãã¬ã¹ã®å¼å®³
- ãã°ã®æ¤ç¥ãé£ãã
ï¼ã¾ãä»æ¹ããªããï¼ - ã¸ã§ããç¡ã
- éæ£è¦åãã¼ã¿ãæ±ãã®ã«ããªã¬ã¼ããã©ã³ã¶ã¯ã·ã§ã³ãç¡ãã®ã¯ãã©ã¤ã
ï¼ç¢ºãã«ï¼
ã¾ã¨ã
MongoDBã§ã¯ãã¼ã«ãã¼ã¿ãæ±ã£ã¦ãå·§ãè¡ãã±ã¼ã¹ã¯ãããå®éæã
ã¯æ«ã使ã£ã¦ããã
ãããã³ã³ã§è¿°ã¹ãæ§ã«ææ©æã
ã®è¦ä»¶ã«ã¯åããªããªã£ãã
ï¼æçµçã«ã¯hBase Cassandraã«ãã模æ§ï¼
ç§èªèº«ã®è¦è§£
åãããã°ãã¼ã¿ã¯MongoDBã§ã¯æ±ããªãã ããã
æ¢ã«è¿°ã¹ããã¦ãäºã®ä¸ã§ã¯ç¹ã«ãã½ã¼ãã®åé¡ãå³ãããæ´ã«æç³»åãã¼ã¿ã¯æ ¹æ¬çã«Shardingã«åããªãã
ã«ã©ã ãã¼ã¹ã®Cassandraã¯ãã®è¾ºãã«ç¢ºãã«åãã¦ããã®ã§ãç§ããã¡ãã«ä¸ç¥¨ã