ãã€ã©ã€ãïŒ
- MongoDBã§ã¯ãªãã·ã§ã³ã§ãããã¹ããŒããèšèšããããšã¯éåžžã«éèŠã§ãã
- åæ§ã«ãã€ã³ããã¯ã¹ã¯ã¹ããŒããšã¢ã¯ã»ã¹ãã¿ãŒã³ã«äžèŽããå¿ èŠããããŸãã
- 倧ããªãªããžã§ã¯ãã倧ããªé åã®äœ¿çšã¯é¿ããŠãã ããã
- ç¹ã«ã»ãã¥ãªãã£ãšä¿¡é Œæ§ã«é¢ããŠã¯ãMongoDBã®èšå®ã«æ³šæããŠãã ããã
- MongoDBã«ã¯ã¯ãšãªãªããã£ãã€ã¶ããªããããã¯ãšãªæäœãå®è¡ãããšãã¯æ³šæãå¿ èŠã§ãã
ç§ã¯éåžžã«é·ãéããŒã¿ããŒã¹ãæ±ã£ãŠããŸããããMongoDBãçºèŠããã®ã¯ã€ãæè¿ã®ããšã§ããå§ããåã«ç¥ãããããšãããã€ããããŸãã人ããã§ã«ç¹å®ã®åéã§ã®çµéšãæã£ãŠãããšãã圌ãã¯ããŒã¿ããŒã¹ãšã¯äœãããããŠåœŒããäœãããŠããã®ãã«ã€ããŠå å ¥èŠ³ãæã£ãŠããŸããä»ã®äººãç解ããããããã«ãããããééãã®ãªã¹ãã以äžã«ç€ºããŸãã
èªèšŒãªãã§MongoDBãµãŒããŒãäœæãã
æ®å¿µãªãããMongoDBã¯ããã©ã«ãã§èªèšŒãªãã§ã€ã³ã¹ããŒã«ãããŸããã¯ãŒã¯ã¹ããŒã·ã§ã³ãããŒã«ã«ã§ã¢ã¯ã»ã¹ãããã®ã¯æ£åžžã§ãããã ããMongoDBã¯å€§éã®ã¡ã¢ãªã䜿çšããã®ã倧奜ããªãã«ããŠãŒã¶ãŒã·ã¹ãã ã§ãããããéçºã«ã®ã¿äœ¿çšããå Žåã§ããã§ããã ãå€ãã®RAMãåãããµãŒããŒã«é 眮ããããšããå§ãããŸããããã©ã«ãã®ããŒããä»ããŠãµãŒããŒã«ã€ã³ã¹ããŒã«ãããšãç¹ã«ãªã¯ãšã¹ãã§javascriptã³ãŒããå®è¡ã§ããå ŽåïŒããšãã°ãã€ã³ãžã§ã¯ã·ã§ã³ã®
$where
ã¢ã€ãã¢ãšããŠïŒãåé¡ãçºçããå¯èœæ§ããããŸãã
èªèšŒæ¹æ³ã¯ããã€ããããŸãããæãç°¡åãªã®ã¯ãŠãŒã¶ãŒID /ãã¹ã¯ãŒããèšå®ããããšã§ãã掟æãªLDAPããŒã¹ã®èªèšŒã«ã€ããŠèãããšãã¯ããã®èããåãå ¥ããŠãã ãããã»ãã¥ãªãã£ã®èŠ³ç¹ãããMongoDBãææ°ã®ç¶æ ã«ä¿ã¡ãäžæ£ã¢ã¯ã»ã¹ããªãããã°ãåžžã«ãã§ãã¯ããå¿ èŠããããŸããããšãã°ãããã©ã«ãã®ããŒããšããŠå¥ã®ããŒããéžæããããšæããŸãã
æ»æé¢ãMongoDBã«ãã€ã³ãããããšãå¿ããªãã§ãã ãã
MongoDBã»ãã¥ãªãã£ãã§ãã¯ãªã¹ãã«ã¯ããããã¯ãŒã¯ãžã®äŸµå ¥ãããŒã¿æŒæŽ©ã®ãªã¹ã¯ã軜æžããããã®åªãããã³ããå«ãŸããŠããŸãããããåŽäžããŠãéçºãµãŒããŒã¯é«ã¬ãã«ã®ã»ãã¥ãªãã£ãå¿ èŠãšããªããšèšãã®ã¯ç°¡åã§ãããã ããç¶æ³ã¯ããã»ã©åçŽã§ã¯ãªããããã¯ãã¹ãŠã®MongoDBãµãŒããŒã«åœãŠã¯ãŸããŸããå ·äœçã«ã¯ã説åŸåã®ãªãéãã䜿çšããããšã«çç±ããã
mapReduce
ãgroup
ãŸãã¯$ããªããèšå®ãã¡ã€ã«ã«æžã蟌ãããšã«ãããä»»æã®JavaScriptã³ãŒãã®äœ¿çšãç¡å¹ã«ããå¿
èŠããããŸãããjavascriptEnabled:false
ãããŒã¿ãã¡ã€ã«ã¯æšæºã®MongoDBã§æå·åãããŠããªããããå®å
šãªãã¡ã€ã«ã¢ã¯ã»ã¹æš©ãæã¡ãã¢ã¯ã»ã¹ãå¶éããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ç¬èªã®ãã¡ã€ã«ã¢ã¯ã»ã¹ã³ã³ãããŒã«ã䜿çšã§ããå°çšãŠãŒã¶ãŒã§MongoDBãå®è¡ããããšã¯çã«ããªã£ãŠããŸãã
åè·¯èšèšãšã©ãŒ
MongoDBã¯ã¹ããŒãã䜿çšããŸãããããããããã¯åè·¯ãå¿ èŠãªããšããæå³ã§ã¯ãããŸãããäžè²«æ§ã®ããã¬ã€ã¢ãŠããªãã§ããã¥ã¡ã³ããä¿åãããã ãã®å Žåãä¿åã¯ãã°ããç°¡åã«ã§ããŸãããåŸã§ååŸããã®ã¯éåžžã«å°é£ã§ãã
å€å žçãªèšäºãMongoDBã®ã¹ããŒãèšèšã®ããã®èŠªæã®6ã€ã®ã«ãŒã«ã¯ãã®ãããªæ©èœãªãããèªã䟡å€ã¹ããŒããšã¯ã¹ãããŒã©ã¡ãŒã«ãŒ3Tã®ãµãŒãããŒãã£è£œã®ããŒã«ã§ã¯ãéåžžã®ã¹ããŒãæ€èšŒã®ããã«äœ¿çšããŠäŸ¡å€ããããŸãã
䞊ã¹æ¿ãé åºãå¿ããªãã§ãã ãã
䞊ã¹æ¿ãé åºãå¿ãããšãä»ã®èšå®ãã¹ã®äžã§æãã€ã©ã€ã©ããç¡é§ã«ãªãå¯èœæ§ããããŸãã MongoBDã¯ãããã©ã«ãã§ãã€ããªãœãŒãã䜿çšããŸããããããããã誰ã«ãšã£ãŠã圹ç«ã€ãšã¯æããŸããã 1980幎代ã«ã¯ãã±ãŒã¹ã»ã³ã·ãã£ããã¹ãã¬ã¹ã»ã³ã·ãã£ãããã€ããªãœãŒãã¯ãããŒãºãã«ãã¿ã³ãå·»ãæ¯ã®å£ã²ããšãšãã«ãå¥åŠãªç°ææ§ãšèŠãªãããŠããŸãããä»ã§ã¯ãããã®äœ¿çšã¯èš±ãããŸãããå®ç掻ã§ã¯ãã¢ãŒã¿ãŒãµã€ã¯ã«ãã¯ãã¢ãŒã¿ãŒãµã€ã¯ã«ããšåãã§ãããããŠããããªãã³ããšãããªãã³ãã¯åãå Žæã§ããå°æåã¯åã«å€§æåã«çžåœãã倧æåã§ãããããŠãç§ã«diacriticalsortingã«ã€ããŠè©±ãããªãã§ãã ããã MongoDBã§ããŒã¿ããŒã¹ãäœæãããšãã¯ã倧æåãšå°æåãåºå¥ããªãç §åã䜿çšããŠãã ããã·ã¹ãã ã®ãŠãŒã¶ãŒã®èšèªãšæåã«å¯Ÿå¿ãããã®ãããã«ãããæååããŒã¿ã®æ€çŽ¢ãå€§å¹ ã«ç°¡çŽ åãããŸãã
倧ããªããã¥ã¡ã³ãã§ã³ã¬ã¯ã·ã§ã³ãäœæãã
MongoDBã¯ãæ倧16MBã®ãµã€ãºã®å€§ããªããã¥ã¡ã³ããã³ã¬ã¯ã·ã§ã³ã§ãã¹ãã§ããŸããGridFSã¯ã16MBãè¶ ãã倧ããªããã¥ã¡ã³ãçšã«èšèšãããŠããŸãããããã倧ããªããã¥ã¡ã³ããããã«é 眮ã§ãããšããçç±ã ãã§ãããããããã«ä¿æããããšã¯ãå§ãã§ããŸãããMongoDBã¯ãåã ã®ããã¥ã¡ã³ããæ°ãããã€ãã®ãµã€ãºã§ä¿åããå¹ ã®åºãSQLããŒãã«ã®è¡ã®ããã«æ±ãå Žåã«æé©ã«æ©èœããŸãã倧ããªããã¥ã¡ã³ãã¯ããã©ãŒãã³ã¹ã®åé¡ã®åå ã«ãªããŸãã
倧ããªé åã§ããã¥ã¡ã³ããäœæãã
ããã¥ã¡ã³ãã«ã¯é åãå«ããããšãã§ããŸããé åå ã®èŠçŽ ã®æ°ã4æ¡ã®æ°ããé¢ããŠããå Žåã«æé©ã§ããèŠçŽ ãé åã«é »ç¹ã«è¿œå ããããšããããå«ãããã¥ã¡ã³ãããã倧ãããªãã移åããå¿ èŠããããŸããã€ãŸããã€ã³ããã¯ã¹ãæŽæ°ããå¿ èŠããããŸãã倧ããªé åã䜿çšããŠããã¥ã¡ã³ãã®ã€ã³ããã¯ã¹ãåäœæãããšãèŠçŽ ããšã«ã€ã³ããã¯ã¹ãæ ŒçŽãããšã³ããªããããããã€ã³ããã¯ã¹ãäžæžããããããšããããããŸãããã®ã€ã³ããã¯ã¹ã®åäœæã¯ãããã¥ã¡ã³ããæ¿å ¥ãŸãã¯åé€ããããšãã«ãçºçããŸãã
MongoDBã«ã¯ããã®åé¡ãæå°éã«æããããã«ããã¥ã¡ã³ããæ¡åŒµããããã®ã¹ããŒã¹ãæäŸãããããããããã£ã«ãã¡ã¯ã¿ãŒãããããŸãã
é åã«ã€ã³ããã¯ã¹ãä»ããªããŠãã§ãããšæããããããŸãããæ®å¿µãªãããã€ã³ããã¯ã¹ããªããããä»ã®åé¡ãçºçããå¯èœæ§ããããŸããããã¥ã¡ã³ãã¯æåããæåŸãŸã§ã¹ãã£ã³ããããããé åã®æåŸã«ããèŠçŽ ãèŠã€ããã®ã«æéããããããã®ãããªããã¥ã¡ã³ãã«é¢é£ããã»ãšãã©ã®æäœã¯é ããªããŸãã
éèšäºé ã®æ®µéã®é åºãå¿ããªãã§ãã ãã
ã¯ãšãªãªããã£ãã€ã¶ããŒã¿ããŒã¹ã·ã¹ãã ã§ã¯ãäœæããã¯ãšãªã¯ååŸããããã®ã®èª¬æã§ãããååŸæ¹æ³ã§ã¯ãããŸããããã®ã¡ã«ããºã ã¯ãã¬ã¹ãã©ã³ã§ã®æ³šæãšåæ§ã«æ©èœããŸããéåžžãæçã泚æããã ãã§ãã·ã§ãã«è©³çŽ°ãªæ瀺ãäžããããšã¯ãããŸããã
MongoDBã§ã¯ãæç人ã«æ瀺ããŸããããšãã°ãããŒã¿ãééããããšã確èªããå¿ èŠããããŸã
reduce
䜿çšããŠãã€ãã©ã€ã³ã§å¯èœãªéãæ©æã«$match
ãš$project
ããœãŒãåŸã«ã®ã¿çºçãreduce
ããããŠããã¯ãæ€çŽ¢ã¯ãããªãããããå¿
èŠãšããæ£ç¢ºã«é çªã«èµ·ãããŸããäžèŠãªäœæ¥ãæé€ããã¹ããŒãžãæé©ã«ç·šæããæ¥ç¶ã®ã¿ã€ããéžæããã¯ãšãªãªããã£ãã€ã¶ããããšãå°ç¡ãã«ãªãå¯èœæ§ããããŸãã MongoDBã§ã¯ãå©äŸ¿æ§ãç ç²ã«ããŠãã詳现ã«å¶åŸ¡ã§ããŸãã
ã®ãããªããŒã«Studio 3Tã䜿çšãããšãMongoDBã§éèšã¯ãšãªãç°¡åã«äœæã§ããŸããAggregation Editorã䜿çšãããšããã€ãã©ã€ã³ã¹ããŒãã¡ã³ããäžåºŠã«1ã¹ããããã€é©çšã§ããã ãã§ãªããåã¹ãããã§å ¥åããŒã¿ãšåºåããŒã¿ãæ€èšŒããŠããããã°ãç°¡çŽ åã§ããŸãã
ã¯ã€ãã¯ã¬ã³ãŒãã£ã³ã°ã®äœ¿çš
MongoDBæžã蟌ã¿ãã©ã¡ãŒã¿ãé«éã§ä¿¡é Œæ§ã®äœããã®ã«èšå®ããªãã§ãã ããããã®ããã¡ã€ã«ã¢ã³ããã©ãŒã²ãããã¢ãŒãã¯ãæžã蟌ã¿ãè¡ãããåã«ã³ãã³ããæ»ããããé«éã«èŠããŸããããŒã¿ããã£ã¹ã¯ã«æžã蟌ãŸããåã«ã·ã¹ãã ãã¯ã©ãã·ã¥ãããšãããŒã¿ã¯å€±ãããäžè²«æ§ã®ãªãç¶æ ã«ãªããŸãã幞ãã64ãããã®MongoDBã§ã¯ãã®ã³ã°ãæå¹ã«ãªã£ãŠããŸãã
ã¹ãã¬ãŒãžãšã³ãžã³MMAPv1ãšWiredTigerã¯ãããé²ãããã«ãã®ã³ã°ã䜿çšããŸããããã®ã³ã°ãç¡å¹ã«ãªã£ãŠããå ŽåãWiredTigerã¯æåŸã«äžèŽãããã§ãã¯ãã€ã³ãã«å埩ã§ããŸãã
ãžã£ãŒãã«åŠçã«ãããããŒã¿ããŒã¹ã¯ãªã«ããªåŸã«äžè²«ããç¶æ ã«ãªãããžã£ãŒãã«ã«æžã蟌ãŸãããŸã§ãã¹ãŠã®ããŒã¿ãä¿æãããŸãããšã³ããªã®é »åºŠã¯ããã©ã¡ãŒã¿ã䜿çšããŠèšå®ãããŸã
commitIntervalMs
ã
ã¬ã³ãŒãã確èªããã«ã¯ãæ§æãã¡ã€ã«ã§ãã®ã³ã°ãæå¹ã«ãªã£ãŠãã
(storage.journal.enabled)
ããšãããã³ã¬ã³ãŒãã®é »åºŠãã倱ãå¯èœæ§ã®ããæ
å ±ã®éã«å¯ŸããŠé©åã§ããããšã確èªããŠãã ããã
ã€ã³ããã¯ã¹ãªãã®äžŠã¹æ¿ã
æ€çŽ¢ããã³éèšããå Žåãå€ãã®å ŽåãããŒã¿ã䞊ã¹æ¿ããå¿ èŠããããŸããããŸãããã°ãããã¯ããœãŒããããããŒã¿ã®éãæžããããã«çµæããã£ã«ã¿ãªã³ã°ããåŸãæçµæ®µéã®1ã€ã§è¡ãããŸããããã§ãã䞊ã¹æ¿ããã«ã¯ã€ã³ããã¯ã¹ãå¿ èŠã§ããåäžãŸãã¯è€æ°ã®ã€ã³ããã¯ã¹ã䜿çšã§ããŸãã
é©åãªã€ã³ããã¯ã¹ããªãå ŽåãMongoDBã¯ãããªãã§å®è¡ããŸãã䞊ã¹æ¿ãæäœã®ãã¹ãŠã®ããã¥ã¡ã³ãã®åèšãµã€ãºã«ã¯32MBã®ã¡ã¢ãªå¶éããããMongoDBããã®å¶éã«éãããšããšã©ãŒãã¹ããŒããããã空ã®ã¬ã³ãŒãã»ãããè¿ãããŸãã
ã€ã³ããã¯ã¹ããµããŒãããã«æ€çŽ¢
æ€çŽ¢ã¯ãšãªã¯ãSQLã®JOINæäœãšåæ§ã®æ©èœãå®è¡ããŸããæé«ã®ããã©ãŒãã³ã¹ãåŸãã«ã¯ãå€éšããŒãšããŠäœ¿çšãããããŒå€ã®ã€ã³ããã¯ã¹ãå¿ èŠã§ãã䜿çšæ³ã¯ã«åæ ãããŠããªããããããã¯æããã§ã¯ãããŸãã
explain()
ããã®ãããªã€ã³ããã¯ã¹ã¯ãã€ã³ããã¯ã¹ã«æžãããããšã«å ããŠããexplain()
é çªã«ãã€ãã©ã€ã³æŒç®åã«ãã£ãŠäœ¿çšããã$match
ãããŠ$sort
ã圌ãã¯ããã€ãã©ã€ã³ã®å
é ã§çºçããå Žåããã€ã³ããã¯ã¹ã¯ãéçŽãã€ãã©ã€ã³ã®ä»»æã®æ®µéãã«ããŒã§ããããã«ãªããŸããã
ãã«ãã¢ããããŒãã®äœ¿çšããªããã¢ãŠããã
ãã®ã¡ãœããã¯
db.collection.update()
ãæå®ãããã©ã¡ãŒã¿ãŒã«å¿ããŠãæ¢åã®ããã¥ã¡ã³ãã®äžéšãŸãã¯ããã¥ã¡ã³ãå
šäœãå®å
šã«çœ®ãæãããŸã§å€æŽããããã«äœ¿çšãããŸãupdate
ãmulti
ã¯ãšãªæ¡ä»¶ãæºãããã¹ãŠã®ããã¥ã¡ã³ããæŽæ°ãããªãã·ã§ã³ãèšå®ãããŸã§ãã³ã¬ã¯ã·ã§ã³å
ã®ãã¹ãŠã®ããã¥ã¡ã³ããåŠçãããªãããšã¯ããã»ã©æçœã§ã¯ãããŸããã
ããã·ã¥ããŒãã«å ã®ããŒã®é åºã®éèŠæ§ãå¿ããªãã§ãã ãã
JSONã§ã¯ããªããžã§ã¯ãã¯0å以äžã®ååãšå€ã®ãã¢ã®é åºä»ããããŠããªãã³ã¬ã¯ã·ã§ã³ã§æ§æãããŸããããã§ãnameã¯æååãvalueã¯æååãæ°å€ãããŒã«å€ããŒãããªããžã§ã¯ãããŸãã¯é åã§ãã
æ®å¿µãªãããBSONã¯æ€çŽ¢æã«é åºãéåžžã«éèŠèŠããŠããŸããMongoDBã§ã¯ãã€ã³ã©ã€ã³ãªããžã§ã¯ãå ã®ããŒã®é åºãéèŠã§ãã
{ firstname: "Phil", surname: "factor" }
ãšåãã§ã¯ãããŸãã{ { surname: "factor", firstname: "Phil" }
ãã€ãŸãã確å®ã«èŠã€ãããå Žåã¯ãããã¥ã¡ã³ãå
ã®ååãšå€ã®ãã¢ã®é åºãç¶æããå¿
èŠããããŸãã
ãnullããšãundefinedããæ··åããªãã§ãã ãã
å€ãundefinedãã¯ãJavaScriptã§äœ¿çšãããŠããå Žåã§ããå ¬åŒã®JSONæšæºïŒECMA-404ãã»ã¯ã·ã§ã³5ïŒã«åŸã£ãŠJSONã§æå¹ã«ãªãããšã¯ãããŸããã§ãããããã«ãBSONã®å Žåãããã¯éæšå¥šã«ãªããã«å€æãããŸã
$null
ãããã¯å¿
ãããé©åãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸãããMongoDBã§ãæªå®çŸ©ãã䜿çšããããšã¯é¿ããŠãã ããã
$limit()
ãªãã§äœ¿çš$sort()
å€ãã®å ŽåãMongoDBã§éçºããŠãããšãã¯ãã¯ãšãªãŸãã¯éèšããè¿ãããçµæã®ãµã³ãã«ã確èªãããšäŸ¿å©ã§ããããã¯ãã®ã¿ã¹ã¯
$limit()
ã«åœ¹ç«ã¡ãŸãããã³ãŒãã®åã§äœ¿çšããªãéããã³ãŒãã®æçµããŒãžã§ã³ã«å«ããããšã¯ã§ããŸãã$sort
ããã®ã¡ã«ããºã ãå¿
èŠãªã®ã¯ãããããªããšçµæã®é åºãä¿èšŒã§ãããããŒã¿ã確å®ã«è¡šç€ºã§ããªãããã§ããçµæã®äžéšã«ã䞊ã¹æ¿ãã«å¿ããŠç°ãªãã¬ã³ãŒãã衚瀺ãããŸãã確å®ã«æ©èœããã«ã¯ãã¯ãšãªãšéèšã決å®è«çã§ããå¿
èŠããããŸããã€ãŸããå®è¡ããããã³ã«åãçµæãçæãããŸãã$limit()
ååšãããååšããªãã³ãŒãã¯$sort
決å®è«çã§ã¯ãªãããã®åŸã远跡ãå°é£ãªãšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãã
çµè«
MongoDBã«äžæºãæããå¯äžã®æ¹æ³ã¯ãMongoDBãDBMSãªã©ã®å¥ã®ã¿ã€ãã®ããŒã¿ããŒã¹ãšçŽæ¥æ¯èŒããããMongoDBã䜿çšãããšããç¹å®ã®æåŸ ãæ±ãããšã§ãããªã¬ã³ãžãšãã©ãŒã¯ãæ¯èŒãããããªãã®ã§ããããŒã¿ããŒã¹ã·ã¹ãã ã«ã¯ç¹å®ã®ç®æšããããŸãããããã®éããèªåã§ç解ããŠç解ããã®ãæåã§ãã MongoDBéçºè ã«DBMSãã¹ããã©ããããåŸãªããã¹ããããããå§åããããã®ã¯æ®å¿µã§ããããŒã¿ã®æŽåæ§ã確ä¿ããããæªæã®ãããŠãŒã¶ãŒã«ããé害ãæ»æã«åŒ·ãããŒã¿ã·ã¹ãã ãæ§ç¯ããããããªã©ãå€ãåé¡ã解決ããããã®æ°ãããŠãšããµã€ãã£ã³ã°ãªæ¹æ³ãèŠãããšæã£ãŠããŸãã
MongoDBã®ACIDãã©ã³ã¶ã¯ã·ã§ã³æ§ã®4.0å®è£ ã¯ãéèŠãªæ¹åãããã«é©æ°ãããŠãããã瀺ãè¯ãäŸã§ãããã«ãããã¥ã¡ã³ãããã³ãã«ãã¹ããŒãã¡ã³ããã©ã³ã¶ã¯ã·ã§ã³ã¯ã¢ãããã¯ã«ãªããŸããããŸããããã¯ã®ååŸããã³ã°ãããã©ã³ã¶ã¯ã·ã§ã³ã®å®äºã«ãããæéã調æŽããããåé¢ã¬ãã«ãå€æŽãããããããšãå¯èœã«ãªããŸããã