Ṣe awọn DBMS-ọpọ-awoṣe ipilẹ ti awọn eto alaye ode oni bi?

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.

Ṣe awọn DBMS-ọpọ-awoṣe ipilẹ ti awọn eto alaye ode oni bi?


Awọn akoonu

Iduroṣinṣin Polyglot
Olona-awoṣe
Olona-awoṣe DBMS da lori awọn ibatan awoṣe
     Awoṣe iwe ni MS SQL Server
     Awoṣe ayaworan ni MS SQL Server
Olona-awoṣe DBMS da lori iwe awoṣe
     Awoṣe ibatan ni MarkLogic
     Awoṣe ayaworan ni MarkLogic
Awoṣe pupọ DBMS “laisi awoṣe akọkọ kan”
     ArangoDB
     OrientDB
     Azure CosmosDB
Olona-awoṣe DBMS da lori a awonya awoṣe?
ipari
Iwọn didi

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, onkowe nọmba kan ti olokiki awọn iwe ohun ati ọkan ninu awọn àjọ-onkọwe 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.

Ṣe awọn DBMS-ọpọ-awoṣe ipilẹ ti awọn eto alaye ode oni bi?

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ẹ, nibi.

Ó ṣ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ẹ:

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 akọkọ Rating 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.

DBMSAwoṣe akọkọAwọn awoṣe afikun
EboraIbasepoAworan, iwe
MS SQLIbasepoAworan, iwe
PostgreSQLIbasepoAworan *, iwe aṣẹ
MarkLogicIwe akosileAworan, ibatan
MongoDBIwe akosileIye bọtini, aworan *
DataStaxJakejado-iweIwe akọọlẹ, aworan
RedisKey-iyeIwe 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 da lori rẹ, 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 ($lookup, $graphLookup) 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 RedisGraph.

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:

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ọ. FOR JSON PATH - 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 OPENJSON. 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 asọtẹlẹ: 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.

Ṣe awọn DBMS-ọpọ-awoṣe ipilẹ ti awọn eto alaye ode oni bi? Ẹ 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 MarkLogic.

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 àpapọ awoṣe (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 awọn atọka iwe. Ni iṣaaju, MarkLogic ni awọn iwo ibatan to lopin, patapata orisun atọka 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ọ àpapọ awoṣe 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:

  1. DBMS le jẹ ibi ipamọ lọtọ ti o ni kikun ti data RDF (awọn mẹta ninu rẹ yoo pe isakoso ni idakeji si awon ti salaye loke fa jade).
  2. 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 aiṣakoso). Eleyi jẹ jasi yiyan si awọn ilana idref abbl.

Imọran ti o dara ti bii awọn nkan “gan” ṣiṣẹ ni MarkLogic ni a fun nipasẹ API Optical, 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 ArangoDB, OrientDB (niwon 2018 ile-iṣẹ idagbasoke jẹ ti SAP) ati CosmosDB (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é: Darapọ mọ awọn ibi ipamọ data NoSQL.

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 COLLECT):

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ẹ anfaani 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 eto idamo 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. fẹẹrẹfẹ, ati pe kii yoo ni ibamu si iwe ti o yatọ).

Orisun orisun

Ni ọna kika ti o sunmọ idasonu kika 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 lilo 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_name

Abajade 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 UNWIND():

[
  { "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 :

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: Ars ("atom-record-sequence"), eyiti o tun sunmọ iwe-ipamọ ọkan.

Ṣe awọn DBMS-ọpọ-awoṣe ipilẹ ti awọn eto alaye ode oni bi?

Ṣ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:

Ṣe awọn DBMS-ọpọ-awoṣe ipilẹ ti awọn eto alaye ode oni bi?

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 ti tẹlẹ atejade). 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 ti sọrọfun apẹẹrẹ David McGovern:

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:

  1. Njẹ a n sọrọ nipa atilẹyin awọn awoṣe ibile tabi diẹ ninu iru awoṣe “arabara”?
  2. Ṣe awọn awoṣe "dogba", tabi ọkan ninu wọn jẹ koko-ọrọ ti awọn miiran?
  3. Ṣ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. wọle, 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

Fi ọrọìwòye kun