ืืขืจืืืช ืืืืข ืืืืจื ืืืช ืืืจืืืืช ืืืื. ืื ืคืืืช ืืื, ืืืจืืืืชื ื ืืืขืช ืืืืจืืืืช ืื ืชืื ืื ืืืขืืืืื ืืื. ืืืืจืืืืช ืฉื ืื ืชืื ืื ื ืขืืฆื ืืจืื ืืืืืื ืืืื ืื ืชืื ืื ืืืฉืืฉืื. ืื, ืืืฉื, ืืืฉืจ ืื ืชืื ืื ืืืคืืื ื"ืืืืืื", ืืื ืืืืคืืื ืื ืืืขืืืชืืื ืืื ืื ืจืง ืื ืคื ืฉืื ("ื ืคื"), ืืื ืื ืืืืืื ืฉืื ("ืืืืืื").
ืื ืขืืืื ืื ืืฆืืชื ืคืื ืื ืืืืง, ืืืฉื ืืงืจืื.
ืืชืืื ืคืืืืืืืืืช
ืืืืืจ ืืขืื ืืืืื ืืื ืฉืืขืืชืื ืื ืืืกืืจืช ืืขืจืืช ืืืช ืืฉ ืฆืืจื ืืืฉืชืืฉ ืืืกืคืจ DBMSs ืฉืื ืื ืืืืกืื ื ืชืื ืื ืืคืชืจืื ืืขืืืช ืฉืื ืืช ืฉื ืขืืืืื, ืฉืื ืืื ืืื ืชืืื ืืืืื ืื ืชืื ืื ืฉืื. ืืืื ืืงืื ืฉื ื. ืคืืืืจ,
ื-Fowler ืืฉ ืื ืืช ืืืืืื ืืืื ืฉื ืืจืืื ืืืกืื ื ืชืื ืื ืืืคืืืงืฆืื ืืืื ืืขืืืกื ืืชืืื ืืืกืืจ ืืืืงืืจืื ื.
ืืืืื ืื, ืืืืื, ืืืืืืช ืืืงืฆืช, ืื ื ืืชื ืืืฆืื ืืื ืฉืืงืืืื ืืขื ืืืืจืช DBMS ืืื ืื ืืืจ ืืืืจื ืืืงืืืื, ืืืฉื,
ืืจืืจ ืฉืืืืืช ืืฉืจืช ืืื ืืืืช ืืื ืื ืื ืงื.
- ืืืืช ืืงืื ืฉืืืฆืขืช ืืืกืื ื ืชืื ืื ืืืื ืืืืก ืืืกืคืจ DBMSs ืืฉืืืืฉ; ืืืืช ืื ืชืื ืื ืืืกื ืืจื ืื ืงืื ืืืื ืื ืื ืคืจืืคืืจืฆืืื ืืืช ืืจืืืืข ืฉื ืืกืคืจ ืื.
- ืืืืคืื ืฉื ืืกืคืจ ื-DBMSs ืืฉืืืืฉ, ืืขืืืืืช ืฉื ืืกืคืงืช ืืืคืืื ืื ืืจืืื ืืื (ืืืจืืืืช, ืกืืืื ืืช ืชืงืืืช, ืืืื ืืช ืืืืื) ืฉื ืื ืืื ื-DBMSs ืืฉืืืืฉ ืขืืืืช.
- ืื ืืคืฉืจ ืืืืืื ืืช ืืืืคืืื ืื ืืืจืืื ืืื ืฉื ืชืช-ืืขืจืืช ืืืืกืื ืืืืืืชื - ืืืืืื ืืจื ืืงืฆืืื ืืืืช.
ืื ืงืืืช ืืืื ืฉื ืื ืื ืื ืืืืืช, ืืื ื ืจืื ืื:
- ืขืืืื ืืจืืื ืืขืืืช ืืจืืฉืืื ืืช ืืืชืืืื ืืืื ืืช ืืืฆืจื DBMS.
- ืขืืืฃ ืืื ืืื ืืืืืืช ืืืืขืืื.
- ืืคืกืืื ืืกืคืืื ืืฉืืจืื ืื ืงื ืกืืช ืขืงื ืืืกืจ ืขืงืืืืช ืื ืชืื ืื.
ืืฉื ื ืขืืืื ืืฉืืขืืชืืช ืืขืืืช ืืืขืืืช ืืืืืืช ืฉื ืืืขืจืืช (TCO). ืืื ืืฉ ืืจื ืืฆืืช ืืืืฆื ืฉื "ืจืืืื ืืคืฉืจืืืืช ืืืกืื"?
ืจื ืืื
ืืืื ื "ืืืกืื ืจื-ืชืืืืชื" ื ืื ืก ืืฉืืืืฉ ื-2011. ืืืืืขืืช ืืืขืืืช ืืืืฉื ืืืืืคืืฉ ืืืจ ืคืชืจืื ืืจืื ืืกืคืจ ืฉื ืื, ืืขื ืฉื ืช 2015, ืืคื ืืื ืืืกืืื ืฉื ืืจืื ืจ, ืืชืืืฉื ืืชืฉืืื:
- ื "
ืืืจืื ืฉืืง ืขืืืจ NoSQL DBMSs - 2015 ยป:
ืืขืชืื ืฉื DBMS, ืืืจืืืืงืืืจืืช ืฉืืื ืืืจืื ืืฉืืืืฉ ืืื ืืื ืจื-ืืืืืื.
- ื "
ืจืืืข ืงืกื ืขืืืจ ODBMS - 2016 ยป:
DBMS ืชืคืขืืืืื ืืืืืืื ืืฆืืขื ืืืืืื ืืจืืืื - ืืืกืืื ืืื ืืืกืืื - ืืืืง ืืคืืืคืืจืื ืืืช.
ื ืจืื ืฉืืคืขื ืืื ืืืกืืื ืฉื ืืจืื ืจ ืฆืืงื ืืชืืืืช ืฉืืื. ืื ืืชื ืืืื ืืืฃ ืขื
ืืืืื ืฉืืืื ืืฆืืื ืืช ื-DBMS - ืืืืืืืื ืืื ืืื ืืืืืจืืืื ืืคืจืืืื, ืืืชืืืืจืื ืืืืืช ืจื-ืืืืืื. ืขืืืจ ืื DBMS ืืฆืืื ืืืื ืืืงืืจื ืื ืชืื (ืฉืืื ืคืขื ืืืืื) ืืืื ืืืชื ืืืืืื ืื ืชืืืื ืืจืืข. ืืื ืื, ืจืฉืืืื DBMS ืืืืฆืืื ืขืฆืื ื"ืจื-ืืืืืื ืืืงืืจ" ืืืคื ืืืืฆืจืื, ืืื ืืื ืฉืื ืืืื ืืืจืืฉื ืจืืฉืื ื.
DBMS | ืืื ืจืืฉืื ื | ืืืืื ื ืืกืคืื |
---|---|---|
ืืืจืงื | ืืืกื | ืืจืฃ, ืืกืื |
SQL MS | ืืืกื | ืืจืฃ, ืืกืื |
PostgreSQL | ืืืกื | ืืจืฃ*, ืืกืื |
MarkLogic | ืืืงืืื ืืจื | ืืจืฃ, ืืืกื |
MongoDB | ืืืงืืื ืืจื | ืขืจื ืืคืชื, ืืจืฃ* |
DataStax | ืขืืืื ืจืืื | ืกืจื ืชืืขืืื, ืืจืฃ |
Redis | ืขืจื ืืคืชื | ืกืจื ืชืืขืืื, ืืจืฃ* |
ArangoDB | - | ืืจืฃ, ืืกืื |
ืืืจืืื ื | - | ืืจืฃ, ืืกืื, ืืืกื |
Azure CosmosDB | - | ืืจืฃ, ืืกืื, ืืืกื |
ืืขืจืืช ืฉืืืื
ืืืืืืืช ืืืืื ืืกืื ืืช ืืฆืืจืืช ืืืฆืจืืืืช ืืกืชืืืืืืืช:
- ื- PostgreSQL DBMS ืืื ื ืชืืื ืืืืื ื ืชืื ื ืืืจืฃ, ืื ืืืฆืจ ืื ืื ืชืืื ืื
ืืืืกืก ืขื ืื , ืืืื AgensGraph. - ืืืืก ื-MongoDB, ื ืืื ืืืชืจ ืืืืจ ืขื ื ืืืืืช ืฉื ืืืคืจืืืจืื ืืจืคืื ืืฉืคืช ืืฉืืืืชื (
,$lookup
) ืืืฉืจ ืขื ืชืืืื ืืืืื ืืืจืฃ, ืื ืื, ืืืืื, ืืฆืืชื ืืจืฉื ืืื ืืืคืืืืืืฆืืืช ืืจืืช ืืืืกืื ืืคืืืืช ืืืืืื ืฉื ืชืืืื ืืืืื ืืืจืฃ.$graphLookup
- ืืืืก ืืจืืืก, ืื ืื ื ืืชืืืื ืื ืืืจืืื
RedisGraph .
ืืืืจ ืืื, ืขืืืจ ืื ืืืช ืืืืืืงืืช, ื ืจืื ืืืฆื ืืืืฉืืช ืชืืืื ืืืกืคืจ ืืืืืื ื-DBMS ืืืืืงื ืื. ื ืฉืงืื ืืช ืืืืืืื ืืืชืืืืกืืชืืื, ืืืกืืืื ืืืืจืคืื ืืืฉืืืื ืืืืชืจ ืื ืฉืชืืฉ ืืืืืืืืช ืฉื DBMSs ืกืคืฆืืคืืื ืืื ืืืจืืืช ืืืฆื ื"ืืกืจืื" ืืืืฉืืื.
DBMS ืจืืืื ืืืืืื ืืืืืกืกืื ืขื ืืืืื ืืืชืืืืกืืชื
ืืขืจืืืช ื-DBMS ืืืืืืืืช ืืืื ืื ืืืกืืืช; ืืชืืืืช ืฉื ืืจืื ืจ ืื ืืืืื ืืืืืฉื ื ืืื ืื ืืขืจืืืช ื-RDBMS ืื ืืจืื ืชื ืืขื ืืืืืื ืฉื ืจืืืื ืืืืืื. ืืื ืืคืืื ืื. ืืขืช ื ืืชื ืืืคื ืืช ืืช ืืจืขืืื ืฉ-DBMS ืืจืืื ืืืืื ืืื ืืื ืกืืื ืฉืืืืฆืจืืช, ืฉืืื ื ืืืืื ืืขืฉืืช ืืืจ ืืื, ืืฉืืจืืช ืืืืจื ืืืืกืื.
ืืืืืจ, ืืขืืืช ืืืช, ืืขืืืฃ ืืช ืืืืขืช ืจืืืื ืืืืืื ื-Microsoft SQL Server, ืฉืขื ืืืืื ืื ืชืชืืืจ ืชืืืืช RDBMS ืขืืืจ ืืืืืื ืฉื ืืกืืืื ืืืจืคืื.
ืืืื ืืกืื ื-MS SQL Server
ืืืจ ืืื ืฉื ื ืืืืจืื ืืฆืืื ืื ืขื Habrรฉ ืขื ืืืืคื ืฉืื MS SQL Server ืืืืฉื ืชืืืื ืืืืื ืืืกืืืื; ืื ื ืืกืชืคืง ืืกืืคืืจ ืงืฆืจ ืืคืจืฉื ืืช:
ืืืจื ืืชืืื ืืืืื ืืืกืืืื ื-MS SQL Server ืืืคืืื ืืช ืืืื ืขืืืจ DBMSs ืืืกื: ืืกืืื JSON ืืืฆืขืื ืืืืืช ืืืืืกื ืื ืืฉืืืช ืืงืกื ืจืืืืื. ืืชืืืื ืืืืื ืืืกืื ืืื ืืกืคืง ืืืคืจืืืจืื ืืืืืืื ืื ืชื JSON ืื:
ืืื ืืืืฅ ืขืจืื ืชืืื ืืช ืกืงืืจืืืช,JSON_VALUE
ืืืืฅ ืืกืืื ืืฉื ื.JSON_QUERY
ืืืจืืืื ื ืืฉื ื ืฉื ืฉื ื ืืืืคืจืืืจืื ืืื ืืืืื ืืชืืืืจ ืืืื JSONPath.
ืืืืคื ืืืคืฉื, ืื ื ืืืืืื ืืืืจ ืฉืืกืืืื ืืืืืืกื ืื ืืฆืืจื ืื ืืื ื "ืืฉืืืืช ืืืฉืืจื ืืจืืฉืื ื" ื-DBMS ืืืกื, ืื ืืืื ื-tuples. ืืืืคื ืกืคืฆืืคื, ื-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
- ืืืื ืืืืืื ืฉื ืฆืืืช ืืจืฃ ืืชืื ืืกื ืื ืชืื ืื.
ืืืืคื ืืืื, ืืืืืืืช ืืืกืื ืืฉื ื ืืฉ ืฉืืืช ืืขืจืืช $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);
ืืกืคืฆืืคืืืช ืืขืืงืจืืช ืฉื ืืืืืืช ืืืื ืืื ืฉืืฉืืืืชืืช ื ืืื ื ืืชื ืืืฉืชืืฉ ืืชืื ืืืช ืืจืคืื ืขื ืชืืืืจ ืืืื ืกืืืคืจ (ืขื ืืืช, "*
"ืืื' ืขืืืื ืื ื ืชืืืื). ืืืชืืกืก ืขื ืืืืืืช ืืืฆืืขืื, ื ืืชื ืื ืืื ืื ืฉืืืืคื ืฉืื ื ืชืื ืื ืืืืืกื ืื ืืืืืืืช ืืื ืฉืื ื ืืืืืคื ืฉืื ื ืชืื ืื ืืืืืกื ืื ืืืืืืืช ืจืืืืืช ืืืื ืืืชืื ืืืืฆืืข ืฉืืืืชืืช ืืจืคืื ืืืื.
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 (ืืืืืจ, ืืฉ ืื ืจืง ืืืคืจืืืจืื ืืจืคืื ืืืชื ืื $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 ืชืืื ืืืืื ืืืจืฃ ืืฉืชื ืืจืืื ืืืจืืช:
- DBMS ืืืื ืืืืืช ืืืกืื ื ืคืจื ืื ืืื ืืื ืฉื ื ืชืื ื RDF (ืืฉืืฉืืช ืื ืืืงืจืื
ืืฆืืื ืื ืืืื ืืืื ืฉืชืืืจื ืืขืืืืืืืฅ ). - ื ืืชื ืคืฉืื ืืืื ืืก RDF ืืกืจืืืืืืฆืื ืืืืืืช ืืืกืืื XML ืื JSON (ืืืืืจ ืืื ืืืงืจื ืฉืืืฉืืื
ืื ืื ืืื ). ืื ืื ืจืื ืืืืคื ืืื ืื ืื ืืidref
ืืื '
ืืืฉื ืืื ืืื ืืืจืื "ืืืืช" ืขืืืืื ื-MarkLogic ื ืืชื ืขื ืืื
DBMS ืจืืืื ืืืืื "ืืื ืืื ืจืืฉื"
ืืฉ ืืฉืืง ืื DBMS ืฉืืืฆืืื ืขืฆืื ืืจื-ืืืืืื ืืชืืืื, ืืื ืฉืื ืืืื ืจืืฉื ืฉืขืืจ ืืืจืืฉื. ืืื ืืืืืื
ืืืขืฉื, ืืฉื ื ืืืืืื "ืืืืื" ื-ArangoDB ื-OrientDB. ืืฉื ื ืืืงืจืื, ืืื ืื ืืืืืื ืฉื ื ืชืื ืื ืืฉืืื, ืฉืื ืืืืืืช ืฉื ืืืกืื ืืจืืฉืื. ืืืืืืืช ื ืืขืื ืืขืืงืจ ืืืงื ืขื ืืืืืืช ืืืฆืข ืฉืืืืชืืช ืืขืืืช ืืืคื ืืจืฃ ืืืืกื.
ืืืืืื ืืื ืื ืืืืืืื ืืืืื ืื ืืฉืืืืฉ ื-DBMS ืฉืฆืืื; ืฉืคืืช ืืฉืืืืชื ืฉืืื ื ืืขืื ืืขืืื ืืืชื. ืืืืื, ืืืืืื ื-DBMS ืืืื ืืืืืืื, ืืื ืืืกืจ ืืชืืืืืช ืขื ืืืืืื ืืฉืคืืช ืกืื ืืจืืืื ืื ืืืคืฉืจ ืืืฉืชืืฉ ื-DBMS ืืื ืืืขืจืืืช ืืืืจ ืงืืื - ืืื ืืืืืืฃ ืืช ื-DBMS ืฉืืืจ ื ืขืฉื ืืื ืฉืืืืฉ ืฉื.
ืืืจ ืืืืชื ืืืืจ ื ืคืื ืขื ArangoDB ื-OrientDB ื-Habrรฉ:
ArangoDB
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
}
]
ืฉืืืืชืืช ืืชืืฆืืืช
ืฉืืืืชื ืืกืื ืื ืืจืฃ ืืฉืคืช AQL ืืืฉืืฉืช ื-ArangoDB, ืืืืืืจื ืืฆืืจื ืงืจืื ืื ืืฉืืช ืืืืข ืขื ืื ืืืื ืืืื ืืืช ืงืคื, ื ืจืืืช ืื:
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 ืืื 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"
}
]
ืืคื ืฉืื ื ืืืืืื ืืจืืืช, ืงืืืงืืืื ืืืืกื ืื ืื ืืืืข ืขื ืงืฆืืืช ื ืื ืกืื ืืืืฆืืื. ืึผึฐ
ืฉืืืืชืืช ืืชืืฆืืืช
ืฉืืืืชื ืืืื ืืืืจื ืืฉืืืืชื ืืืืืืื ืขืืืจ ArangoDB ื-OrientDB ื ืจืืืช ืื:
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 ื-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
ืคืืจืื ืืชืืฆืื ืืืื ืืื ืืืงืฉื ืืงืืืืช. ืืฉืื ืื ืฆืจืื ืืืกืืจ ืืื ืืืคืื ืืืชื ื"ืืืกื ืืืชืจ", ืืื ืืฉืืืืชื ืืจืืฉืื ื.
Azure CosmosDB
ืืืืื ืคืืืชื, ืื ืฉื ืืืจ ืืขืื ืขื ArangoDB ื-OrientDB ืื ืขื Azure CosmosDB. CosmosDB ืืกืคืง ืืช ืืืฉืงื ื-API ืืืืื ืืืืฉื ืื ืชืื ืื: SQL, MongoDB, Gremlin ื-Cassandra.
SQL API ื-MongoDB API ืืฉืืฉืื ืืืืฉื ืื ืชืื ืื ืืืืื ืืืกืื. Gremlin API ื- Cassandra API - ืืืืฉื ืื ืชืื ืื ืืคืืจืืืื ืฉื ืืจืคืื ืืขืืืืืช, ืืืชืืื. ืื ืชืื ืื ืืื ืืืืืื ื ืฉืืจืื ืืคืืจืื ืืืืื ืืคื ืืื ืฉื CosmosDB:
ืืื ืืืื ืื ืชืื ืื ืฉื ืืืจ ืขื ืืื ืืืฉืชืืฉ ืื-API ืื ื ืขืฉื ืฉืืืืฉ ืงืืืขืื ืืืื ืืฆืืจืช ืืฉืืื ืืฉืืจืืช. ืื ื ืืชื ืืืฉืช ืื ืชืื ืื ืืืขืื ืื ืืืื ืืื ืืคืืจืื ืฉื ืืื ืืืจ, ืืคื ืฉืืืืืฉ ืืฉืื ืืื ืื:
ืืคืืื, ืจืืืื ืืืืืื ื-Azure CosmosDB ืืืื ืืื ืจืง ืืืืืืช ืืืฉืชืืฉ ืืืกืคืจ ืืกืื ื ืชืื ืื ืืชืืืืื ืืืืืื ืฉืื ืื ืืืฆืจื ืืื, ืื ืฉืื ืคืืชืจ ืืช ืื ืืืขืืืช ืฉื ืืืกืื ืจื-ืืืจืืืฆืืืช.
DBMS ืจืืืื ืืืืืื ืืืืืกืกืื ืขื ืืืื ืืจืฃ?
ืจืืืื ืืฆืืื ืืขืืืื ืฉืขืืืื ืืื ืืฉืืง DBMSs ืืจืืื ืืืืื ืืืืืกืกืื ืขื ืืืื ืืจืฃ (ืืืขื ืชืืืื ืืจืืืื ืืืืื ืขืืืจ ืฉื ื ืืืื ืืจืคืื ืื ืืื ืืช: RDF ื-LPG; ืจืื ืืืช ื
ืืฉืืื ืืืฆื ืืืืฉื ืืืื ืืืกื ืขื ืืื ืืืื ืืืจืฃ ื ืฉืงืืื ืขืื ืืืืื ืืืืืฆืจืืชื ืฉื ืืืืจืื. ืึตืื
ืืื ืฉืื ืืืจ ืืืืข ืืืืฉืช ืืืจืคืื ืฉืืื ืข ืืฆืืจืช ืฉืืื (ืืืฉื, ืขื ืืื ืืื ืืงืก ืืชืืื) ืขื ืืกื ื ืชืื ืื ืืจืคืื ืืืืคืฉืจืช ืชืฆืืื ืืืกืืช ืขื (1) ืฉืืืืจ ืฉื tuples ืืืืืืช ืขืจืื ืืคืชื ืจืืืืื ื-2) ืงืืืืฅ ืฉื tuples ืืคื ืกืื ืืืก.
ืืขืช ืืืฉืื ืืืื ืืกืื ืขื ืืื ืืืื ืืจืฃ, ืขืืื ืืืืืจ, ืืืฉื, ืืช ืืืืจืื ืืืืื:
- ืืืื ืืื ืฉื ืืขืจื JSON ื ืืฉืืื ืืกืืืจืื, ืื ืืื ืฉืืงืืจื ืืงืืืงืื ืฉื ืงืฆื ืฉื ืืืจืฃ ืืื ื ืืกืืืจืื;
- ืื ืชืื ืื ืืืืื ืืืกืื ืืืืืืื ืืืจื ืืื; ืขืืืื ืืื ื ืจืืฆื ืืืืกื ืืกืคืจ ืขืืชืงืื ืฉื ืืืชื ืืกืื ืืืืืข, ืืืืกืืื ืืฉื ื ืืืจื ืืื ืืื ืืืืื;
- ืืฆื ืฉื ื, ืืืืืืืืืืืื ืฉื DBMSs ืฉื ืืกืืืื ืืื ืฉืืกืืืื ืื "ืืืจืืืื" ืืืื ืื ืฉืื ืฆืจืื ืืื ืืช ืืืืฉ ืืื ืคืขื. ื ืืจืฉ ืืกืคืง ืืืืื ืืืจืฃ ืืช ืืืืืืช ืืืฉืื ืืืืืจืืช ืชืช-ืืจืฃ ืืืชืืื ืืืกืื ืืืืืืจ.
ืงืฆืช ืคืจืกืื
ืืืชื ืืืืืจ ืงืฉืืจ ืืคืืชืื ื-NitrosBase DBMS, ืฉืืืืื ืืคื ืืื ืฉืื ืืื ืืจืฃ, ืืืืืืืื ืืืืฆืื ืืื - ืจืืฆืืื ืืื ืืืกืืืื - ืื ืืืฆืืืื. ืื ืืืืืื ืฉืืืื: ืืืขื ืื ื ืชืื ืื ืืืื ืื ืืื ืืื ืืื ืืืืฆืขืืช ืฉืคืช ืฉืืืืชื ืืืขืืช ืื. ืืชืจื ืืื, ืืื ืชืฆืืื, ื ืืชื ืืฉื ืืช ืืช ืื ืชืื ืื. ืฉืื ืืืื ืืืืื ืืืื ืืืืื ืืืืื ืืคื ืืื ืืืืชืื ืื ืืืฉืงืคืืช ืืืจืืช.
ืื ื ืืงืืื ืฉืืชืืจ ืืื ื ืจืืืช ืืชืืืช ืืืืื ื- NitrosBase ืืืื ืืืืืืจืื ืืืืื.
ืืกืงื ื
ืื ื ืืงืืื ืฉืืงืืืื ืืืืืืื ืฉื ืื ืฉื ืงืจื ืืืืื-ืืืืืื ื ืืคืื ืคืืืช ืื ืืืชืจ ืืจืืจืื ืืงืืจื. DBMSs ืจืืืื ืืืืื ืฉืื ืื ืืืื, ื"ืชืืืื ืืจืืืื ืืืืื" ืืืืื ืืืืจืืืช ืืืจืช. ืืื ืืืืื ืื ื ืงืจื "ืืืืื-ืืืื" ืืื ืืงืจื ืกืคืฆืืคื, ืืืื ืืขื ืืช ืขื ืืฉืืืืช ืืืืืช:
- ืืื ืื ืื ื ืืืืจืื ืขื ืชืืืื ืืืืืืื ืืกืืจืชืืื ืื ืขื ืืืืฉืื ืืืื "ืืืืจืืื"?
- ืืื ืืืืืื "ืฉืืืื", ืื ืฉืืื ืืื ื ืืฉื ืืืืจืื?
- ืืื ืืืืืื "ืืืืฉืื" ืื ืืื? ืืื ื ืืชื ืืงืจืื ื ืชืื ืื ืฉื ืืชืื ืืืืื ืืื ืืืืื ืืืจ ืื ืืคืืื ืืืจืืก?
ืื ื ืืืฉื ืฉืืืจ ืืคืฉืจ ืืขื ืืช ืืืืื ืขื ืืฉืืื ืืืื ืืจืืืื ืืืืช ืฉื DBMS ืจื-ืืืืืื, ืืื ืืฉืืื ืืืขื ืืื ืช ืืื ืืืื ืกืืืื ืืื ืืืื ืืืืงืฉืื ืืืชืจ ืืขืชืื ืืงืจืื. ื ืจืื ืื DBMSs ืืจืืื ืืืืืื ืืชืืืืื ืืืืืืื ืืกืืจืชืืื, ืืขืืงืจ ืืืกืืื, ืืืื ืืืืงืฉืื ืืืชืจ; ืืคืืคืืืจืืืช ืฉื DBMS ืืจืืื ืืืืื, ืืืฆืืขืื ืืืืื ืืืฉืื ืืืฉืืืื ืืช ืืืชืจืื ืืช ืฉื ืืืืื ืืกืืจืชืืื ืฉืื ืื, ืืื ืขื ืืื ืฉื ืืขืชืื ืืจืืืง ืืืชืจ.
ืจืง ืืฉืชืืฉืื ืจืฉืืืื ืืืืืื ืืืฉืชืชืฃ ืืกืงืจ.
ืืื ืืชื ืืฉืชืืฉ ื-DBMS ืืจืืื ืืืืืื?
-
ืื ืื ื ืื ืืฉืชืืฉืื ืืื, ืื ืื ื ืืืืกื ืื ืืื ื-DBMS ืืื ืืืืื ืืื
-
ืื ื ืืฉืชืืฉืื ืืืืืืืช ืืจืืืืช ืืืืื ืฉื DBMS ืืกืืจืชืืื
-
ืื ื ืืชืจืืืื ืืชืืื ืืจืืืช ืขืื ืืื
-
ืื ื ืืฉืชืืฉืื ื-DBMS ืจื-ืืืืืื ืืืฉ (Arango, Orient, CosmosDB)
19 ืืฉืชืืฉืื ืืฆืืืขื. 4 ืืฉืชืืฉืื ื ืื ืขื.
ืืงืืจ: www.habr.com