Awọn ọna ṣiṣe alaye ode oni jẹ eka pupọ. Ko kere ju gbogbo wọn lọ, idiju wọn jẹ nitori idiju ti data ti a ṣe ilana ninu wọn. Idiju ti data nigbagbogbo wa ni ọpọlọpọ awọn awoṣe data ti a lo. Nitorina, fun apẹẹrẹ, nigbati data ba di "nla", ọkan ninu awọn abuda iṣoro kii ṣe iwọn didun rẹ nikan ("iwọn didun"), ṣugbọn orisirisi rẹ ("orisirisi").
Ti o ko ba ti rii abawọn ninu ero, lẹhinna ka siwaju.

Awọn akoonu
Iduroṣinṣin Polyglot
Eyi ti o wa loke yori si otitọ pe nigbakan paapaa laarin ilana ti eto kan o jẹ dandan lati lo ọpọlọpọ awọn oriṣiriṣi DBMS lati tọju data ati yanju awọn iṣoro pupọ ti sisẹ wọn, ọkọọkan eyiti o ṣe atilẹyin awoṣe data tirẹ. Pelu owo imole M. Fowler, nọmba kan ti olokiki awọn iwe ohun ati ọkan ninu awọn Agile Manifesto, ipo yii ni a pe olona-iyatọ ipamọ ("polyglot itẹramọṣẹ").
Fowler tun ni apẹẹrẹ atẹle ti siseto ibi ipamọ data ni ẹya kikun ati ohun elo fifuye giga ni aaye ti iṣowo e-commerce.

