áááá á¨áá¨á áĽáááśá˝ á áŁá ááľáĽáľáĽ áá¸á. á¨ááá áŤáá°, ááľáĽáľáĽááłá¸á á ááľáŁá¸á á á°á°áŤá áá¨á ááľáĽáľáĽááľ ááááŤáľ áá. á¨ááἠááľáĽáľáĽááľ áĽááá áá áĽá á áá á ááááľ á¨á°ááŤáŠ á¨áá¨á áá´áá˝ áá áá. áľááá , áááłá, áá¨áá "áľáá " á áááá áľ áá, á ááą á˝áá áŤááŁá¸á áŁá áŞáŤáľ á¨áľáá áá á ("áľáá˝") áĽáť áłááá ááŠááąá ("á¨á°ááŤáŠ").
á ááááŤáľ ááľáĽ áĽáľáŤáá ááľááľ áŤáááá á ááĽáĽá˘
áááááľ á˝ááľ
á¨áá áŤáá ááá á ááłááľ áá á á ááľ áľáááľ áááá ááľáĽ áĽááłá áĽá á¨á°ááŤáŠ á˛á˘á¤áá¤áľá á áá áá áá¨áá ááá¨áá¸áľ áĽá áĽááąá áááľáŹáľ á¨á°ááŤáŠ á˝ááŽá˝á áááłáľ á áľááá áá ᣠáĽáŤááłááąá á¨áŤáąá á¨ááἠáá´á áá°áááᢠá M. Fowler áĽááá áĽá
áŁ
ááá á á˘-áŽáááľ ááľá áŁá áá áŁá ᪠áĽá á¨áá°á áááľ áá°áá áŞáŤ ááľáĽ á¨áá¨á áá¨ááťá á¨áá°áŤááľ á¨áá¨á°áá ááłá á ááá˘
áá
ááłáᣠá áĽáááĽáŁ á áá á á¨á°ááá ááᣠááá áá áá°ááá
ááá á ááľ ááá áá DBMS áááá¨áĽ á¨áá á
á á ááłááľ ááłáŚá˝ ááá áá˝ááᣠáááłááĄ-
á áĽáá°áá ááááľ ááŤá á áŤááľ ááľáĽ á áááá ááá ááá áĽááłááá ááá˝ áá.
- á¨ááἠáá¨ááťá á¨ááŤá¨áááá á¨áŽáľ áá á ᨠDBMSs áĽááľ áá á á°ááŁáŁá áá á áŤáľáá; á¨áŽáľ áááłá°á áá¨á áá á á¨áá ááĽá áŤáŹ áá á¨ááááŁá á á¨áá áĽáŠ ááá˘
- áĽáá° áĽá á áá á¨áááľ á¨á˛á˘á¤áá¤áľ áĽááľ áĽááľáŁ á¨áĽáŤááłááą áĽá á áá á¨áááľ á˛á˘á¤áá¤áľáá˝ á¨áľáá áľ áŁá áŞáŤáľá (áľáŹáłáááľáŁ áľá á°áľ ááťáťáᣠá¨áá°á á°ááááľ) á¨áá á¨áĽ ááŞáá˝ áá¨ááŤáá˘
- á á á ááá á¨áá áŤáá፠áááľ áľáááľ á¨áľáá áľ áŁá áŞáŤáľá áá¨ááἠá ááťáá - á á°ááá á¨ááĽááľ ááááĽá˘
á¨ááŤá á áŤááľ áłááŹáá°á áĽááł ááá ááá áá á áááľááá˘
- á¨á˛á˘á¤áá¤áľ á ááŤá˝ á¨áááľ áĽá á¨á´ááá áľáá á᪠áĽá áááŞá˘
- á¨áá á á áá á¨á°áŤá°áá˝ áĽááľ áĽá á¨áá áá°áŚá˝ áá¨ááá˘
- á áá¨á á ááááŁá á ááááŤáľ ááĽá°á á¨áááἠáŞáłáŤ ááá á áŁáśá˝á˘
á áľáááą á á ááá á¨áŁáá¤áľááľ áá (TCO) áá á¨áá°á áá᪠á áᢠᨠ"áŁááĽá á¨áá¨ááť á ááŤáŽá˝" áááł áá፠ááááľ á á?
áŁááĽá áá´á
âáŁááĽá ââáá¨ááťâ á¨ááá áá á 2011 áĽá á áá áááᢠá¨á ááŤá¨áĽ á˝ááŽá˝ áĽá á¨áááľá á ááááá áááᤠá ááŤáł á ááłáľá á¨áá á˛áá áĽ.á¤.á . á 2015 á áááľáá á°ááłáá˝ á á áááą á°ááá áˇá á˘
- ᨠ"
á¨áá ፠áááŞáŤ á NoSQL DBMSs - 2015 "
á¨á˛á˘á¤áá¤áľ á¨áá°ááľ áĽáŁ áááłáŁ á ááá´áá¸áááťá¸á áĽá á¨á á ááá ááááśá˝ áĽá áá´á áá¸áá˘
- ᨠ"
Magic Quadrant á ODBMS - 2016 "
áááŁá ââáá°á áŚááŹá˝áá á˛á˘á¤áá¤áľáá˝ á ááŤáł áá´áá˝á áŤáááŁá-á°ááá áĽá áááááľ áŤáááâáĽáá° áá á ááľá¨á á áŤáá˘
á áá
áá á¨áááľáá á°ááłáá˝ áľáá áŤá¸á áľááá á¨áá áááľááᢠáá áá° ááš á¨ááą
á¨áłá˝ áŤáá á áá á¨áĽ DBMS - áŁááĽá áá´á áá á¨áá á áĽáŤááłááą á¨áá á°á¨ááá˝ ááľáĽ áŤá ááŞáá˝á áŤáłáŤáᢠááĽáŤááłááą á˛á˘á¤áá¤áľáŁ á¨ááááŞáŤá á¨áá°áá áá´á (á ááľ áá áĽá¸áá á¨áá á¨á) áĽá á¨áĽáą áá á á áá áá á¨áá°áá áá´áá˝ áá áááᢠáĽáá˛áá áĽáŤáłá¸áá áĽáá° âá ááááŞáŤá áŁá áĽá áá´áâ á¨áááᥠá˛á˘á¤áá¤áľáá˝ á°áááá¨áá áĽá áĽáá° ááŁáŞáá˝ áááť ááá ááááľ á¨ááááŞáŤ á¨á°áá¨á° áá´á á¨áá¸ááá˘
á˛á˘á¤áá¤áľ | á¨ááááŞáŤ áá´á | á°á¨á᪠áá´áá˝ |
---|---|---|
Oracle | áááááľ | ááŤá, á°ááľ |
á¤á.á¤áľ.á¤áľ.á¤á. | áááááľ | ááŤá, á°ááľ |
PostgreSQL | áááááľ | ááŤá *, á°ááľ |
ááá ááá | ááᢠááá | ááŤá, áááááľ |
MongODB | ááᢠááá | ááá-áĽá´áľáŁ ááŤá* |
áłáłáľáłááľ | á°á-á ááľ | ááᢠáááᣠááŤá |
Redis | ááá-áĽá´áľ | ááᢠáááᣠááŤá* |
ArangoDB | - | ááŤá, á°ááľ |
ááááááľáľ | - | ááŤá ᣠá°áᾠᣠá°ááá |
á áá áŽáľááľá˛á˘ | - | ááŤá ᣠá°áᾠᣠá°ááá |
á á á¨á´áá áá ááľáłááťáá˝
á á°áá á¨áĄ ááľáĽ áŤá áŽá¨áŚá˝ áŚáł ááľáŤá á¨ááŤáľáááá¸áá ááááŤáá˝ ááááľ áŤáľááá áľáĄ
- ᨠPostgreSQL DBMS á¨ááŤá áłáł áá´áá á áá°áááᣠááá áá áá
áááľ áá°áááá
á áĽáą áá á¨á°áá°á¨á° áĽáá° AgensGraph áŤáᢠ- á¨MongoDB áá á á°áŤáŤáᣠá áĽáŤá ááá ááľáĽ á¨ááŤá áŚááŹá°áŽá˝ áááŤá¸áá áááŤáľ á¨á áá áľááá ááá˘
,$lookup
) á¨ááŤá áá´áá á¨áá°áá ááá , ááá áĽááłá, ááá áĽááłá, ááá˘áŤá¸á á ááŤá áá´áá á áá°áá á á áŤáá áá¨ááť á°á¨á áá á ááłááľ áááťá¸áľá áá ááá.$graphLookup
- á¨áŹá˛áľ áá á á°áŤáŤá, á
áĽáŤáá áááłá˝á áá
áĽáá°áá ááŤá .
á ááá á, ááĽáŤááłááą ááá, á¨áá ááá á á˛á˘á¤áá¤áľ ááľáĽ áá ááŤáł áá´áá˝ áľáá áĽáá´áľ áĽáá°áá°áá á áĽááłáŤáá. á¨áááááľáŁ á¨á°ááľ áĽá á¨ááŤá áá´áá˝á á áŁá á áľááá á áľááá áĽáááľáłáá áĽá âá¨á ááľâ áĽáá´áľ áĽáá°áá°áá አáááłá¨áľ á¨á°áá°á á˛á˘á¤áá¤áľ ááłááá˝á áĽáá ááááá˘
áŁááĽá áá´á á˛á˘á¤áá¤áľ á áááááľ áá´á áá á¨á°áá á¨á°
ááŞááš DBMSáá˝ á á áá áá á°áŤáŤáĽ áá¸áᤠRDBMSáá˝ áá° áŁááĽá áá´ááá á á áŁáŤ áĽáá áľáá´ áŤááłáŠ á¨áááľáá áľáá ፠áĽáááľ áá á°áĽá ááá°áľ á áá˝ááᢠáĽá áŤáłáŤáᢠá áá áŁá áĽá áá´á á˛á˘á¤áá¤áľ áá áĽáá° áľááľ á˘áá áá, ááá áĽáŠ ááá ááľá¨á á¨ááá˝á, á ááĽáł áá° á᪠á¤áá°á áá፠áá˝áá.
ááá áĽáá á°áŤá˛á á Microsoft SQL Server ááľáĽ á¨áŁááĽá áá´ááá áľáá áŤá ááááŁá, á áá ááłá áá RDBMS áá°ááľ áĽá áááŤá áá´áá˝ áľáá ááááťá.
á MS SQL á áááá ááľáĽ á¨á°ááľ áá´á
MS SQL Server áá°ááľ áá´á áľááá áĽáá´áľ áĽáá°áá°ááĽá¨á á HabrĂŠ áá áá°á á˛á áááľ áĽáŠ ááŁáĽáá˝ áá áŠá¤ áĽáŤá´á áá áá áá áááť áĽá á áľá°áŤá¨áľ áĽááľáŁááá˘
á MS SQL á áááá ááľáĽ á¨á°ááľ áá´áá á¨áá°ááá áľ ááááľ ááááááľ á˛á˘á¤áá¤áľ á¨á°ááá° ááᥠá¨JSON á°ááśá˝ á áá°á á á¨á˝áá ááľáŽá˝ ááľáĽ áĽáá˛ááᥠááá§áᢠá¨á°ááą áá´á áľáá áá áá JSON ááá°áá°á áአáŚááŹá°áŽá˝á ááľá áľ áááĄ-
scalar á¨áŁá ᪠áĽá´áśá˝á ááááŁáľ áŁJSON_VALUE
áááľ á°ááśá˝á ááááŁáľ.JSON_QUERY
á¨áááąá áŚááŹá°áŽá˝ ááá°áá áá¨áŤá¨áŞáŤ á JSONPath á áááľá á ááŁáĽ ááľáĽ áŤá ááá፠ááá˘
á á ááŠáŁ á áá ááááľ á¨á°á¨ááš á°ááśá˝ ᨠtuples á á°ááŤá á áááááľ DBMS ááľáĽ âá¨ááááŞáŤ á°á¨á á áŤááľâ á áá°áá áááľ áĽáá˝áááᢠá á°ááá á MS SQL á áááá ááľáĽ á á áá áá á JSON á°ááśá˝ ááľáŽá˝ áá ááá á˘áá´ááśá˝ á¨áá ᣠáá á á¨áĽááá á ááľáŽá˝ áĽá´áśá˝ á áá áá á°áá á¨áŚá˝á ááááá áĽá áĽááá á áĽá´áśá˝ á áá áá á°ááśá˝á áááá¨áĽ á áľá¸á᪠áŤá°ááááᢠááá áá, ááĽáá°áá á áááľ ááľá á¨á°á°áá á ááľ áĽá á áĽáą áá á˘áá´ááľ ááá á ááťáá.
á á°á¨ááŞáŁ MS SQL á áááá áŚááŹá°áŠá á áá áá á¨á á¨á´ááá˝ áááśá˝ ᨠJSON á°ááľá á á°áḠáááł á¨ááááŁáľ á˝ááł áá°áŁáᢠFOR JSON PATH
á áá¨á¨áťá MS SQL Server á¨á°ááľ áááŁáłá á¨á°ááá˘áŚá˝ á˝áá ááááłáľ ááá
áľáááłá-JSON á á áá áá áá° á á¨á´ááá˝ áá áľá áľ áá˝áá. OPENJSON
CROSS APPLY
.
á¨ááŤá áá´á á MS SQL á áááá ááľáĽ
áááŤá (LPG) áá´á áľáá á ááááŽáśááľ SQL á áááá ááľáĽ áá á áá á°á°ááĽáŻáᢠCREATE TABLE AS NODE
и CREATE TABLE AS EDGE
á á¨á°á¨áá.
á¨ááááŞáŤá ááááľ á°áá á¨áŚá˝ ááááŚá˝á ááá¨áá¸áľ á¨á°áááąáľ á á¨á´ááá˝ áá á°ááłáłá áá¸á, áĽá¸áá ááŤá ááŠááľ á°áá á¨áĄ á¨áľáááľ ááľá ááá. $node_id
- á áá¨á ááą ááľáĽ á¨ááŤá ááľááá ááááľ áአáááŤá˘
á á°ááłáłáá á¨ááá°áá ááááľ á áá á¨áŚá˝ á¨áľáááľ ááľáŽá˝ á áá¸á $from_id
и $to_id
á áĽáá°áá
ááááľ á áá á¨áŚá˝ ááľáĽ áŤá áá¤áśá˝ á á áááá˝ ááŤá¨á áŤááá áááááľ á ááá
ááááá. á¨áĽáŤááłááąá á áááľ áááááśá˝ ááá¨áá¸áľ á¨á°áᨠá°áá á¨áĽ áĽá
á áá áááá.
áá áá á ááłá áĽááľá¨áłáᢠá¨ááŤá ááᥠá áĽáá áá áĽáá°ááłá¨á ááááľ á áááἠáááááľ. á¨á፠á áá¨á ááą ááľáĽ áŤááá á°ááłá ááá á áááá á á¨áá¨á°ááľá á¨á˛á˛á¤á áá ááá˝ ááľáŹáľ áŤáľáááááłáá˘
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);
á¨áĽááá
á áá á¨áŚá˝ áá ááŠááľ á áĽááą áá á áááą áĽáŤááá˝ áá á¨ááŤá ááľáá˝á á áłááá áá°á á ááŁáĽ áá áá ááťáá (ááá áĽááᣠâ*
ááá° áá á áá°á°ááá)ᢠá á ááťá¸á áááŞáŤáá˝ áá á ááááŽá á áĽááá
á°áá á¨áŚá˝ ááľáĽ áá¨á á¨áá¨áá˝á áľ ááááľ áá¨á á áá°á á á áá á¨áŚá˝ ááľáĽ á¨áá¨áá˝á áľ ááááľ á¨á°áᨠáĽá áĽáá°ááá
áŤááľá á¨ááŤá áĽáŤááá˝á áááľááá á¨á°ááťá¸ áĽáá°áá ááááľ ááťáá.
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 á áááá ááľáĽ á¨á°ááą áĽá á¨ááŤá áá´áá˝ á á°ááŁá á áááá ááá ááá ᣠá¨á ááą áá´á á ááá áá áĽáá°áá áŤá áľáá áŤáá˝ á¨á°áłáŤ á áááľáá ᣠá áááááľ á¨ááá á˛ááá áĽááł á ááá ᢠá ááľá ááá á¨ááá áá ááŤáá á áľááá áá, áááááš áá á áá "áŚááśááá" á áá°áá, á¨á°áłááááľ á°ááŚáš á áŁá áĽáááł ááá áá˝áá.
áŁááĽá áá´á á˛á˘á¤áá¤áľ á á°ááą áá´á áá á¨á°áá á¨á°
á áá
ááá ááľáĽáŁ á á°ááľ á˛á˘á¤áá¤áľ ááľáĽ á¨áŁááĽá-áá´á á á°ááŁá áá á ááłá áááľá¨áłáľ áĽááłáá áááá˛á˘ (áĽáá°á°áŁááᣠáááłá ááŤá áŚááŹá°áŽá˝ á ááľ $lookup
и $graphLookup
, á á°ááŤá¨áĄ áľáĽáľáŚá˝ áá áĽá¨á°áŤ á áá°áá) ááá áá á¨á áá á¨á á°á áĽá "áľáá
áľ" á˛á˘á¤áá¤áľ ááłá á áá áá
áľááá áľáĽáľáĄ á¨áá¨á°áá ááááľ á¨á¤ááľá¤áá¤á á°ááśá˝ áľáĽáľáĽ áĽáá˛áá ááááą (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 á¨ááŤá áá´áá á áááľ ááááśá˝ áá°ááááĄ-
- á˛á˘á¤áá¤áľ áá á¨á°á ááá á¨á°áᨠá¨RDF ááἠáá¨ááť ááá áá˝áá (á ááľáĄ ááľáĽ áśáľáľ áĽáĽá áá áŤáá˘
á¨áá°áłá°á á¨áá á¨á°ááášáľ á á°ááŤááĽáá˛áᣠá°á°ááá ). - á áአá°á¨áłáłáááľ áŤáá á áá˛á¤á á ááá á á¤ááľá¤áá¤á ááá á JSON á°ááśá˝ ááľáĽ ááᣠáá˝áá (áĽá á¨á፠áśáľáľ áá áá áŤá)
á¨ááá°áłá°á ). áá ááááŁáľ á¨áľááśá˝ áá á ááŤá ááá˘idref
áĽá ááá˝.
á MarkLogic ááľáĽ âá áĽáááĽâ áááŽá˝ áĽáá´áľ áĽáá°áá አáĽáŠ ááłáĽ á¨á°á°á á á
áŁááĽá áá´á á˛á˘á¤áá¤áľ "áŤá áá áá´á"
á áá áŤá áá ááá á áááľ á¨áááľ áá áá´á áłáááŤá¸á áĽáŤáłá¸áá áĽáá° ááá˛-áá´á á áľááá á¨ááŤáľááᥠá˛á˘á¤áá¤áľáá˝ á áᢠáĽááá
á áŤáŤáľáłá
áĽáá° áĽáááą á¨áá á á áŤááá˛á˘ áĽá á OrientDB ááľáĽ "áŽá" áá´áá˝ á á. á áááąá áááłáá˝, áĽááá á¨áŤáłá¸á á¨ááἠáá´áá˝ áá¸á, áĽááąá á¨á°ááą á ááľ á á ááá ááááŤáá˝ áá¸á. á á ááá ááááŤááš á ááááľ á¨ááŤá áĽá á°ááá á°ááĽáŽ áĽáŤááá˝á á¨áá¨ááá á˝ááłá ááááťá¸áľ ááá˘
áĽááá áá´áá˝ á á°á áá°á á˛á˘á¤áá¤áľ ááľáĽ áĽá á áá á¨ááááľ áĽáť áá¸áᣠá¨áŤáłá¸á á¨áá áá ááááá˝ á¨ááą áá áááľáŤáľ á¨á°áá°á áá¸áᢠá áĽááἠáĽáá°áá áŤá áá´áá˝ áĽá á˛á˘á¤áá¤áľáá˝ á°áľá á°á áá¸á ááá áá á¨áá°á á áá´áá˝ áĽá ááááá˝ áá á°áłááááľ á áááአáĽááá á á˛á˘á¤áá¤áľ á ááľá áľáááśá˝ ááľáĽ ááá áá á¨áááťá áŤá°áááá - áá°á á˛á áĽá፠áĽá á áá á¨áááľá á˛á˘á¤áá¤áľ ááá°áŤáľá˘
áľá ArangoDB áĽá OrientDB á áá Ꮰáá á ááľ á áľá°áá ááŁáĽá á áľááľá áá áá˘
ArangoDB
ArangoDB áááŤá ááἠáá´á áľáá áá°áŁáá˘
á á áŤááá˛á˘ ááľáĽ áŤáá á¨ááŤá á áááá˝ á°áŤ á°ááśá˝ áá¸á áĽá á áááš á¨áá°á á á¨áľáááľ ááľáŽá˝ áá áአááááľ á°ááśá˝ áá¸á (_key
, _id
, _rev
) á¨áľáááľ ááľáŽá˝ _from
и _to
. á á°ááľ á˛á˘á¤áá¤áľ ááľáĽ áŤá á°ááśá˝ á á°áááś áá° áľáĽáľáŚá˝ ááŁááŤáᢠá ááá˝á á¨áááá á°ááśá˝ áľáĽáľáŚá˝ á á áŤááá˛á˘ ááľáĽ á¨á áá áľáĽáľáŚá˝ ááŁáá. á áááŤá˝á áá á¨á áá áá°áĽá°áĽ á°ááśá˝ á°ááśá˝ áá¸á, áľááá
á á áŤááá˛á˘ ááľáĽ áŤá á ááá˝ áĽáá° á áááá˝ ááá ááŤáááá áá˝áá.
áĽáŹ áááĽ
áľáĽáľáĽ ááá¨á 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
}
]
áĽáŤááá˝ áĽá áá¤áśá˝
á á áŤááá˛á˘ áĽá á áá á¨áááá ᨠ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 á¨á°ááá° á¨áá áá
á áĽáŤá ááá¨á áá˝áá (ááá áá áá áá˝áá) COLLECT
FOR p IN persons
RETURN {
person : p.name,
likes : (
FOR c IN OUTBOUND p likes
RETURN c.name
)
}
áá¤áąá áá á áááľááá˘
[
{ "person" : "ĐНиŃĐ°" , likes : ["ĐĐ°Đ˝-ĐĐ°Đş" , "ĐМОн ĐОнн"] } ,
{ "person" : "ĐОй" , likes : ["ĐМОн ĐОнн"] }
]
ááááááľáľ
á 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ᣠáłááá á¨áááľá á¨áĽáŤá á
á˝ áłá¨áŁ 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
á¨áá¤áą á áá¸áľ á¨ááłáá áĽáŤá áá á°ááłáłá ááááᢠáĽáá° ááááŞáŤá áá áá á¨á áá âáááááľâ áááľá¨á áá ááááľ áĽááłáá áľ á áľáĄá˘
á áá áŽáľááľá˛á˘
á áá áá á˘ááᣠáľá ArangoDB áĽá OrientDB á¨áá á¨á°ááá¨á á Azuure CosmosDB áá á°ááťá ááááᢠCosmosDB á¨áá¨á°ááľá á¨ááἠááłá¨áť APIs áŤáááŁáᥠSQLᣠMongoDBᣠGremlin áĽá Cassandraá˘
SQL API áĽá MongoDB API á á°ááľ áá´á ááľáĽ áŤááá ááἠáááľá¨áľ áľáŤ áá ááááᢠGremlin API áĽá Cassandra API - áááĽá á ááŤá áĽá á á ááľ á
áá¸áśá˝ á á
á°á á°á¨á°á áááááľá˘ á ááá áá´áá˝ ááľáĽ áŤá ááἠá CosmosDB á¨ááľáĽ áá´á á
áá¸áľ á°ááá§ááĄ-
ááá áá á á°á ááá á¨á°áá¨á á á¨ááἠáá´á áĽá áĽá á áá á¨ááá á¤áá á á á áááááą ááľáĽ áá፠á áááĽáŠá áľ áá á°áľá°áŤáááá. á áĽáá°áá ááááľ ááá áĽáá°ááłá¨á á á ááľ áá´á ááľáĽ á¨á°áŤááá ááἠá áá áá´á á áá¸áľ ááááľ á ááťááá˘
áľááá , á Azure CosmosDB ááľáĽ áŁá áĽá áá´á áᏠá¨á ááľ á ááŤá˝ á¨á°ááŤáŠ áá´áá˝á á¨áá°áá á ááŤáł á¨ááἠááłáá˝á á¨áá áá á˝ááł áĽáť áá, áá á áááá á¨áŁááĽá á°ááá áá¨ááť á˝ááŽá˝á á áááłá.
áŁááĽá áá´á DBMS á ááŤá áá´á áá á¨á°áá°á¨á°?
áľáŠá¨áľ á¨ááľá á á áá ፠áá á ááŤá áá´á áá á¨á°áá°á¨áą áŁááĽá áá´á á˛á˘á¤áá¤áľáá˝ á ááááŤá¸á (á¨áŁááĽá áá´á áľáá á áľá°áá á á ááľ áá ááááľ ááŤá áá´áá˝áĄ RDF áĽá LPGᤠáá
áá á ááľáĽ áááá¨áą)á˘
á ááŤá áá´á á ááľ áá áŤááá á°áŤáŤáĽ áá´á áĽáá´áľ áĽáá°áá°áá á áĽáŤáá á¨áááá á ááá áá áľ ááá áĽááł áááľ ááľáĽ áŤáľáᣠáá á. áĽáá´áľ
á ááŤá áłáłá¤á áá ááĽááĽá ááá áá á¨áá¨ááá ááá ááá á¨áá (áááłá ᣠá°áľáá áá¨á á áá á ááľá¨á) á ááŤá áłáłá¤á áá (1) áąááá˝á á¨á°áááąáľ á¨ááá áĽá´áľ áĽááśá˝ áááś ááááľ áĽá (2) tuples á áááááľ á áááľ.
á ááŤá áá´á á ááľ áá á¨á°ááľ áá´á á˛á°áá áŠ, áááłá á¨áá¨á°ááľá ááľáłááľ á ááĽááľ.
- á¨JSON áľááľá á áŤááľ áĽáá°áłáá ááá áŤáᣠááá áá á¨ááŤá á áá áŤá á¨áááĄáľ á áá°ááá˘
- á á°ááą áá´á ááľáĽ áŤáá áá¨á áĽááá áá áá°á á áŤááá áá ᣠá ááá á°ááłáłá á¨á°á¨á°á° á°ááľ áĽá á ááá˝á áá¨áá¸áľ á ááááá ᣠáĽá áááľ á°ááśá˝ áĽááá áá áááŤáá˝ á¨ááľáá˘
- á áá á áŠáᣠá¨á°ááľ á˛á˘á¤áá¤áľ áááŽá° ááá á°ááśá˝ á áĽáŤááłááą áá á á˛áľ ááááŁáľ á¨ááŤáľáááá¸á ááá-á¨á°á አâáľááâ áá¸áᢠá¨á°á áááá á°ááľ áá á¨ááááľ áááľ ááŤá á ááĽááľ á¨ááááľ á˝ááł áŤáá á¨ááŤá áá´áá áá á¨áĽ áá á á á áłáá˘
áľáá˝ ááľáłáááŤ
á¨á áááš á°áŤá˛ ᨠNitrosBase DBMS áĽáľááľ áá á¨á°áŤáŤá áá, ááľáŁáá áá´á ááŤá áá, áĽá ááŤá áá´áá˝ - á°áŤáŤáĽ áĽá á°ááľ - ááááááš áá¸á. ááá áá´áá˝ áĽáŠá áá¸áᥠááááá ááἠáááľ ááťáá á áááá¸áá á á°ááĽáŽá á¨áá á¨áá áá ááá á áá áá ááááᢠá¨áá á á áá á ááááá áĽááł ááᥠáááἠáá˝áá. áááŚá˝ á ááľáŁáá áá´á áĽá, á áá áá°á¨áľ, á ááá˝ áĽááłáá˝ ááľáĽ ááá¸áŁá¨áá.
á NitrosBase ááľáĽ á¨áá´á ááááľ áá áĽáá°áááľá á¨áá¨á°ááľ ááŁáĽáá˝ á á ááą áĽáááťááá˘
áá°áá°ááŤ
ááá˛-áá´ááá á¨ááŁááľ á á ááá ááááŽá˝ áá ááŁá˘á á¨á áá ááá áŤáá° ááá˝ áĽá¨áá áĽáá°áᥠá°áľá á á°ááááᢠáŁááĽá áá´á á˛á˘á¤áá¤áľ á áŁá á¨á°ááŤáŠ áá¸áᣠáĽá âáŁááĽá ââáá´á áľááâ á¨á°áᨠáááľá áá˝ááᢠá áĽáŤááłááą á¨á°áᨠááłá áá "áŁááĽá áá´á" á°áĽá á¨áá áŤáá ááá¨áłáľ ááá¨á°ááľ áĽáŤááá˝ áááľ ááľá áľ á áá áá.
- áĽá¨á°ááááá áŤááá áľá áŁá áá áá´áá˝ áá°áá áá áááľ á ááľ ááááľ "áľáĽáá " áá´á?
- áá´ááš "áĽáŠá" áá¸á áááľ á¨ááŤá¨áá¸á á ááą á¨áááš ááá° ááłá áá?
- áá´ááš á ááłá¸á áááá "ááľá¨áá˝" áá¸á? á á ááľ áá´á á¨á°áá áá¨á á áá ááá ἠááá áááá ἠáá˝áá?
áĽá áĽáá°ááľá á áľá áŁááĽá-áá´á á˛á˘á¤áá¤áľ á ááŁáĽááľ áŤáá áĽáŤá ááľááá á á áááłá ááአááááľ áá˝áá ᣠáá á áľá°ááá áĽáŤá á á áἠáá ááľáĽ á¨áľááš ááááśá˝ á¨á áá á°ááá áááá á¨ááá áá ᢠáŁá áá áá´áá˝á á¨áá°áá áŁááĽá-áá´á á˛á˘á¤áá¤áľáá˝ á áááááľ á°áŤáŤáĽááľ áŤáá¸á áááľááᢠá¨áŁááĽá-áá´á á˛á˘á¤áá¤áľ á°ááłá ááľ áŁá¨á°ááŤáŠ áŁá áá áĽá á áĽá áá˝á á¨ááŤáŁáአá áłá˛áľ áá´áá˝á á áá á¨áĽ áŁá¨áá°ááą á¨áŠá ááłá ááá˘
á áłá°áł áĽááą ááľáĽ á¨á°áááᥠá°á áááá˝ áĽáť ááłá°á áá˝ááá˘
áŁááĽá áá´á á˛á˘á¤áá¤áľ áľá áááá ?
-
áĽá á áá ááá áľá, áááá ááá á á ááľ á˛á˘á¤áá¤áľ áĽá á á ááľ áá´á ááľáĽ áĽáá¨ááťáá
-
áŁá áá á˛á˘á¤áá¤áľáá˝á áŁááĽá áá´á á˝ááłáá˝á áĽáá ááááá˘
-
á áááááľ á˝ááľ áĽáááááłááá˘
-
á á˛áľ áŁááĽá áá´á á˛á˘á¤áá¤áľ (ArangoᣠOrientᣠCosmosDB) áĽáá ááááá˘
19 á°á áááá˝ áľáá˝ á°áĽá°ááᢠ4 á°á áááá˝ áľáá á°á á
ጠá áľááááá˘
ááá: hab.com