çŸä»£ã®æ å ±ã·ã¹ãã ã¯éåžžã«è€éã§ãã ãšãããããã®è€éãã¯ãããã§åŠçãããããŒã¿ã®è€éãã«ãããã®ã§ãã ããŒã¿ã®è€éãã¯ã䜿çšãããããŒã¿ ã¢ãã«ã®å€æ§æ§ã«äŸåããããšããããããŸãã ãããã£ãŠãããšãã°ãããŒã¿ãã倧ããããªããšããã®é (ãããªã¥ãŒã ã) ã ãã§ãªãããã®å€æ§æ§ (ãå€æ§æ§ã) ãåé¡ãšãªãç¹æ§ã® XNUMX ã€ã«ãªããŸãã
æšè«ã«æ¬ é¥ããŸã èŠã€ãããªãå Žåã¯ãèªã¿ç¶ããŠãã ããã
å€èšèªæ°žç¶æ§
äžèšã®ããšãããå Žåã«ãã£ãŠã¯ XNUMX ã€ã®ã·ã¹ãã ã®ãã¬ãŒã ã¯ãŒã¯å
ã§ãã£ãŠããããŒã¿ãä¿åãããã®åŠçã«é¢ããããŸããŸãªåé¡ã解決ããããã«ããããããç¬èªã®ããŒã¿ ã¢ãã«ããµããŒãããè€æ°ã®ç°ãªã DBMS ã䜿çšããå¿
èŠããããšããäºå®ãçããŸãã M.ãã¡ãŠã©ãŒã®è»œãæã§ã
Fowler æ°ã¯ãé»ååååŒã®åéã§ãã«æ©èœã®é«è² è·ã¢ããªã±ãŒã·ã§ã³ã§ããŒã¿ ã¹ãã¬ãŒãžãæŽçãã次ã®äŸã瀺ããŠããŸãã
ãã¡ããããã®äŸã¯å€å°èªåŒµãããŠããŸããã察å¿ããç®çã«å¿ã㊠XNUMX ã€ãŸãã¯å¥ã® DBMS ãéžæããããšãæ¯æããèæ
®äºé
ãããã€ããããŸããããšãã°ã次ã®ãšããã§ãã
ãã®ãããªåç©åã§äœ¿çšäººã«ãªãã®ã¯ç°¡åã§ã¯ãªãããšã¯æããã§ãã
- ããŒã¿ ã¹ãã¬ãŒãžãå®è¡ããã³ãŒãã®éã¯ã䜿çšããã DBMS ã®æ°ã«æ¯äŸããŠå¢å ããŸãã ããŒã¿ãåæããã³ãŒãã®éã¯ããã®æ°å€ã® XNUMX ä¹ã«æ¯äŸããªãå Žåã§ãåé¡ãããŸããã
- 䜿çšãã DBMS ã®æ°ã®åæ°ã«å¿ããŠã䜿çšããå DBMS ã®ãšã³ã¿ãŒãã©ã€ãºç¹æ§ (ã¹ã±ãŒã©ããªãã£ããã©ãŒã«ã ãã¬ã©ã³ã¹ãé«å¯çšæ§) ãæäŸããã³ã¹ããå¢å ããŸãã
- ã¹ãã¬ãŒãž ãµãã·ã¹ãã å šäœã®ãšã³ã¿ãŒãã©ã€ãºç¹æ§ãç¹ã«ãã©ã³ã¶ã¯ã·ã§ã³æ§ãä¿èšŒããããšã¯äžå¯èœã§ãã
åç©åã®åé·ã®èŠç¹ããèŠããšããã¹ãŠã¯æ¬¡ã®ããã«ãªããŸãã
- DBMS ã¡ãŒã«ãŒããã®ã©ã€ã»ã³ã¹ãšãã¯ãã«ã« ãµããŒãã®ã³ã¹ããåå¢ããŸãã
- 人å¡éå°ãšçŽæã®å¢å ã
- ããŒã¿ã®äžäžèŽã«ããçŽæ¥çãªçµæžçæ倱ãŸãã¯çœ°éã
ã·ã¹ãã ã®ç·ææã³ã¹ã (TCO) ãå€§å¹ ã«å¢å ããŠããŸãã ãè€æ°ã®ã¹ãã¬ãŒãžãªãã·ã§ã³ãã®ç¶æ³ããæãåºãæ¹æ³ã¯ããã®ã§ãããã?
ãã«ãã¢ãã«
ãå€å€éã¹ãã¬ãŒãžããšããçšèªã¯ 2011 幎ã«äœ¿çšããå§ããŸããã ãã®ã¢ãããŒãã®åé¡ç¹ã®èªèãšè§£æ±ºçã®æš¡çŽ¢ã«ã¯æ°å¹Žãããã2015 幎ãŸã§ã«ãGartner ã¢ããªã¹ãã®å£ãããã®çããå®åŒåãããŸããã
- ããã
NoSQL DBMS ã®ããŒã±ãã ã¬ã€ã - 2015 »ïŒ
DBMSããã®ã¢ãŒããã¯ãã£ãããã³ãã®äœ¿çšæ¹æ³ã®å°æ¥ã¯ãã«ãã¢ãã«ã§ãã
- ããã
ODBMS ã®ããžã㯠ã¯ã¢ãã©ã³ã - 2016 »ïŒ
äž»èŠãªãªãã¬ãŒã·ã§ãã« DBMS ã¯ãåäžãã©ãããã©ãŒã ã®äžéšãšããŠè€æ°ã®ã¢ãã« (ãªã¬ãŒã·ã§ãã«ããã³éãªã¬ãŒã·ã§ãã«) ãæäŸããŸãã
ä»åã¯Gartnerã®ã¢ããªã¹ãã®äºæ³ãæ£ããã£ãããã ã ãšããããŒãžã«è¡ããšã
以äžã®è¡šã¯ããã«ãã¢ãã«ã§ãããšäž»åŒµããåæ°éè©äŸ¡ã®ãªãŒããŒã§ãã DBMS ã瀺ããŠããŸãã å DBMS ã«ã€ããŠãå ã®ãµããŒããããŠããã¢ãã« (ãã€ãŠã¯å¯äžã®ã¢ãã«ã§ãã) ãšãçŸåšãµããŒããããŠããã¢ãã«ã衚瀺ãããŸãã ãŸããèªèº«ããå ã ã¯ãã«ãã¢ãã«ããšããŠäœçœ®ä»ããŠãããäœæè ã«ããã°ãåæç¶æ¿ã¢ãã«ãæããªã DBMS ããªã¹ããããŠããŸãã
DBMS | åæã¢ãã« | è¿œå ã¢ãã« |
---|---|---|
ãªã©ã¯ã« | é¢é£ãã | ã°ã©ããããã¥ã¡ã³ã |
MS SQL | é¢é£ãã | ã°ã©ããããã¥ã¡ã³ã |
PostgreSQL | é¢é£ãã | ã°ã©ã*ãããã¥ã¡ã³ã |
MarkLogic | ããã¥ã¡ã³ã¿ãªãŒ | ã°ã©ãããªã¬ãŒã·ã§ãã« |
MongoDBã® | ããã¥ã¡ã³ã¿ãªãŒ | Key-Valueãã°ã©ã* |
DataStax | ã¯ã€ãã«ã©ã | ããã¥ã¡ã³ã¿ãªãŒãã°ã©ã |
Redisã® | ããŒãšå€ | ããã¥ã¡ã³ã¿ãªãŒãã°ã©ã* |
ã¢ã©ã³ãŽDB | - | ã°ã©ããããã¥ã¡ã³ã |
OrientDB | - | ã°ã©ããããã¥ã¡ã³ãããªã¬ãŒã·ã§ãã« |
ã¢ãºãŒã« ã³ã¹ã¢ã¹DB | - | ã°ã©ããããã¥ã¡ã³ãããªã¬ãŒã·ã§ãã« |
ããŒãã«ãžã®æ³šæ
è¡šå ã®ã¢ã¹ã¿ãªã¹ã¯ã¯ãäºçŽãå¿ èŠãªã¹ããŒãã¡ã³ãã瀺ããŠããŸãã
- PostgreSQL DBMS ã¯ã°ã©ã ããŒã¿ ã¢ãã«ããµããŒãããŠããŸãããããã®è£œåã¯ã°ã©ã ããŒã¿ ã¢ãã«ããµããŒãããŠããŸãã
ããã«åºã¥ã㊠ãAgensGraph ãªã©ã - MongoDB ã«é¢é£ããŠãã¯ãšãªèšèªã«ãããã°ã©ãæŒç®åã®ååšã«ã€ããŠè©±ãã®ãããæ£ç¢ºã§ã (
,$lookup
ïŒã°ã©ã ã¢ãã«ã®ãµããŒããããéèŠã§ããããã¡ããããããã®å°å ¥ã«ã¯ãã°ã©ã ã¢ãã«ããµããŒãããæ¹åã§ç©çã¹ãã¬ãŒãž ã¬ãã«ã§ã®æé©åãå¿ èŠã§ããã$graphLookup
- Redis ã«é¢ããŠèšãã°ãæ¡åŒµæ©èœãæå³ããŸãã
Redisã°ã©ã .
次ã«ãåã¯ã©ã¹ã«ã€ããŠãããã€ãã®ã¢ãã«ã®ãµããŒãããã®ã¯ã©ã¹ãã DBMS ã«ã©ã®ããã«å®è£ ããããã瀺ããŸãã ãªã¬ãŒã·ã§ãã«ãããã¥ã¡ã³ããã°ã©ã ã¢ãã«ãæãéèŠã§ãããšèããç¹å®ã® DBMS ã®äŸã䜿çšããŠããæ¬ ããŠãããã®ããã©ã®ããã«å®è£ ããããã瀺ããŸãã
ãªã¬ãŒã·ã§ãã«ã¢ãã«ã«åºã¥ããã«ãã¢ãã«DBMS
çŸåšãäž»èŠãª DBMS ã¯ãªã¬ãŒã·ã§ãã«ã§ãããããRDBMS ããã«ãã¢ããªã³ã°ã®æ¹åãžã®åãã瀺ããªããã°ãGartner ã®äºæž¬ã¯çå®ã§ãããšã¯èããããŸããã ãããŠåœŒãã¯ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãããŸãã ãã«ãã¢ãã« DBMS ã¯äœãããŸãã§ããªãã¹ã€ã¹ãã€ãã®ãããªãã®ã§ãããšããèãã¯ãLarry Ellison ã«çŽæ¥åœãŠãããŸãã
ãã ããèè 㯠Microsoft SQL Server ã§ã®ãã«ãã¢ããªã³ã°ã®å®è£ ã奜ã¿ãŸãããã®äŸã«ã€ããŠã¯ãããã¥ã¡ã³ã ã¢ãã«ãšã°ã©ã ã¢ãã«ã® RDBMS ãµããŒãã«ã€ããŠèª¬æããŸãã
MS SQL Serverã®ããã¥ã¡ã³ãã¢ãã«
MS SQL Server ãããã¥ã¡ã³ã ã¢ãã«ã®ãµããŒããå®è£ ããæ¹æ³ã«ã€ããŠã¯ãHabré ã«é¢ããåªããèšäºã XNUMX ã€ãã§ã«ãããŸãããããã§ã¯ç°¡åãªå話ãšè§£èª¬ã«éå®ããŸãã
MS SQL Server ã§ããã¥ã¡ã³ã ã¢ãã«ããµããŒãããæ¹æ³ã¯ããªã¬ãŒã·ã§ãã« DBMS ã§ã¯éåžžã«äžè¬çã§ããJSON ããã¥ã¡ã³ãã¯ãéåžžã®ããã¹ã ãã£ãŒã«ãã«æ ŒçŽãããããšãææ¡ãããŠããŸãã ããã¥ã¡ã³ã ã¢ãã«ã®ãµããŒãã¯ããã® JSON ã解æããããã®ç¹å¥ãªæŒç®åãæäŸããããšã§ãã
ã¹ã«ã©ãŒå±æ§å€ãæœåºããã«ã¯ãJSON_VALUE
ãµãããã¥ã¡ã³ããæœåºããŸããJSON_QUERY
äž¡æ¹ã®æŒç®åã® XNUMX çªç®ã®åŒæ°ã¯ãJSONPath ã®ãããªæ§æã®åŒã§ãã
æœè±¡çã«ã¯ããã®æ¹æ³ã§ä¿åãããããã¥ã¡ã³ãã¯ãã¿ãã«ãšã¯ç°ãªãããªã¬ãŒã·ã§ãã« DBMS ã®ããã¡ãŒã¹ãã¯ã©ã¹ã®ãšã³ãã£ãã£ãã§ã¯ãªããšèšããŸãã å ·äœçã«ã¯ãMS SQL Server ã«ã¯çŸåšãJSON ããã¥ã¡ã³ãã®ãã£ãŒã«ãã«ã€ã³ããã¯ã¹ãååšããªãããããããã®ãã£ãŒã«ãã®å€ã䜿çšããŠããŒãã«ãçµåãããããããã®å€ã䜿çšããŠããã¥ã¡ã³ããéžæãããããããšããå°é£ã«ãªããŸãã ãã ãããã®ãããªãã£ãŒã«ãã«å¯ŸããŠèšç®åãäœæãããã®åã«ã€ã³ããã¯ã¹ãäœæããããšã¯å¯èœã§ãã
ããã«ãMS SQL Server ã¯ãæŒç®åã䜿çšããŠããŒãã«ã®å
容ãã JSON ããã¥ã¡ã³ããç°¡åã«æ§ç¯ããæ©èœãæäŸããŸãã FOR JSON PATH
æåŸã«ãMS SQL Server ã䜿çšãããšãããã¥ã¡ã³ãæ§ç¯ã®éã®åé¡ã解決ã§ããŸãã次ã䜿çšã㊠JSON ãããŒãã«ã«å解ã§ããŸãã OPENJSON
CROSS APPLY
.
MS SQL Serverã®ã°ã©ãã¢ãã«
ã°ã©ã (LPG) ã¢ãã«ã®ãµããŒãã Microsoft SQL Server ã«å®å
šã«å®è£
ãããŠããŸã CREATE TABLE AS NODE
О CREATE TABLE AS EDGE
ããããã
æåã®ã¿ã€ãã®ããŒãã«ã¯ãã¬ã³ãŒããæ ŒçŽããããã®éåžžã®ããŒãã«ã«äŒŒãŠããŸãããå¯äžã®å€éšçãªéãã¯ãããŒãã«ã«ã·ã¹ãã ãã£ãŒã«ããå«ãŸããŠããããšã§ãã $node_id
â ããŒã¿ããŒã¹å
ã®ã°ã©ã ããŒãã®äžæã®èå¥åã
åæ§ã«ãXNUMX çªç®ã®ã¿ã€ãã®ããŒãã«ã«ã¯ã·ã¹ãã ãã£ãŒã«ãããããŸãã $from_id
О $to_id
ããã®ãããªããŒãã«ã®ãšã³ããªã¯ãããŒãéã®æ¥ç¶ãæ確ã«å®çŸ©ããŸãã åã¿ã€ãã®é¢ä¿ãä¿åããããã«å¥åã®ããŒãã«ã䜿çšãããŸãã
ãããäŸã§èª¬æããŠã¿ãŸãããã ã°ã©ãããŒã¿ãå³ã®ãããªã¬ã€ã¢ãŠãã«ããŸãã 次ã«ãããŒã¿ããŒã¹ã«å¯Ÿå¿ããæ§é ãäœæããã«ã¯ã次㮠DDL ã¯ãšãªãå®è¡ããå¿ èŠããããŸãã
CREATE TABLE Person (
ID INTEGER NOT NULL,
name VARCHAR(100)
) AS NODE;
CREATE TABLE Cafe (
ID INTEGER NOT NULL,
name VARCHAR(100),
) AS NODE;
CREATE TABLE likes (
rating INTEGER
) AS EDGE;
CREATE TABLE friendOf
AS EDGE;
ALTER TABLE likes
ADD CONSTRAINT EC_LIKES CONNECTION (Person TO Cafe);
ãã®ãããªããŒãã«ã®äž»ãªç¹åŸŽã¯ãããŒãã«ã«å¯Ÿããã¯ãšãªã§ãCypher ã®ãããªæ§æã§ã°ã©ã ãã¿ãŒã³ã䜿çšã§ããããšã§ã (ãã ããã*
ããªã©ã¯ãŸã ãµããŒããããŠããŸããïŒã ããã©ãŒãã³ã¹æž¬å®ã«åºã¥ããŠããããã®ããŒãã«ã«ããŒã¿ãæ ŒçŽãããæ¹æ³ã¯ãéåžžã®ããŒãã«ã«ããŒã¿ãæ ŒçŽãããæ¹æ³ãšã¯ç°ãªãããã®ãããªã°ã©ã ã¯ãšãªã®å®è¡ã«æé©åãããŠãããšæ³å®ããããšãã§ããŸãã
SELECT Cafe.name
FROM Person, likes, Cafe
WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
AND Person.name = 'John';
ããã«ããã®ãããªããŒãã«ãæäœãããšãã«ãããã®ã°ã©ã ãã¿ãŒã³ã䜿çšããªãããšã¯éåžžã«å°é£ã§ããéåžžã® SQL ã¯ãšãªã§åæ§ã®åé¡ã解決ããã«ã¯ãã·ã¹ãã ã®ãã°ã©ããããŒãèå¥åãååŸããããã«è¿œå ã®åªåãå¿
èŠã«ãªãããã§ã ($node_id
, $from_id
, $to_id
; åæ§ã®çç±ã§ãããŒã¿ãæ¿å
¥ããã¯ãšãªã¯äžå¿
èŠã«ç
©éã«ãªããããããã§ã¯ç€ºããŠããŸãã)ã
MS SQL Server ã«ãããããã¥ã¡ã³ã ã¢ãã«ãšã°ã©ã ã¢ãã«ã®å®è£ ã®èª¬æãèŠçŽãããšãäž»ã«èšèªèšèšã®èŠ³ç¹ãããããã¢ãã«ãå¥ã®ã¢ãã«ã®äžã«éããŠå®è£ ããããšã¯æåããŠããããã«ã¯èŠããªãããšã«æ³šæããŠãã ããã ããèšèªãå¥ã®èšèªã§æ¡åŒµããå¿ èŠããããŸãããèšèªã¯å®å šã«ãçŽäº€ãã§ã¯ãªããäºææ§ã«ãŒã«ãéåžžã«å¥åŠãªå ŽåããããŸãã
ããã¥ã¡ã³ãã¢ãã«ã«åºã¥ããã«ãã¢ãã«DBMS
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãããã¥ã¡ã³ã DBMS ã®äžã§æã人æ°ã®ãªã MongoDB ã®äŸã䜿çšããŠãããã¥ã¡ã³ã DBMS ã§ã®ãã«ãã¢ãã«ã®å®è£
ã説æããããšæããŸã (åè¿°ããããã«ãæ¡ä»¶ä»ãã°ã©ãæŒç®åãããããŸãã) $lookup
О $graphLookup
ãã·ã£ãŒãåãããã³ã¬ã¯ã·ã§ã³ã§ã¯åäœããŸãã)ãããæçããããšã³ã¿ãŒãã©ã€ãºãDBMS ã®äŸã䜿çšããŸãã
ãããã£ãŠãã³ã¬ã¯ã·ã§ã³ã«ã¯æ¬¡ã®ã¿ã€ãã® XML ããã¥ã¡ã³ãã®ã»ãããå«ãŸããŸã (MarkLogic ã§ã¯ JSON ããã¥ã¡ã³ããä¿åããããšãã§ããŸã)ã
<Person INN="631803299804">
<name>John</name>
<surname>Smith</surname>
</Person>
MarkLogicã®ãªã¬ãŒã·ã§ãã«ã¢ãã«
ããã¥ã¡ã³ãã®ã³ã¬ã¯ã·ã§ã³ã®ãªã¬ãŒã·ã§ãã« ãã¥ãŒã¯ã次ã䜿çšããŠäœæã§ããŸãã value
以äžã®äŸã§ã¯ãä»»æã® XPath ã䜿çšã§ããŸã)ã
<template >
<context>/Person</context>
<rows>
<row>
<view-name>Person</view-name>
<columns>
<column>
<name>SSN</name>
<value>@SSN</value>
<type>string</type>
</column>
<column>
<name>name</name>
<value>name</value>
</column>
<column>
<name>surname</name>
<value>surname</value>
</column>
</columns>
</row>
<rows>
</template>
äœæããããã¥ãŒã¯ãSQL ã¯ãšãª (ããšãã°ãODBC çµç±) ã§ã¢ãã¬ã¹æå®ã§ããŸãã
SELECT name, surname FROM Person WHERE name="John"
æ®å¿µãªããã衚瀺ãã³ãã¬ãŒãã«ãã£ãŠäœæããããªã¬ãŒã·ã§ãã« ãã¥ãŒã¯èªã¿åãå°çšã§ãã ãªã¯ãšã¹ããåŠçããéãMarkLogic ã¯æ¬¡ã®äœ¿çšãè©Šã¿ãŸãã
MarkLogicã®ã°ã©ãã¢ãã«
ã°ã©ã (RDF) ã¢ãã«ã®ãµããŒãã«ããããã¹ãŠãã»ãŒåãã«ãªããŸãã ãŸããŸãå©ããåããŠ
<template >
<context>/Person</context>
<vars>
<var>
<name>PREFIX</name>
<val>"http://example.org/example#"</val>
</var>
</vars>
<triples>
<triple>
<subject><value>sem:iri( $PREFIX || @SSN )</value></subject>
<predicate><value>sem:iri( $PREFIX || surname )</value></predicate>
<object><value>xs:string( surname )</value></object>
</triple>
<triple>
<subject><value>sem:iri( $PREFIX || @SSN )</value></subject>
<predicate><value>sem:iri( $PREFIX || name )</value></predicate>
<object><value>xs:string( name )</value></object>
</triple>
</triples>
</template>
çµæãšããŠåŸããã RDF ã°ã©ãã¯ãSPARQL ã¯ãšãªã䜿çšããŠåŠçã§ããŸãã
PREFIX : <http://example.org/example#>
SELECT ?name ?surname {
:631803299804 :name ?name ; :surname ?surname .
}
ãªã¬ãŒã·ã§ãã« ã¢ãã«ãšã¯ç°ãªããMarkLogic ã¯ä»ã® XNUMX ã€ã®æ¹æ³ã§ã°ã©ã ã¢ãã«ããµããŒãããŸãã
- DBMS ã¯ãRDF ããŒã¿ã®æ¬æ Œçãªå¥åã®ã¹ãã¬ãŒãžã«ãªããŸã (ãã®äžã®ããªãã¬ãã㯠ãšåŒã°ããŸã)ã
ãããŒãžã äžèšã®ãã®ãšã¯å¯Ÿç §çã«æããã ). - ç¹å¥ãªã·ãªã¢ã«åã® RDF ã¯ãXML ãŸã㯠JSON ããã¥ã¡ã³ãã«ç°¡åã«æ¿å
¥ã§ããŸã (ãã®åŸãããªãã¬ãããåŒã³åºãããŸã)
管çãããŠããªã ïŒã ããã¯ããããã¡ã«ããºã ã®ä»£æ¿æ段ã§ãidref
ç
MarkLogic ã§ç©äºããå®éã«ãã©ã®ããã«æ©èœãããã«ã€ããŠã®è¯ãã¢ã€ãã¢ã¯ã次ã®ãšããã§ãã
ãã¡ã€ã³ã¢ãã«ãæããªãããã«ãã¢ãã«DBMS
åžå Žã«ã¯ãç¶æ¿ãããã¡ã€ã³ ã¢ãã«ãæãããåœåã¯ãã«ãã¢ãã«ãšããŠäœçœ®ä»ããããŠãã DBMS ããããŸãã ãããã«ã¯ä»¥äžãå«ãŸããŸã
å®éãArangoDB ãš OrientDB ã«ã¯ãã³ã¢ãã¢ãã«ããããŸãã ã©ã¡ãã®å Žåãããããã¯ç¬èªã®ããŒã¿ ã¢ãã«ã§ãããããã¥ã¡ã³ã XNUMX ãäžè¬åãããã®ã§ãã äžè¬åã¯äž»ã«ãã°ã©ããšãªã¬ãŒã·ã§ãã«ã®æ§è³ªã®ã¯ãšãªãå®è¡ã§ããããã«ããããšãç®çãšããŠããŸãã
ãããã®ã¢ãã«ã¯ãæå®ããã DBMS ã§äœ¿çšã§ããå¯äžã®ã¢ãã«ã§ãããç¬èªã®ã¯ãšãªèšèªã¯ããããšé£æºããããã«èšèšãããŠããŸãã ãã¡ããããã®ãããªã¢ãã«ã DBMS ã¯ææã§ãããæšæºã¢ãã«ãèšèªãšã®äºææ§ããªãããããããã® DBMS ãã¬ã¬ã·ãŒ ã·ã¹ãã ã§äœ¿çšããããšãã€ãŸãããã§æ¢ã«äœ¿çšãããŠãã DBMS ã眮ãæããããšã¯äžå¯èœã«ãªããŸãã
Habré ã«ã¯ãArangoDB ãš OrientDB ã«é¢ããçŽ æŽãããèšäºããã§ã«ãããŸããã
ã¢ã©ã³ãŽDB
ArangoDB ã¯ã°ã©ã ããŒã¿ ã¢ãã«ã®ãµããŒãã䞻匵ããŠããŸãã
ArangoDB ã®ã°ã©ãã®ããŒãã¯éåžžã®ããã¥ã¡ã³ãã§ããããšããžã¯éåžžã®ã·ã¹ãã ãã£ãŒã«ããšãšãã« (_key
, _id
, _rev
) ã·ã¹ãã ãã£ãŒã«ã _from
О _to
ã ããã¥ã¡ã³ã DBMS å
ã®ããã¥ã¡ã³ãã¯ãäŒçµ±çã«ã³ã¬ã¯ã·ã§ã³ã«çµåãããŸãã ãšããžãè¡šãããã¥ã¡ã³ãã®ã³ã¬ã¯ã·ã§ã³ã¯ãArangoDB ã§ã¯ãšããž ã³ã¬ã¯ã·ã§ã³ãšåŒã°ããŸãã ã¡ãªã¿ã«ããšããžã³ã¬ã¯ã·ã§ã³ããã¥ã¡ã³ããããã¥ã¡ã³ããªã®ã§ãArangoDBã®ãšããžãããŒããšããŠæ©èœããŸãã
åæããŒã¿
ã³ã¬ã¯ã·ã§ã³ãããŸããã persons
ãããã¥ã¡ã³ãã¯æ¬¡ã®ããã«ãªããŸãã
[
{
"_id" : "people/alice" ,
"_key" : "alice" ,
"name" : "ÐлОÑа"
},
{
"_id" : "people/bob" ,
"_key" : "bob" ,
"name" : "ÐПб"
}
]
ã³ã¬ã¯ã·ã§ã³ããããŠãã ãã cafes
:
[
{
"_id" : "cafes/jd" ,
"_key" : "jd" ,
"name" : "ÐжПМ ÐПММ"
},
{
"_id" : "cafes/jj" ,
"_key" : "jj" ,
"name" : "ÐаМ-Ðак"
}
]
ããããã³ã¬ã¯ã·ã§ã³ likes
ãã®ããã«èŠãããããããŸããïŒ
[
{
"_id" : "likes/1" ,
"_key" : "1" ,
"_from" : "persons/alice" ,
"_to" : "cafes/jd",
"since" : 2010
},
{
"_id" : "likes/2" ,
"_key" : "2" ,
"_from" : "persons/alice" ,
"_to" : "cafes/jj",
"since" : 2011
} ,
{
"_id" : "likes/3" ,
"_key" : "3" ,
"_from" : "persons/bob" ,
"_to" : "cafes/jd",
"since" : 2012
}
]
ã¯ãšãªãšçµæ
ArangoDB ã§äœ¿çšããã AQL èšèªã®ã°ã©ã ã¹ã¿ã€ã« ã¯ãšãªã¯ã誰ãã©ã®ã«ãã§ã奜ããã«é¢ããæ å ±ã人éãå€èªã§ãã圢åŒã§è¿ããŸããããã¯æ¬¡ã®ããã«ãªããŸãã
FOR p IN persons
FOR c IN OUTBOUND p likes
RETURN { person : p.name , likes : c.name }
é¢ä¿ãä¿åããã®ã§ã¯ãªããèšç®ããããªã¬ãŒã·ã§ãã« ã¹ã¿ã€ã«ã§ã¯ããã®ã¯ãšãªã¯æ¬¡ã®ããã«æžãçŽãããšãã§ããŸã (ã¡ãªã¿ã«ãã³ã¬ã¯ã·ã§ã³ã¯äœ¿çšããŸãã) likes
ãªãã§ãã§ããŸã):
FOR p IN persons
FOR l IN likes
FILTER p._key == l._from
FOR c IN cafes
FILTER l._to == c._key
RETURN { person : p.name , likes : c.name }
ã©ã¡ãã®å Žåã§ãçµæã¯åãã«ãªããŸãã
[
{ "person" : "ÐлОÑа" , likes : "ÐаМ-Ðак" } ,
{ "person" : "ÐлОÑа" , likes : "ÐжПМ ÐПММ" } ,
{ "person" : "ÐПб" , likes : "ÐжПМ ÐПММ" }
]
ããã«å€ãã®ã¯ãšãªãšçµæ
äžèšã®çµæ圢åŒãããã¥ã¡ã³ã DBMS ããããªã¬ãŒã·ã§ãã« DBMS ã®æ¹ãäžè¬çã§ãããšæãããå Žåã¯ããã®ã¯ãšãªãè©Šãããšãã§ããŸã (ãŸãã¯ã次ã®ã¯ãšãªã䜿çšã§ããŸã) COLLECT
FOR p IN persons
RETURN {
person : p.name,
likes : (
FOR c IN OUTBOUND p likes
RETURN c.name
)
}
çµæã¯æ¬¡ã®ããã«ãªããŸãã
[
{ "person" : "ÐлОÑа" , likes : ["ÐаМ-Ðак" , "ÐжПМ ÐПММ"] } ,
{ "person" : "ÐПб" , likes : ["ÐжПМ ÐПММ"] }
]
OrientDB
OrientDB ã§ããã¥ã¡ã³ã ã¢ãã«ã®äžã«ã°ã©ã ã¢ãã«ãå®è£
ããããã®åºç€ã¯æ¬¡ã®ãšããã§ãã LINK
, LINKLIST
, LINKSET
, LINKMAP
О LINKBAG
ã ãããã®ã¿ã€ãã®å€ã¯ããžã®ãªã³ã¯ãŸãã¯ãªã³ã¯ã®ã³ã¬ã¯ã·ã§ã³ã§ãã
ã·ã¹ãã ã«ãã£ãŠå²ãåœãŠãããææžèå¥åã«ã¯ãããŒã¿ããŒã¹å
ã®ã¬ã³ãŒãã®äœçœ®ã瀺ããç©ççãªæå³ããããã次ã®ããã«ãªããŸãã @rid : #3:16
ã ãããã£ãŠãåç
§ããããã£ã®å€ã¯å®éã«ã¯ (ãªã¬ãŒã·ã§ãã« ã¢ãã«ã®ãããª) éžææ¡ä»¶ã§ã¯ãªã (ã°ã©ã ã¢ãã«ã®ãããª) ãã€ã³ã¿ãŒã§ãã
ArangoDB ãšåæ§ãOrientDB ã®ãšããžã¯å¥åã®ããã¥ã¡ã³ããšããŠè¡šãããŸã (ãã ãããšããžã«ç¬èªã®ããããã£ããªãå Žåã¯ã
åæããŒã¿
ã«è¿ã圢åŒã§
[
{
"@type": "document",
"@rid": "#11:0",
"@class": "Person",
"name": "ÐлОÑа",
"out_likes": [
"#30:1",
"#30:2"
],
"@fieldTypes": "out_likes=LINKBAG"
},
{
"@type": "document",
"@rid": "#12:0",
"@class": "Person",
"name": "ÐПб",
"out_likes": [
"#30:3"
],
"@fieldTypes": "out_likes=LINKBAG"
},
{
"@type": "document",
"@rid": "#21:0",
"@class": "Cafe",
"name": "ÐаМ-Ðак",
"in_likes": [
"#30:2",
"#30:3"
],
"@fieldTypes": "in_likes=LINKBAG"
},
{
"@type": "document",
"@rid": "#22:0",
"@class": "Cafe",
"name": "ÐжПМ ÐПММ",
"in_likes": [
"#30:1"
],
"@fieldTypes": "in_likes=LINKBAG"
},
{
"@type": "document",
"@rid": "#30:1",
"@class": "likes",
"in": "#22:0",
"out": "#11:0",
"since": 1262286000000,
"@fieldTypes": "in=LINK,out=LINK,since=date"
},
{
"@type": "document",
"@rid": "#30:2",
"@class": "likes",
"in": "#21:0",
"out": "#11:0",
"since": 1293822000000,
"@fieldTypes": "in=LINK,out=LINK,since=date"
},
{
"@type": "document",
"@rid": "#30:3",
"@class": "likes",
"in": "#21:0",
"out": "#12:0",
"since": 1325354400000,
"@fieldTypes": "in=LINK,out=LINK,since=date"
}
]
ã芧ã®ãšãããé ç¹ã«ã¯ãå
¥ã£ãŠãããšããžãšåºãŠãããšããžã«é¢ããæ
å ±ãæ ŒçŽãããŸãã ã§
ã¯ãšãªãšçµæ
OrientDB ã® ArangoDB ã®äŸã®ã¯ãšãªãšç®çã䌌ãŠããã¯ãšãªã¯æ¬¡ã®ããã«ãªããŸãã
SELECT name AS person_name, OUT('likes').name AS cafe_name
FROM Person
UNWIND cafe_name
çµæã¯æ¬¡ã®åœ¢åŒã§ååŸãããŸãã
[
{ "person_name": "ÐлОÑа", "cafe_name": "ÐжПМ ÐПММ" },
{ "person_name": "ÐлОÑа", "cafe_name": "ÐаМ-Ðак" },
{ "person_name": "ÐПб", "cafe_name": "ÐаМ-Ðак" }
]
çµæã®åœ¢åŒãåã³ããªã¬ãŒã·ã§ãã«ãããããšæãããå Žåã¯ã次ã®è¡ãåé€ããå¿
èŠããããŸãã UNWIND()
[
{ "person_name": "ÐлОÑа", "cafe_name": [ "ÐжПМ ÐПММ", "ÐаМ-Ðак" ] },
{ "person_name": "ÐПб", "cafe_name": [ "ÐаМ-Ðак" ' }
]
OrientDB ã®ã¯ãšãªèšèªã¯ãGremlin ã®ãããªæ¿å
¥ãåãã SQL ãšããŠèª¬æã§ããŸãã ããŒãžã§ã³2.2ã§ã¯Cypher颚ã®ãªã¯ãšã¹ããã©ãŒã ãç»å ŽããŸãããã MATCH
MATCH {CLASS: Person, AS: person}-likes->{CLASS: Cafe, AS: cafe}
RETURN person.name AS person_name, LIST(cafe.name) AS cafe_name
GROUP BY person_name
çµæã®åœ¢åŒã¯åã®ãªã¯ãšã¹ããšåãã«ãªããŸãã æåã®ã¯ãšãªã®ããã«ãããããªã¬ãŒã·ã§ãã«ãã«ããããã«äœãåé€ããå¿ èŠãããããèããŠãã ããã
ã¢ãºãŒã« ã³ã¹ã¢ã¹DB
çšåºŠã¯äœãã§ãããArangoDB ãš OrientDB ã«ã€ããŠäžã§è¿°ã¹ãããšã¯ãAzure CosmosDB ã«ãåœãŠã¯ãŸããŸãã CosmosDB ã¯ãSQLãMongoDBãGremlinãCassandra ã®ããŒã¿ ã¢ã¯ã»ã¹ API ãæäŸããŸãã
SQL API ãš MongoDB API ã¯ãããã¥ã¡ã³ã ã¢ãã«å
ã®ããŒã¿ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãããŸãã Gremlin API ãš Cassandra API - ããããã°ã©ã圢åŒãšå圢åŒã®ããŒã¿ã«ã¢ã¯ã»ã¹ããŸãã ãã¹ãŠã®ã¢ãã«ã®ããŒã¿ã¯ãCosmosDB å
éšã¢ãã«åœ¢åŒã§ä¿åãããŸãã
ãã ãããŠãŒã¶ãŒãéžæããããŒã¿ ã¢ãã«ãšäœ¿çšãã API ã¯ããµãŒãã¹ã§ã®ã¢ã«ãŠã³ãäœææã«åºå®ãããŸãã 次ã®ããã«ãããã¢ãã«ã«ããŒããããããŒã¿ã«å¥ã®ã¢ãã«ã®åœ¢åŒã§ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
ãããã£ãŠãä»æ¥ã® Azure CosmosDB ã®ãã«ãã¢ãã«ã¯ãXNUMX ã€ã®ã¡ãŒã«ãŒã®ç°ãªãã¢ãã«ããµããŒãããè€æ°ã®ããŒã¿ããŒã¹ã䜿çšã§ããã ãã§ããããã«ãããªã¢ã³ã ã¹ãã¬ãŒãžã®åé¡ããã¹ãŠè§£æ±ºããããã§ã¯ãããŸããã
ã°ã©ãã¢ãã«ã«åºã¥ããã«ãã¢ãã«DBMS?
泚ç®ãã¹ãã¯ãã°ã©ã ã¢ãã«ã«åºã¥ããã«ãã¢ãã« DBMS ããŸã åžå Žã«ååšããªããšããäºå®ã§ã (ãã ããRDF ãš LPG ãšãã XNUMX ã€ã®ã°ã©ã ã¢ãã«ãåæã«ãµããŒããããã«ãã¢ãã« ãµããŒãã¯é€ããŸããããã«ã€ããŠã¯ãã
ã°ã©ã ã¢ãã«ã®äžã«ãªã¬ãŒã·ã§ãã« ã¢ãã«ãå®è£
ããæ¹æ³ã®åé¡ã¯ãã°ã©ã ã¢ãã«ã®åœ¢æäžã«ãæ€èšãããŸããã ã©ããã£ãŠ
ã°ã©ã ã¢ãããŒãã«ã¯ã(1) éåžžã®ããŒå€ãã¢ããã®ã¿ãã«ã®å埩㚠(2) ã°ã«ãŒãåã«ãããªã¬ãŒã·ã§ãã« ãã¥ãŒãå¯èœã«ãããã°ã©ã ããŒã¿ããŒã¹äžã§ã®ã¬ã€ã€ãŒã®äœæ (ããšãã°ãé©åãªã€ã³ããã¯ã¹ä»ãã«ãã) ã劚ããæ¬è³ªçãªãã®ã¯äœããããŸããããªã¬ãŒã·ã§ã³ã¿ã€ãå¥ã®ã¿ãã«ã
ã°ã©ã ã¢ãã«ã®äžã«ããã¥ã¡ã³ã ã¢ãã«ãå®è£ ããå Žåã¯ãããšãã°æ¬¡ã®ããšã«çæããå¿ èŠããããŸãã
- JSON é åã®èŠçŽ ã¯é åºä»ããããŠãããšèŠãªãããŸãããã°ã©ãã®ãšããžã®é ç¹ããçºããããèŠçŽ ã¯é åºä»ããããŠããŸããã
- ããã¥ã¡ã³ã ã¢ãã«å ã®ããŒã¿ã¯éåžžéæ£èŠåãããŠãããåãåã蟌ã¿ããã¥ã¡ã³ãã®è€æ°ã®ã³ããŒãä¿åããããšã¯æãŸãããªãããµãããã¥ã¡ã³ãã«ã¯éåžžèå¥åããããŸããã
- äžæ¹ãããã¥ã¡ã³ã DBMS ã®ã€ããªãã®ãŒã¯ãããã¥ã¡ã³ãã¯æ¯åæ°ãã«æ§ç¯ããå¿ èŠã®ãªãæ¢æã®ãéåäœãã§ãããšããããšã§ãã å®æããææžã«å¯Ÿå¿ãããµãã°ã©ããè¿ éã«ååŸããæ©èœãã°ã©ã ã¢ãã«ã«æäŸããå¿ èŠããããŸãã
ããã€ãã®åºå
ãã®èšäºã®èè 㯠NitrosBase DBMS ã®éçºã«é¢ä¿ããŠããããã®å éšã¢ãã«ã¯ã°ã©ãã§ãããå€éšã¢ãã« (ãªã¬ãŒã·ã§ãã« ã¢ãã«ãšããã¥ã¡ã³ã) ã¯ãã®è¡šçŸã§ãã ãã¹ãŠã®ã¢ãã«ã¯åçã§ããèªç¶ãªã¯ãšãªèšèªã䜿çšããŠãã»ãŒãã¹ãŠã®ããŒã¿ãã©ã®ã¢ãã«ã§ãå©çšã§ããŸãã ããã«ãã©ã®ãã¥ãŒã§ãããŒã¿ãå€æŽã§ããŸãã å€æŽã¯å éšã¢ãã«ã«åæ ãããããã«å¿ããŠä»ã®ãã¥ãŒã«ãåæ ãããŸãã
NitrosBase ã§ã®ã¢ãã« ãããã³ã°ãã©ã®ãããªãã®ã§ãããã«ã€ããŠã¯ã次ã®èšäºã®ããããã§èª¬æã§ããã°ãšæããŸãã
ãŸãšã
ãã«ãã¢ããªã³ã°ãšåŒã°ãããã®ã®æŠèŠãèªè ã«ãšã£ãŠå€ããå°ãªããæããã«ãªã£ãããšãé¡ã£ãŠããŸãã ãã«ãã¢ãã« DBMS ã¯ãŸã£ããç°ãªããã®ã§ãããããã«ãã¢ãã«ã®ãµããŒãããç°ãªã£ãŠèŠããå ŽåããããŸãã ããããã®ç¹å®ã®ã±ãŒã¹ã«ãããããã«ãã¢ãã«ããšåŒã°ãããã®ãç解ããã«ã¯ã次ã®è³ªåã«çããããšã圹ç«ã¡ãŸãã
- åŸæ¥ã®ã¢ãã«ã®ãµããŒãã«ã€ããŠè©±ããŠããã®ã§ããããããããšãããçš®ã®ããã€ããªãããã¢ãã«ã®ãµããŒãã«ã€ããŠè©±ããŠããã®ã§ãããã?
- ã¢ãã«ã¯ãçãããã®ã§ããããããããšãã¢ãã«ã® XNUMX ã€ãä»ã®ã¢ãã«ã®äž»é¡ã«ãªã£ãŠããã®ã§ãããã?
- ã¢ãã«ãã¡ã¯ãäºãã«ãç¡é¢å¿ããªã®ã§ããããïŒ ããã¢ãã«ã«æžã蟌ãŸããããŒã¿ãå¥ã®ã¢ãã«ã§èªã¿èŸŒãã ããäžæžããããããããšã¯ã§ããŸãã?
ãã«ãã¢ãã« DBMS ã®é¢é£æ§ã«ã€ããŠã®è³ªåã«ã¯ãã§ã«ååãã«çãããããšæããŸãããèå³æ·±ãã®ã¯ãã©ã®ã¿ã€ãã® DBMS ãè¿ãå°æ¥ããéèŠãé«ãŸãããšããããšã§ãã åŸæ¥ã®ã¢ãã«ãäž»ã«ãªã¬ãŒã·ã§ãã« ã¢ãã«ããµããŒããããã«ãã¢ãã« DBMS ã®éèŠãããã«é«ãŸããšæãããŸãã ããŸããŸãªåŸæ¥ã® DBMS ã®å©ç¹ãçµã¿åãããæ°ããã¢ãã«ãæäŸãããã«ãã¢ãã« DBMS ãæ®åããã®ã¯ãããã«é ãå°æ¥ã®è©±ã§ãã
ç»é²ãŠãŒã¶ãŒã®ã¿ãã¢ã³ã±ãŒãã«åå ã§ããŸãã
ãã«ãã¢ãã« DBMS ã䜿çšããŠããŸãã?
-
ç§ãã¡ã¯ããã䜿çšããããã¹ãŠã XNUMX ã€ã® DBMS ãš XNUMX ã€ã®ã¢ãã«ã«ä¿åããŸãã
-
åŸæ¥ã® DBMS ã®ãã«ãã¢ãã«æ©èœã䜿çšããŸã
-
ç§ãã¡ã¯å€èšèªæ°žç¶æ§ãå®è·µããŸã
-
æ°ãããã«ãã¢ãã« DBMS (ArangoãOrientãCosmosDB) ã䜿çšããŸã
19 人ã®ãŠãŒã¶ãŒãæ祚ããŸããã 4åã®ãŠãŒã¶ãŒãæ£æš©ããã
åºæïŒ habr.com