Apeere yii, dajudaju, jẹ abumọ diẹ, ṣugbọn diẹ ninu awọn ero ni ojurere ti yiyan ọkan tabi miiran DBMS fun idi ti o baamu ni a le rii, fun apẹẹrẹ, .
Ó ṣe kedere pé jíjẹ́ ìránṣẹ́ ní irú ọgbà ẹranko bẹ́ẹ̀ kò rọrùn.
- Iwọn koodu ti o ṣe ibi ipamọ data dagba ni ibamu si nọmba awọn DBMS ti a lo; iye data mimuuṣiṣẹpọ koodu dara ti ko ba ni ibamu si square ti nọmba yii.
- Gẹgẹbi ọpọ nọmba ti awọn DBMS ti a lo, awọn idiyele ti ipese awọn abuda ile-iṣẹ (iwọn iwọn, ifarada ẹbi, wiwa giga) ti ọkọọkan awọn DBMS ti a lo.
- Ko ṣee ṣe lati rii daju awọn abuda ile-iṣẹ ti eto ipilẹ-ipamọ bi odidi - ni pataki idunadura.
Lati oju wiwo ti oludari zoo, ohun gbogbo dabi eyi:
- Ilọsi pupọ ni idiyele awọn iwe-aṣẹ ati atilẹyin imọ-ẹrọ lati ọdọ olupese DBMS.
- Overstaffing ati ki o pọ akoko ipari.
- Awọn adanu owo taara tabi awọn ijiya nitori aiṣedeede data.
Ilọsi pataki kan wa ninu idiyele lapapọ ti ohun-ini (TCO). Ṣe eyikeyi ọna jade ninu awọn ipo ti "ọpọ ipamọ awọn aṣayan"?
Olona-awoṣe
Ọrọ naa “ibi ipamọ pupọ” wa si lilo ni ọdun 2011. Imọye ti awọn iṣoro ti ọna ati wiwa ojutu kan gba ọpọlọpọ ọdun, ati nipasẹ 2015, nipasẹ ẹnu awọn atunnkanka Gartner, idahun ti ṣe agbekalẹ:
- Lati"»:
Ọjọ iwaju ti awọn DBMS, awọn faaji wọn ati awọn ọna ti lilo wọn jẹ awoṣe pupọ.
- Lati"»:
Awọn DBMS iṣiṣẹ ti o ni idari yoo funni ni awọn awoṣe pupọ — ibatan ati ti kii ṣe ibatan-gẹgẹbi apakan ti iru ẹrọ kan.
O dabi pe ni akoko yii awọn atunnkanka Gartner ni ẹtọ pẹlu asọtẹlẹ wọn. Ti o ba lọ si oju-iwe pẹlu DBMS lori DB-Engine, o le ri peоPupọ julọ ti awọn oludari rẹ ni ipo ara wọn ni pataki bi awọn awoṣe DBMS pupọ-pupọ. Bakanna ni a le rii lori oju-iwe pẹlu eyikeyi idiyele ikọkọ.
Tabili ti o wa ni isalẹ fihan DBMS - awọn oludari ni ọkọọkan awọn idiyele ikọkọ, eyiti o sọ pe o jẹ awoṣe pupọ. Fun DBMS kọọkan, awoṣe atilẹyin atilẹba (eyiti o jẹ ọkan nikan) ati pẹlu rẹ awọn awoṣe atilẹyin lọwọlọwọ jẹ itọkasi. Paapaa ti a ṣe akojọ ni awọn DBMS ti o gbe ara wọn si “apẹrẹ olona-pipe” ati, ni ibamu si awọn olupilẹṣẹ, ko ni awoṣe jogun akọkọ eyikeyi.
| DBMS | Awoṣe akọkọ | Awọn awoṣe afikun |
|---|---|---|
| Ebora | Ibasepo | Aworan, iwe |
| MS SQL | Ibasepo | Aworan, iwe |
| PostgreSQL | Ibasepo | Aworan *, iwe aṣẹ |
| MarkLogic | Iwe akosile | Aworan, ibatan |
| MongoDB | Iwe akosile | Iye bọtini, aworan * |
| DataStax | Jakejado-iwe | Iwe akọọlẹ, aworan |
| Redis | Key-iye | Iwe itan, aworan* |
| ArangoDB | - | Aworan, iwe |
| OrientDB | - | Aworan, iwe, ibatan |
| Azure CosmosDB | - | Aworan, iwe, ibatan |
Awọn akọsilẹ lori tabili
Awọn ami akiyesi ninu tabili samisi awọn alaye ti o nilo awọn ifiṣura:
- PostgreSQL DBMS ko ṣe atilẹyin awoṣe data ayaworan, ṣugbọn ọja yii ṣe atilẹyin , gẹgẹ bi awọn AgensGraph.
- Ni ibatan si MongoDB, o tọ diẹ sii lati sọrọ nipa wiwa awọn oniṣẹ ayaworan ni ede ibeere (, ) ju nipa atilẹyin awoṣe ayaworan, botilẹjẹpe, dajudaju, ifihan wọn nilo diẹ ninu awọn iṣapeye ni ipele ibi ipamọ ti ara ni itọsọna ti atilẹyin awoṣe iwọn.
- Ni ibatan si Redis, a tumọ si itẹsiwaju .
Nigbamii, fun ọkọọkan awọn kilasi, a yoo ṣafihan bii atilẹyin fun awọn awoṣe pupọ ṣe ṣe imuse ni DBMS lati kilasi yii. A yoo ṣe akiyesi ibatan, iwe-ipamọ ati awọn awoṣe ayaworan lati jẹ pataki julọ ati lo awọn apẹẹrẹ ti awọn DBMS kan pato lati ṣafihan bii “awọn ti o padanu” ti ṣe imuse.
Olona-awoṣe DBMS da lori awọn ibatan awoṣe
Awọn DBMS asiwaju lọwọlọwọ jẹ ibatan; Ati pe wọn ṣe afihan. Bayi ero pe DBMS awoṣe-pupọ dabi ọbẹ Swiss, eyiti ko le ṣe ohunkohun daradara, le ṣe itọsọna taara si Larry Ellison.
Onkọwe naa, sibẹsibẹ, fẹran imuse ti ọpọlọpọ awoṣe ni Microsoft SQL Server, lori apẹẹrẹ eyiti atilẹyin RDBMS fun iwe ati awọn awoṣe ayaworan yoo ṣe apejuwe.
Awoṣe iwe ni MS SQL Server
Awọn nkan ti o tayọ meji ti wa tẹlẹ lori Habré nipa bii MS SQL Server ṣe n ṣe atilẹyin fun awoṣe iwe-ipamọ Emi yoo fi opin si ara mi si sisọ kukuru ati asọye:
Ọna lati ṣe atilẹyin awoṣe iwe-ipamọ ni MS SQL Server jẹ aṣoju pupọ fun awọn DBMS ti ibatan: Awọn iwe aṣẹ JSON ni a daba lati wa ni fipamọ ni awọn aaye ọrọ lasan. Atilẹyin fun awoṣe iwe ni lati pese awọn oniṣẹ pataki lati ṣe itupalẹ JSON yii:
- lati jade awọn iye abuda scalar,
- lati jade awọn iwe-ipin.
Awọn ariyanjiyan keji ti awọn oniṣẹ mejeeji jẹ ikosile ni JSONPath-like syntax.
Ni aibikita, a le sọ pe awọn iwe aṣẹ ti o fipamọ ni ọna yii kii ṣe “awọn ile-iṣẹ kilasi akọkọ” ni DBMS ibatan, ko dabi awọn tuples. Ni pataki, ninu MS SQL Server ko si awọn atọka lọwọlọwọ lori awọn aaye ti awọn iwe aṣẹ JSON, eyiti o jẹ ki o nira lati darapọ mọ awọn tabili ni lilo awọn iye ti awọn aaye wọnyi ati paapaa yan awọn iwe aṣẹ nipa lilo awọn iye wọnyi. Sibẹsibẹ, o ṣee ṣe lati ṣẹda iwe iṣiro fun iru aaye kan ati atọka lori rẹ.
Ni afikun, MS SQL Server n pese agbara lati ni irọrun kọ iwe JSON kan lati inu awọn akoonu ti awọn tabili ni lilo oniṣẹ ẹrọ. - seese, ni ọna kan, idakeji si ti tẹlẹ, ibi ipamọ aṣa. O han gbangba pe laibikita bawo ni RDBMS ṣe yara to, ọna yii tako imọran ti awọn DBMS iwe, eyiti o tọju awọn idahun ti a ti ṣetan si awọn ibeere olokiki, ati pe o le yanju awọn iṣoro irọrun ti idagbasoke, ṣugbọn kii ṣe iyara.
Ni ipari, MS SQL Server n gba ọ laaye lati yanju iṣoro onidakeji ti ikole iwe: o le decompose JSON sinu awọn tabili nipa lilo . Ti iwe naa ko ba jẹ alapin patapata, iwọ yoo nilo lati lo CROSS APPLY.
Awoṣe ayaworan ni MS SQL Server
Atilẹyin fun awoṣe ayaworan (LPG) tun jẹ imuse ni kikun ni Microsoft SQL Server : O ti wa ni dabaa lati lo pataki tabili lati fi awọn apa ati lati fi awọn egbegbe awonya. Iru tabili ti wa ni da lilo expressions CREATE TABLE AS NODE и CREATE TABLE AS EDGE awọn atẹle.
Awọn tabili ti oriṣi akọkọ jẹ iru awọn tabili lasan fun titoju awọn igbasilẹ, pẹlu iyatọ ita nikan ni pe tabili ni aaye eto kan. $node_id - idamo alailẹgbẹ ti oju-ọna aworan kan laarin aaye data.
Bakanna, awọn tabili ti iru keji ni awọn aaye eto $from_id и $to_id, awọn titẹ sii ni iru awọn tabili ṣe asọye awọn asopọ laarin awọn apa. A ti lo tabili lọtọ lati tọju awọn ibatan ti iru kọọkan.
Ẹ jẹ́ ká ṣàkàwé èyí pẹ̀lú àpẹẹrẹ kan. Jẹ ki data iyaya ni ipilẹ kan bi eyiti o han ninu eeya. Lẹhinna lati ṣẹda eto ti o baamu ninu aaye data o nilo lati ṣiṣe awọn ibeere DDL wọnyi:
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);Ni pato pataki ti iru awọn tabili ni pe ninu awọn ibeere lodi si wọn o ṣee ṣe lati lo awọn ilana ayaworan pẹlu sintasi bii Cypher ( sibẹsibẹ, “*"ati bẹbẹ lọ ko ti ni atilẹyin). Da lori awọn wiwọn iṣẹ, o tun le ro pe ọna ti a fipamọ data sinu awọn tabili wọnyi yatọ si ọna ti a fipamọ data sinu awọn tabili deede ati pe o jẹ iṣapeye fun ṣiṣe iru awọn ibeere iyaya.
SELECT Cafe.name
FROM Person, likes, Cafe
WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
AND Person.name = 'John';Pẹlupẹlu, o ṣoro pupọ lati ma lo awọn ilana ayaworan wọnyi nigbati o ba n ṣiṣẹ pẹlu iru awọn tabili bẹ, nitori ni awọn ibeere SQL lasan lati yanju awọn iṣoro ti o jọra yoo jẹ pataki lati ṣe awọn ipa afikun lati gba awọn idamọ oju ipade “awọn aworan” eto ($node_id, $from_id, $to_id; Fun idi kanna, awọn ibeere fun fifi data sii ko han nibi bi wọn ṣe lewu lainidi).
Lati ṣe akopọ apejuwe awọn imuse ti iwe-ipamọ ati awọn awoṣe aworan ni MS SQL Server, Emi yoo ṣe akiyesi pe iru awọn imuse ti awoṣe kan lori oke miiran ko dabi aṣeyọri, nipataki lati oju wiwo ti apẹrẹ ede. O jẹ dandan lati faagun ede kan pẹlu omiiran, awọn ede ko jẹ “orthogonal” patapata, awọn ofin ibamu le jẹ ohun ajeji.
Olona-awoṣe DBMS da lori iwe awoṣe
Ni apakan yii, Emi yoo fẹ lati ṣe apejuwe imuse ti ọpọlọpọ awoṣe ni awọn DBMS iwe nipa lilo apẹẹrẹ ti kii ṣe olokiki julọ ninu wọn, MongoDB (gẹgẹbi a ti sọ, o ni awọn oniṣẹ ayaworan ipo nikan $lookup и $graphLookup, ko ṣiṣẹ lori awọn ikojọpọ gbigbẹ), ṣugbọn lilo apẹẹrẹ ti ogbo diẹ sii ati “iṣẹ-iṣẹ” DBMS .
Nitorinaa, jẹ ki ikojọpọ ni akojọpọ awọn iwe XML ti iru atẹle naa (MarkLogic tun gba ọ laaye lati tọju awọn iwe aṣẹ JSON):
<Person INN="631803299804">
<name>John</name>
<surname>Smith</surname>
</Person>Awoṣe ibatan ni MarkLogic
Wiwo ibatan ti akojọpọ awọn iwe aṣẹ le ṣee ṣẹda ni lilo (awọn akoonu ti awọn eroja value ninu apẹẹrẹ ni isalẹ o le jẹ XPath lainidii):
<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>O le koju wiwo ti o ṣẹda pẹlu ibeere SQL kan (fun apẹẹrẹ, nipasẹ ODBC):
SELECT name, surname FROM Person WHERE name="John"Laanu, wiwo ibatan ti o ṣẹda nipasẹ awoṣe ifihan jẹ kika-nikan. Nigbati o ba n ṣiṣẹ ibeere kan fun rẹ, MarkLogic yoo gbiyanju lati lo . Ni iṣaaju, MarkLogic ni awọn iwo ibatan to lopin, patapata ati ki o writable, ṣugbọn nisisiyi ti won ti wa ni kà deprecated.
Awoṣe ayaworan ni MarkLogic
Pẹlu atilẹyin fun awoṣe ayaworan (RDF), ohun gbogbo jẹ nipa kanna. Lẹẹkansi pẹlu iranlọwọ O le ṣẹda aṣoju RDF kan ti akojọpọ awọn iwe aṣẹ lati apẹẹrẹ loke:
<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>O le koju aworan RDF ti o yọrisi pẹlu ibeere SPARQL kan:
PREFIX : <http://example.org/example#>
SELECT ?name ?surname {
:631803299804 :name ?name ; :surname ?surname .
}Ko dabi ọkan ibatan, MarkLogic ṣe atilẹyin awoṣe ayaworan ni awọn ọna miiran meji:
- DBMS le jẹ ibi ipamọ lọtọ ti o ni kikun ti data RDF (awọn mẹta ninu rẹ yoo pe ni idakeji si awon ti salaye loke ).
- RDF ni pataki serialization le jiroro ni fi sii sinu XML tabi JSON awọn iwe aṣẹ (ati awọn meteta yoo wa ni a npe ni ). Eleyi jẹ jasi yiyan si awọn ilana
idrefabbl.
Imọran ti o dara ti bii awọn nkan “gan” ṣiṣẹ ni MarkLogic ni a fun nipasẹ , ni ori yii, o jẹ ipele-kekere, biotilejepe idi rẹ jẹ dipo idakeji - lati gbiyanju lati ṣe abọtẹlẹ lati inu awoṣe data ti a lo, lati rii daju pe iṣẹ ti o ni ibamu pẹlu data ni awọn awoṣe oriṣiriṣi, iṣowo, ati bẹbẹ lọ.
Awoṣe pupọ DBMS “laisi awoṣe akọkọ kan”
Awọn DBMS tun wa lori ọja ti o gbe ara wọn si bi awoṣe olona-pupọ ni ibẹrẹ, laisi awoṣe akọkọ ti jogun. Iwọnyi pẹlu , (niwon 2018 ile-iṣẹ idagbasoke jẹ ti SAP) ati (iṣẹ bi apakan ti Microsoft Azure awọsanma Syeed).
Ni otitọ, awọn awoṣe “mojuto” wa ni ArangoDB ati OrientDB. Ni awọn ọran mejeeji, iwọnyi jẹ awọn awoṣe data tiwọn, eyiti o jẹ gbogbogbo ti iwe-ipamọ ọkan. Awọn ijumọsọrọpọ jẹ nipataki lati dẹrọ agbara lati ṣe awọn ibeere ti iyaya kan ati iseda ibatan.
Awọn awoṣe wọnyi nikan ni o wa fun lilo ninu DBMS ti a ti sọ tẹlẹ; Nitoribẹẹ, iru awọn awoṣe ati awọn DBMS jẹ ileri, ṣugbọn aisi ibamu pẹlu awọn awoṣe boṣewa ati awọn ede jẹ ki o ṣee ṣe lati lo awọn DBMS wọnyi ni awọn ọna ṣiṣe-lati rọpo awọn DBMS ti a ti lo tẹlẹ nibẹ.
Nkan iyanu tẹlẹ ti wa nipa ArangoDB ati OrientDB lori Habré: .
ArangoDB
ArangoDB nperare atilẹyin fun awoṣe data iyaya kan.
Awọn apa ti iwọn ni ArangoDB jẹ awọn iwe aṣẹ lasan, ati awọn egbegbe jẹ awọn iwe aṣẹ ti iru pataki kan ti, pẹlu awọn aaye eto deede, ni (_key, _id, _rev) awọn aaye eto _from и _to. Awọn iwe aṣẹ ti o wa ninu awọn DBMS iwe-ipamọ jẹ idapọpọ aṣa si awọn akojọpọ. Awọn akojọpọ awọn iwe aṣẹ ti o nsoju awọn egbegbe ni a pe ni awọn ikojọpọ eti ni ArangoDB. Nipa ọna, awọn iwe ikojọpọ eti tun jẹ awọn iwe aṣẹ, nitorinaa awọn egbegbe ni ArangoDB tun le ṣe bi awọn apa.
Orisun orisun
Jẹ ki a ni gbigba personsAwọn iwe aṣẹ rẹ dabi eyi:
[
{
"_id" : "people/alice" ,
"_key" : "alice" ,
"name" : "Алиса"
},
{
"_id" : "people/bob" ,
"_key" : "bob" ,
"name" : "Боб"
}
]Jẹ ki o tun jẹ gbigba cafes:
[
{
"_id" : "cafes/jd" ,
"_key" : "jd" ,
"name" : "Джон Донн"
},
{
"_id" : "cafes/jj" ,
"_key" : "jj" ,
"name" : "Жан-Жак"
}
]Lẹhinna gbigba likes le dabi eyi:
[
{
"_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
}
]Awọn ibeere ati awọn esi
Ibeere ara-ayaya ni ede AQL ti a lo ni ArangoDB, ti n pada ni alaye fọọmu ti eniyan le ka nipa ẹniti o fẹran kafe wo, dabi eyi:
FOR p IN persons
FOR c IN OUTBOUND p likes
RETURN { person : p.name , likes : c.name }Ni ọna ti o ni ibatan, nibiti a ti n ṣe “iṣiro” awọn ibatan dipo fifipamọ wọn, ibeere yii le tun kọ bii eyi (nipasẹ ọna, laisi gbigba likes le ṣe laisi):
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 }Abajade ni awọn ọran mejeeji yoo jẹ kanna:
[
{ "person" : "Алиса" , likes : "Жан-Жак" } ,
{ "person" : "Алиса" , likes : "Джон Донн" } ,
{ "person" : "Боб" , likes : "Джон Донн" }
]Awọn ibeere ati awọn abajade diẹ sii
Ti ọna kika abajade loke dabi pe o jẹ aṣoju diẹ sii fun DBMS ibatan ju fun DBMS iwe, o le gbiyanju ibeere yii (tabi o le lo ):
FOR p IN persons
RETURN {
person : p.name,
likes : (
FOR c IN OUTBOUND p likes
RETURN c.name
)
}Abajade yoo dabi eyi:
[
{ "person" : "Алиса" , likes : ["Жан-Жак" , "Джон Донн"] } ,
{ "person" : "Боб" , likes : ["Джон Донн"] }
]OrientDB
Ipilẹ fun imuse awoṣe ayaworan kan lori oke awoṣe iwe ni OrientDB jẹ awọn aaye iwe aṣẹ, ni afikun si diẹ sii tabi kere si awọn iye iwọnwọn boṣewa, tun ni awọn iye ti awọn iru bii LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Awọn iye ti awọn iru wọnyi jẹ awọn ọna asopọ tabi awọn akojọpọ awọn ọna asopọ si awọn iwe aṣẹ.
Idanimọ iwe ti a yàn nipasẹ eto naa ni “itumọ ti ara”, ti n tọka si ipo igbasilẹ ninu ibi ipamọ data, ati pe o dabi iru eyi: @rid : #3:16. Nitorinaa, awọn iye ti awọn ohun-ini itọkasi jẹ awọn itọkasi gaan (bii ninu awoṣe ayaworan) dipo awọn ipo yiyan (bii ninu awoṣe ibatan).
Bii ArangoDB, awọn egbegbe ni OrientDB jẹ aṣoju bi awọn iwe aṣẹ lọtọ (botilẹjẹpe ti eti ko ba ni awọn ohun-ini tirẹ, o le ṣe. , ati pe kii yoo ni ibamu si iwe ti o yatọ).
Orisun orisun
Ni ọna kika ti o sunmọ OrientDB database, data lati apẹẹrẹ ti tẹlẹ fun ArangoDB yoo dabi nkan bi eleyi:
[
{
"@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"
}
]Gẹgẹbi a ti le rii, awọn inaro tun tọju alaye nipa awọn egbegbe ti nwọle ati ti njade. Ni API Iwe-ipamọ naa ni lati ṣe atẹle iṣotitọ itọkasi funrararẹ, ati pe API Graph gba iṣẹ yii. Ṣugbọn jẹ ki a wo kini iraye si OrientDB ṣe dabi ni awọn ede ibeere “funfun” ti ko ṣepọ si awọn ede siseto.
Awọn ibeere ati awọn esi
Ibeere ti o jọra ni idi si ibeere lati apẹẹrẹ fun ArangoDB ni OrientDB dabi eyi:
SELECT name AS person_name, OUT('likes').name AS cafe_name
FROM Person
UNWIND cafe_nameAbajade yoo gba ni fọọmu atẹle:
[
{ "person_name": "Алиса", "cafe_name": "Джон Донн" },
{ "person_name": "Алиса", "cafe_name": "Жан-Жак" },
{ "person_name": "Боб", "cafe_name": "Жан-Жак" }
]Ti ọna kika abajade ba tun dabi “ibasepo”, o nilo lati yọ ila pẹlu :
[
{ "person_name": "Алиса", "cafe_name": [ "Джон Донн", "Жан-Жак" ] },
{ "person_name": "Боб", "cafe_name": [ "Жан-Жак" ' }
]Ede ibeere OrientDB le jẹ apejuwe bi SQL pẹlu awọn ifibọ Gremlin. Ninu ẹya 2.2, fọọmu ibeere bi Cypher kan han, :
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Ọna kika abajade yoo jẹ kanna bi ninu ibeere iṣaaju. Ronu nipa ohun ti o nilo lati yọkuro lati jẹ ki o jẹ “ibasepo” diẹ sii, bii ninu ibeere akọkọ.
Azure CosmosDB
Ni iwọn diẹ, ohun ti a sọ loke nipa ArangoDB ati OrientDB kan si Azure CosmosDB. CosmosDB n pese awọn API wiwọle data wọnyi: SQL, MongoDB, Gremlin ati Cassandra.
SQL API ati MongoDB API ni a lo lati wọle si data ninu awoṣe iwe. Gremlin API ati Cassandra API - fun iraye si data ni awọn ọna kika ati awọn ọna kika ọwọn, lẹsẹsẹ. Data ni gbogbo awọn awoṣe ti wa ni fipamọ ni ọna kika awoṣe inu CosmosDB: ("atom-record-sequence"), eyiti o tun sunmọ iwe-ipamọ ọkan.

Ṣugbọn awoṣe data ti olumulo yan ati API ti a lo jẹ ti o wa titi ni akoko ṣiṣẹda akọọlẹ kan ninu iṣẹ naa. Ko ṣee ṣe lati wọle si data ti kojọpọ ni awoṣe kan ni ọna kika awoṣe miiran, bi a ti ṣe afihan nipasẹ nkan bii eyi:

Nitorinaa, awoṣe pupọ ni Azure CosmosDB loni jẹ agbara nikan lati lo awọn apoti isura infomesonu pupọ ti n ṣe atilẹyin awọn awoṣe oriṣiriṣi lati ọdọ olupese kan, eyiti ko yanju gbogbo awọn iṣoro ti ibi-ipamọ iyatọ pupọ.
Olona-awoṣe DBMS da lori a awonya awoṣe?
Ohun akiyesi ni otitọ pe ko si awọn DBMS awoṣe-ọpọlọpọ lori ọja sibẹsibẹ ti o da lori awoṣe ayaworan kan (ayafi fun atilẹyin awoṣe pupọ fun awọn awoṣe ayaworan meji nigbakanna: RDF ati LPG; wo eyi ni ). Awọn iṣoro ti o tobi julọ ni o ṣẹlẹ nipasẹ imuse ti awoṣe iwe kan lori oke awoṣe iyaya kan, kuku ju ti ibatan kan.
Ibeere ti bii o ṣe le ṣe imuse awoṣe ibatan kan lori oke awoṣe ayaworan ni a gbero paapaa lakoko iṣelọpọ ti igbehin. Bawo fun apẹẹrẹ :
Ko si ohun ti o wa ninu ọna iyaya ti o ṣe idiwọ ṣiṣẹda Layer kan (fun apẹẹrẹ, nipasẹ titọka to dara) lori aaye data ayaworan kan ti o jẹ ki wiwo ibatan pẹlu (1) imularada tuples lati awọn orisii iye bọtini deede ati (2) akojọpọ ti tuples nipa iru ibatan.
Nigbati o ba n ṣe imuse awoṣe iwe kan lori oke awoṣe iyaya, o nilo lati tọju si ọkan, fun apẹẹrẹ, atẹle:
- Awọn eroja ti ọna JSON ni a kà pe o paṣẹ, ṣugbọn awọn ti o jade lati ibi-itaja ti eti ti awọnya kii ṣe;
- Awọn data ti o wa ninu awoṣe iwe-ipamọ jẹ deede ti ko ni iyasọtọ;
- Ni apa keji, imọran ti awọn DBMS iwe ni pe awọn iwe aṣẹ ti ṣetan “awọn akojọpọ” ti ko nilo lati kọ tuntun ni igba kọọkan. O nilo lati pese awoṣe iyaya pẹlu agbara lati yara gba ipin kekere kan ti o baamu si iwe ti o pari.
Ipolowo kekere kan
Onkọwe ti nkan naa ni ibatan si idagbasoke ti NitrosBase DBMS, awoṣe inu eyiti o jẹ ayaworan, ati awọn awoṣe ita - ibatan ati iwe - jẹ awọn aṣoju rẹ. Gbogbo awọn awoṣe jẹ dogba: fere eyikeyi data wa ni eyikeyi ninu wọn nipa lilo ede ibeere ti o jẹ adayeba si rẹ. Pẹlupẹlu, ni eyikeyi wiwo, data le yipada. Awọn iyipada yoo han ninu awoṣe inu ati, ni ibamu, ni awọn iwo miiran.
Emi yoo nireti ṣapejuwe kini ibaramu awoṣe dabi ni NitrosBase ninu ọkan ninu awọn nkan atẹle.
ipari
Mo nireti pe awọn ilana gbogbogbo ti ohun ti a pe ni awoṣe-ọpọlọpọ ti di diẹ sii tabi kere si kedere si oluka naa. Awọn DBMS ti ọpọlọpọ-awoṣe yatọ pupọ, ati “atilẹyin awoṣe pupọ” le wo oriṣiriṣi. Lati loye ohun ti a pe ni “apẹrẹ pupọ” ni ọran kọọkan, o wulo lati dahun awọn ibeere wọnyi:
- Njẹ a n sọrọ nipa atilẹyin awọn awoṣe ibile tabi diẹ ninu iru awoṣe “arabara”?
- Ṣe awọn awoṣe "dogba", tabi ọkan ninu wọn jẹ koko-ọrọ ti awọn miiran?
- Ṣe awọn awoṣe "aibikita" si ara wọn? Njẹ data ti a kọ sinu awoṣe kan le ka ni omiiran tabi paapaa kọkọ kọ?
Mo ro pe ibeere naa nipa ibaramu ti DBMS awoṣe-ọpọlọpọ le ti dahun tẹlẹ ni daadaa, ṣugbọn ibeere ti o nifẹ ni iru iru wọn yoo jẹ diẹ sii ni ibeere ni ọjọ iwaju nitosi. O dabi pe awọn DBMS awoṣe pupọ ti o ṣe atilẹyin awọn awoṣe ibile, nipataki ibatan, yoo wa ni ibeere nla; Gbaye-gbale ti awọn DBMS awoṣe-ọpọlọpọ, fifun awọn awoṣe tuntun ti o ṣajọpọ awọn anfani ti awọn oriṣiriṣi aṣa, jẹ ọrọ ti ọjọ iwaju ti o jinna diẹ sii.
Awọn olumulo ti o forukọsilẹ nikan le kopa ninu iwadi naa. , Jowo.
Ṣe o lo olona-awoṣe DBMS?
A ko lo o, a tọju ohun gbogbo ni DBMS kan ati ni awoṣe kan
A lo ọpọlọpọ-awoṣe agbara ti ibile DBMS
A niwa itẹramọṣẹ polyglot
A lo awoṣe olona tuntun DBMS (Arango, Orient, CosmosDB)
19 olumulo dibo. 4 olumulo abstained.
orisun: www.habr.com
