ç§ãã¡ã®å€ãã¯ãã€ãŠç±æãæã£ãŠMongoDBãç¿åŸããããã«é§ãã€ããŸãããæ¬åœã«çŸããã®ã¯äŸ¿å©ãªJSON圢åŒã§ãããæè»ãªã¹ããŒã ïŒæ£ç¢ºã«ã¯å®å
šãªäžåšïŒã§ãã ãããããã°ããããŠããã§ã«Mongoã確å®ã«ãä¿è·ããããŠãããšãã倱æããããžã§ã¯ãã«èšå®ãããŸãã æãåçŽãªã¯ãšãªã§ã¯ãããã¥ã¡ã³ãã絶ããçªãå¿
èŠããããããå°ãè€éãªã¯ãšãªã§ã¯ã1æ¥ã®äœæ¥æéãã»ãŒçµããããããšãã§ããŸãããŸããç°ãªãã³ã¬ã¯ã·ã§ã³ã«åå ããå¿
èŠãããå Žåã¯...
ãããŠä»ã誰ããJSONã®éšåçãªãµããŒãã§Postgresã«æ»ã£ãŠããŠããŸã...
ãããã幞ããªããšã«ãããã¯ãã§ã«åœé ãããŠãããMongoã®æ¬æ Œçãªä»£æ¿åã§ãããæ¬æ Œçãªåæ§é åããã°ããŒã¿DBMS AsterixDBã¯ãã§ã«æ¥ãã§ããŸãã ãã®ãããžã§ã¯ãã¯ãäŒèª¬çãªDBMSã®ãã€ãªãã¢ã§ããMichael Stonebreakerã®èŠç¿ãã§ããUCIææMichael Careyãäž»å°ããŠããŸãã
ãã®ãããžã§ã¯ãã¯ãåã«ããã°ããŒã¿ã®åéã«ãããç 究ã€ãã·ã¢ãããšããŠå§ãŸããåœåã¯MapReduceãšSQLã®å
±éã¹ã¿ãã¯ã®äœæã«çŠç¹ãåœãŠãŠããŸããã ããããã»ãã®æ°å¹Žåãããã°ããŒã¿JSON DBMSãæ§ç¯ããããšã決å®ãããŸããã Michael Careyã«ãããšããAsterixDBã¯Mongoã§æ£ããåŠçãããŠããŸãããAsterixDBã®äž»ãªæ©èœã¯äœã§ããïŒ
1.ã¹ããŒã ã ã¯ããã¹ããŒã ã¯ãŸã æçšã§ãããå®å
šã«åãé€ãå¿
èŠã¯ãããŸããã JSONãªããžããªã§ã¯ããã£ãŒã«ãã®äžéšã¯äºåã«ç¥ãããŠãããä¿®æ£ãããŠãããå€æŽã§ããŸããã ããããåœç¶ãAsterixã¯ããŒã¿ã¹ããŒã å
šäœãå®å
šã«èšèšããããšã匷å¶ããŸããã ããªãã¯ã¹ããŒã ãªãã§çãç¶ããããšãã§ããŸãã ãã ããå°ãé åºãå€ãããå Žåã¯ãåºå®ããããã£ãŒã«ããããŒã¿ã¹ããŒãã«é
眮ããæ®ãã¯ããªãŒãã³ãã®ãŸãŸã«ããŸãã ããã¯äœãäžããŸããïŒ æ¿å
¥äžã®ããŒã¿ã®ãã§ãã¯ãããã³ã³ãã¯ããªã¹ãã¬ãŒãžãããŒã¿ã®ããå Žæã®èŠèŠçè¡šçŸã
äŸïŒ
ã¿ã€ãTwitterUserTypeãopen {ãšããŠäœæããŸãã
ã¹ã¯ãªãŒã³åïŒæååã
langïŒæååã
friends_countïŒint32ã
statuses_countïŒint32ã
ååïŒæååã
followers_countïŒint32
}
TwitterUserTypeããŒã¿åãäœæãããªã¹ããããŠãããã¹ãŠã®ãã£ãŒã«ãã¯åºå®ãããŠããŸãããåãéããŠãããããä»»æã®ä»ã®ãã£ãŒã«ããè¿œå ã§ããŸãã ããã§ããã®ã¿ã€ãã«åºã¥ããŠãã芪ãã¿ã€ããäœæã§ããŸãã
ã¿ã€ãTweetMessageTypeãéãããã®ãšããŠäœæ{
tweetidïŒæååã
ãŠãŒã¶ãŒïŒTwitterUserTypeã
éä¿¡è
ã®å ŽæïŒãã€ã³ãïŒã
éä¿¡æéïŒæ¥æã
åç
§ãããã¯ïŒ{{string}}ã
ã¡ãã»ãŒãžããã¹ãïŒæåå
}
ããã§ã¯ãã¿ã€ããTwitterUserTypeã«å¯Ÿå¿ããããŠãŒã¶ãŒããã£ãŒã«ãã衚瀺ãããŸãã ã³ãŒãã«ã¯ç»ããŸããã§ããããååä»ãã®åã«å²ãåœãŠãããšãªãããã¹ããããæ§é ãããã«èšè¿°ããããšã¯å¯èœã ãšæããŸãã ããããããã§ãªããŠããç§ã¯ãã®ãããªæ©èœãããã«çŸãããšç¢ºä¿¡ããŠããŸãã
ãããã¯ããAsterixDBã§ãµããŒããããŠããããŒã¿åïŒ
- ããŒã«
- Int8 / Int16 / Int32 / Int64
- ãããŒã
- ããã«
- ã²ã
- ãã€ã³ã-ãžãªã¡ããª
- ã©ã€ã³-ãžãªã¡ããª
- é·æ¹åœ¢ã®ãžãªã¡ããª
- å-ãžãªã¡ããª
- ããªãŽã³-ãžãªã¡ããª
- æ¥ä»
- æé
- æ¥æ
- æé/幎-æ-æé/æ¥-æéæé
- éé-æéééãAsterixDBã¯æéééã®ããã®Alainã®ããžãã¯ãå®è£
ããŸãããããã¯æãããããšã§ããã圹ã«ç«ã€å ŽåããããŸã
ããŠããã¹ããããã¿ã€ãïŒ
- èšé²
- 泚æãªã¹ã
- é äžåãªã¹ã
2.ãªã¯ãšã¹ãã®èšèªïŒ Mongoã®ã©ããã§ãããŒã¿ãã°ã«ãŒãåããéèšããèšç®ããããã£ãŒã«ãã§è£å®ããããœãŒã¹ãã£ãŒã«ãã®ç¹å®ã®ãµãã»ãããäœæããå¿
èŠããããŸãã ãã®åŸãã²ã©ãé çãå§ãŸããŸãã ãã®ãããAsterixDBã«ã¯ãç·©ããã«æ§é åãããããŒã¿å°çšã«èšèšããããã¹ãŠã®SQLæ©èœãåããæ¬æ Œçãªã¯ãšãªèšèªããããŸãã ããã¯ãXML DBMSã§äœ¿çšãããæ©èœçãªXQueryã¯ãšãªèšèªã®ç°¡ç¥åã§ãã XQueryã®W3Cä»æ§ã«åãçµãããèªè
ã掟é£ããã€ããã¯ãããŸããããããæããªããWellcomeã«ïŒ AQLèšèªïŒAsterix Query LanguageïŒã®ãããã¥ãŒããªã¢ã«ãäœæããŠã¿ãŸãã
ã¯ãšãªèšèªã®åºç€ã¯ãFLOWRïŒã»ãŒè±ïŒåœä»€For-Let-OrderBy-Where-Returnã§ãã ããã«ãGroupByãæ¿å
¥ããŸãããå°ãåŸã§èª¬æããŸãã ãããSQLã«å€æãããšã次ã®ããã«ãªããŸãã
SQLã®ã»ãŒFROMå¥ã®å Žåãããã§å®è¡ããã³ã¬ã¯ã·ã§ã³ãéžæããŸãã Forã®åŸãå€ãæã€å€æ°ã®ããŒãã«ãååŸãããã®äžã«ãã»ãšãã©SQLã®ããã«ãæ®ãã®æäœãé©çšãããŸãã
äŸïŒåŸ
for $x in users, $y in groups
次ã®åœ¢åŒã§ãšã³ããªãååŸããŸãã
($x : user1, $y : group1), ($x : user1, $y: group2), ...
ããã¯ãSQLã®éåžžã®ã¯ãã¹ç©ã§ãã
Letã¯è¿œå ã®å¥ã§ããããã§ã¯ãæ°ããå€æ°ãå
¥åã§ããŸãã ããã¯ãForã¿ãã«ãForçµæã«è¿œå ããã®ã§ã¯ãªããåã«æ°ããå€æ°ãšãã®å€ãè¿œå ããã ãã§ãã
OrderBy-ãã¹ãŠãã·ã³ãã«ã§ãSQLãœãŒããšåçã§ãã
Where-åã³ãéåžžã®ãã£ã«ã¿ãŒãSQL Whereã®å®å
šãªé¡äŒŒç©ã
æ»ã-ããã§ã¯ãæ£ç¢ºã«äœãè¿ãããããå°ããŸãã åžžã«åã®ãªã¹ããè¿ãSQLãšã¯ç°ãªããããã§ã¯JSONæ§é ããããã¯ã§ããŸãã ãããŠããã®å¥ã§ã¯ãçµæãç°ãªãæçãçæãããã¹ããããã¯ãšãªããã³ã°ã§äœ¿çšããŸãã
äžèšã®ãã¹ãŠãåæºããªãããšãé¡ã£ãŠããŸããããã€ãã®äŸãèŠãŠã¿ãŸãããã æåã«æãåå§çãªãã®ïŒ
ããŒã¿ã»ããFacebookUsersã®$ãŠãŒã¶ãŒçš
ããã§ã$ user.id = 8
$ãŠãŒã¶ãŒãè¿ã
FacebookUsersã³ã¬ã¯ã·ã§ã³ãéžæãããšãããããã¯Mongoãšåçã§ãïŒdb.FacebookUsers.findïŒ{"id"ïŒ8}ïŒ
ããå€ãã®èœæžãããããŸãããããã¯åçŽãªã¯ãšãªçšã§ãã ããªããå§ãŸããšããªã¯ãšã¹ãã®æŽçããã£ãšç°¡åã«ãªããŸãã
ãªã¯ãšã¹ãã¯ããèå³æ·±ããã®ã«ãªããŸãããããã§ãçµåãå®è¡ããåºåã«æ°ããããŒã¿åãäœæããŸãã
ããŒã¿ã»ããFacebookUsersã®$ãŠãŒã¶ãŒçš
ããŒã¿ã»ããFacebookMesââsagesã®$ã¡ãã»ãŒãž
ããã§ã$ message.author-id = $ user.id
åž°ã
{
ãunameãïŒ$ user.nameã
ãã¡ãã»ãŒãžãïŒ$ message.message
};
ãã¹ãŠãæãããªããã§ãããïŒ çµåæ¡ä»¶ãèšå®ãããŠãŒã¶ãŒ/ã¡ãã»ãŒãžã®ãã¢ãä»ããŠå®è¡ããå Žåãreturnã¯unameããã³messageãã£ãŒã«ããå«ãæ°ããJSONãªããžã§ã¯ããäœæããŸãã
次ã«ãunameãã£ãŒã«ãã䜿çšããŠã1人ã®ãŠãŒã¶ãŒã®ãã¹ãŠã®ã¡ãã»ãŒãžã1ã€ã®JSONãªããžã§ã¯ãã«ã°ã«ãŒãåããŸãã
ããŒã¿ã»ããFacebookUsersã®$ãŠãŒã¶ãŒçš
let $ messagesïŒ=
ããŒã¿ã»ããFacebookMesââsagesã®$ã¡ãã»ãŒãž
ããã§ã$ message.author-id = $ user.id
$ message.messageãè¿ããŸã
åž°ã
{
ãunameãïŒ$ user.nameã
ãã¡ãã»ãŒãžãïŒ$ã¡ãã»ãŒãž
};
ããã§ããµãã¯ãšãªãletã«å€æŽãããã¹ãŠã®ãŠãŒã¶ãŒã¡ãã»ãŒãžã®ãªã¹ãã$ messageså€æ°ã«å²ãåœãŠãŸããã åãããšãå®çŸããå¥ã®ãªãã·ã§ã³ïŒ
ããŒã¿ã»ããFacebookUsersã®$ãŠãŒã¶ãŒçš
åž°ã
{
ãunameãïŒ$ user.nameã
ãã¡ãã»ãŒãžãïŒ
ããŒã¿ã»ããFacebookMesââsagesã®$ã¡ãã»ãŒãž
ããã§ã$ message.author-id = $ user.id
$ message.messageãè¿ããŸã
};
å人çã«ã¯ããªã¯ãšã¹ãã®2çªç®ã®åœ¢åŒã®æ¹ã奜ãã§ããããŒã¿ããäºåã«ãæºåããŠãªããžã§ã¯ãã«æ¿å
¥ãã代ããã«ãããã«ãã¹ããããåŒãèšè¿°ããŸãã
AQLã«ã¯GroupByã³ã³ã¹ãã©ã¯ãããããŸãããå®éã«ã¯ãã¹ããããã¯ãšãªã«çœ®ãæããããŠãããå¿
èŠã§ã¯ãããŸããïŒãã ããã¢ããããã°äŸ¿å©ã§ãïŒã äžæ¹ãGroupByã䜿çšãããšã¯ãšãªã®æé©åãåäžããå¯èœæ§ãæãé«ããªããŸãããããã¯ãã§ã«å¹çã®åé¡ã§ãã
å®éãAQLã®åºæ¬ã«ã€ããŠèª¬æããŸãããæåŸã®ã¯ãšãªãäœæããŸãã
ããŒã¿ã»ããTwitterUsersã®$ãŠãŒã¶ãŒçš
$ user.nameã§åºå¥
$ user.followers_count descã«ãã泚æ
å¶é2
$ãŠãŒã¶ãŒãè¿ã
ããã§ã¯ãããã€ãã®æšæºSQLããããäžåºŠã«èŠãããšãã§ããŸã-æ確ãªã䞊ã¹æ¿ããå¶éã ãªã¯ãšã¹ããäœãããŠããã®ãã¯æããã§ãããŸãããŠãŒã¶ãŒåã§éè€ãåé€ãã䞊ã¹æ¿ããæåã®2ã€ã®å€ãè¿ããçµæãäœæããŸãã
äœãå¿ããŸãããïŒ éèšïŒ ããã§ã¯ãã¹ãŠãéåžžã«ç°¡åã§ã-éèšã¯ãå€ã®ãªã¹ããå
¥åãšããŠåãåãAQLã®åãªãéåžžã®é¢æ°ã§ãã AsterixDBã«ã¯ãããªãã¿ã®ãã¹ãŠã®éèšãå«ãŸããåæã«2ã€ã®ããŒãžã§ã³ããããŸããå®å
šã«SQLãšäºææ§ãããããã人éçã§ãïŒSQLã¯éèšå
ã§NULLãåŠçããæ¹æ³ãèŠããŠããŸããïŒïŒ ãããŠãã¡ãããèªåã§æžãããšãã§ããŸãã
AsterixDBã§ä»ã«è¯ãããšã¯äœã§ããïŒ ã¯ãšãªåŠçã·ã¹ãã ã®åºç€ã§ããAlgebrixã¬ã€ã€ãŒã¯ãå°æ¥çã«åæ£DBMSåãã®é«å質ãªã³ã¹ãããŒã¹ã®ã¯ãšãªãªããã£ãã€ã¶ãŒãäœæã§ããæè»ãªä»£æ°ã·ã¹ãã ã§ãã æé©åã¯éçºã®åæ段éã«ãããŸãããã€ã³ããã¯ã¹ã¯é©åã«éžæãããŠããããã§ãããçµ±èšæ
å ±ãšå®éã®æé©åã¯ãŸã ãããŸããïŒãã ããã¯ãšãªã®ãã³ãã«ãã£ãŠèš±å®¹å¯èœãªçµæãââåŸãããšãã§ããŸãïŒã Indeskã«ãããã€ãã®ã¿ã€ãããããŸã-BããªãŒãããŒã¯ãŒã-å
šææ€çŽ¢çšã®ã€ã³ããŒããããªã¹ãããžãªã¡ããªçšã®RããªãŒãåæ§ã®æ€çŽ¢çšã®n-gramã
AsterixDBã¯Javaã§èšè¿°ãããŠããŸããPythonãæãã人ã®ããã«ãJavaãŸãã¯Jythonã®ããããã«UDFïŒãŠãŒã¶ãŒå®çŸ©é¢æ°ïŒãè¿œå ã§ããŸãã
Asterixã®äžè²«æ§ã¯ãã匱ããMongoDBã®ããã«ãåã
ã®ããã¥ã¡ã³ãã®ã¬ãã«ã§ACIDã䜿çšãããŸãã äžé£ã®ããã¥ã¡ã³ããŸãã¯ã³ã¬ã¯ã·ã§ã³ã«åœ±é¿ãããã©ã³ã¶ã¯ã·ã§ã³ãµããŒããã©ã³ã¯ãããŸããã ã¯ããããã¯ãã¹ãŠã®äººã«åã£ãŠããããã§ãã
ããŠãä»ãååãšããŠãMongoDBããããäžè¬çãªãã©ãããã©ãŒã ã«ç§»è¡ããããšãå¯èœã«ãªããšããåžæã®ç«è±ãé¡ã£ãŠããŸããã·ãŒããããéçºè
ãæŠãã®ãåŸ
ã€ãŸã§æ®ããŸãã
ãŸã å®äºããŠããªããã®ã¯äœã§ããïŒ
ãã©ãŒã«ããã¬ã©ã³ã¹ãåããçã®ã¬ããªã±ãŒã·ã§ã³ã¯ãŸã å®äºããŠããŸããã APIã䜿çšããããŒã¿ããŒã¹ããã®çµæã®ã¹ããªãŒãã³ã°ã¯ãããŸããïŒããã§åé¡ã¯ãããŸããããå€éšãªã¯ãšã¹ãã®å Žåãã·ã¹ãã ã¯çµæå
šäœãèªåçšã«ãæºåãããREST APIã䜿çšããŠè¿ããŸãïŒã ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã¯ãŸã ãããŸããã çµ±èšã®åéããå§ããŠãã¯ãšãªã®æé©åã«é¢ããå€ãã®äœæ¥ãæ®ã£ãŠããŸãã ãŸããããããå°ããªã¿ã¹ã¯ã®æµ·ã
ãããã£ãŠãå芳è
ãåŸ
ã¡ãããªãå Žåã¯ãè¢ããŸããäžããŠããã®ã¯ãŒã«ãªããšãçµããããã®ãæäŒãããšãã§ããŸãã
Asterix DBMS