Qaababka badan ee DBMS-yadu ma yihiin saldhigga nidaamyada macluumaadka casriga ah?

Nidaamyada macluumaadka casriga ah waa kuwo aad u adag. Ugu yaraan dhammaan, kakankooda waxaa sabab u ah kakanaanta xogta lagu farsameeyay iyaga. Kakanaanta xogtu waxay inta badan ku jirtaa noocyada xogta ee la isticmaalo. Sidaa darteed, tusaale ahaan, marka xogtu noqoto "weyn", mid ka mid ah sifooyinka dhibka leh ma aha oo kaliya mugga ("mugga"), laakiin sidoo kale kala duwanaansho ("kala duwan").

Haddii aadan weli helin cillad xagga sababaynta, ka dib akhri.

Qaababka badan ee DBMS-yadu ma yihiin saldhigga nidaamyada macluumaadka casriga ah?


Tusmo

Adkeysiga Polyglot
Qaabab badan
Qaababka badan ee DBMS oo ku salaysan qaabka xidhiidhka
     Qaabka dukumeentiga ee MS SQL Server
     Qaabka sawirka ee MS SQL Server
Qaababka badan ee DBMS oo ku salaysan qaabka dukumeentiga
     Qaabka xidhiidhka ee MarkLogic
     Qaabka sawirka ee MarkLogic
Qaababka badan ee DBMS "la'aanteed nooc weyn"
     ArangoDB
     OrientDB
     Azure CosmosDB
Qaababka badan ee DBMS oo ku salaysan qaabka garaaf?
gunaanad
Poll

Adkeysiga Polyglot

Kor ku xusan waxay keenaysaa xaqiiqda ah in mararka qaarkood xitaa qaabdhismeedka hal nidaam ay lagama maarmaan tahay in la isticmaalo dhowr DBMS-yada kala duwan si loo kaydiyo xogta loona xalliyo dhibaatooyinka kala duwan ee iyaga ka mid ah, kuwaas oo mid kastaa uu taageerayo qaabka xogta gaarka ah. Gacanta iftiinka ee M. Fowler, qoraa tiro buugaag caan ah iyo mid ka mid ah wada qorayaasha Agile Manifesto, xaaladdan ayaa loo yaqaan kaydinta kala duwanaansho badan ("ku adkaysiga polyglot").

Fowler waxa kale oo uu leeyahay tusaalahan soo socda ee abaabulka kaydinta xogta ee codsi buuxa oo sifaysan oo sarreeya oo ku saabsan ganacsiga e-commerce.

Qaababka badan ee DBMS-yadu ma yihiin saldhigga nidaamyada macluumaadka casriga ah?

Tusaalahan, dabcan, waa xoogaa la buunbuuniyay, laakiin qaar ka mid ah tixgalinta doorasha hal ama mid kale DBMS ujeeddada u dhiganta ayaa la heli karaa, tusaale ahaan, halkan.

Way caddahay in adeege ka mid ahaanshaha xayawaankan oo kale aysan fududayn.

  • Qadarka koodka ee fulisa kaydinta xogta ayaa korodha iyadoo loo eegayo tirada DBMS-yada la isticmaalo; Qadarka xogta isku-xidhka koodku way fiican tahay haddii aanay u dhigmin labajibbaaran lambarkan.
  • Sida tiro badan oo ka mid ah tirada DBMS-yada la isticmaalo, kharashyada bixinta sifooyinka ganacsiga (scalability, cilladda, helitaanka sare) mid kasta oo ka mid ah DBMS-yada la isticmaalo ayaa kordhay.
  • Suurtagal maaha in la hubiyo sifooyinka ganacsiga ee nidaamka-hoosaadka kaydinta guud ahaan - gaar ahaan macaamil ganacsi.

Marka laga eego aragtida agaasimaha xayawaanka, wax walbaa waxay u eg yihiin sidan:

  • Koror badan oo ku yimid qiimaha shatiyada iyo taageerada farsamada ee soo saaraha DBMS.
  • Shaqaale xad dhaaf ah iyo waqtiyada kama dambaysta ah oo kordhay.
  • Khasaaraha maaliyadeed ee tooska ah ama ganaaxyada sababtoo ah iswaafaq la'aanta xogta.

Waxaa jira koror weyn oo ku yimid wadarta qiimaha lahaanshaha ee nidaamka (TCO). Ma jirtaa waddo looga baxo xaaladda "ikhtiyaarada kaydinta badan"?

Qaabab badan

Erayga "kaydinta badan" waxa la isticmaalay 2011kii. Ka warqabka dhibaatooyinka habka iyo xal raadinta ayaa qaadatay dhowr sano, iyo 2015, iyada oo loo marayo afka falanqeeyayaasha Gartner, jawaabta waxaa la sameeyay:

  • Ka yimid"Hagaha Suuqa ee NoSQL DBMSs - 2015»:

    Mustaqbalka DBMS-yada, qaab-dhismeedkooda iyo siyaabaha loo isticmaalo waa noocyo badan.

  • Ka yimid"Quadrant Magic ee ODBMS - 2016»:

    DBMS-yada hawl galka ah ee hogaaminaya waxay soo bandhigi doonaan noocyo badan oo xidhiidh ah iyo kuwo aan xidhiidh ahayn- oo qayb ka ah hal madal.

Waxay u muuqataa in waqtigan falanqeeyayaasha Gartner ay ku saxnaayeen saadaashii. Hadii aad bogga la gasho qiimeynta ugu weyn DBMS on DB-Engines, aad arki kartaa taasоInta badan hogaamiyayaasheeda ayaa si gaar ah isu dhiga sida DBMS-yada moodeelka badan. Isla sidaas ayaa lagu arki karaa bogga qiimeyn kasta oo gaar ah.

Jadwalka hoose wuxuu muujinayaa DBMS - hoggaamiyeyaasha mid kasta oo ka mid ah qiimeynta gaarka ah, kuwaas oo sheeganaya inay yihiin noocyo badan. DBMS kasta, moodeelkii asalka ahaa ee la taageeray (kaas oo mar ahaa kan keliya) iyo waxa la socda moodooyinka hadda la taageerayo ayaa la tilmaamayaa. Waxa kale oo lagu taxay DBMS-yada isu dhigaya inay yihiin "asal ahaan moodo-kala duwan" iyo, sida ay qabaan abuurayaashu, ma haystaan ​​nooc kasta oo la dhaxlo.

DBMS Qaabka hore Noocyo dheeri ah
Oracle Xiriir Sawir, dukumeenti
MS SQL Xiriir Sawir, dukumeenti
PostgreSQL Xiriir Sawir*, dukumeenti
MarkLogic Documentary Garaaf, xidhiidh
MongoDB Documentary Qiimaha furaha, garaaf*
DataStax Tiirka ballaaran Documentary, garaaf
Redis Qiimaha furaha Documentary, garaaf*
ArangoDB - Sawir, dukumeenti
OrientDB - Garaaf, dukumeenti, xiriir
Azure CosmosDB - Garaaf, dukumeenti, xiriir

Qoraallada miiska saaran

Xiddigaha shaxda ku jira waxay calaamadeeyaan weedhaha u baahan boos celin:

  • PostgreSQL DBMS ma taageerto qaabka xogta garaafka, laakiin alaabtani way taageertaa ku salaysan, sida AgensGraph.
  • Marka la eego MongoDB, way ka saxsan tahay in laga hadlo joogitaanka garaafyada luqadda weydiinta ($lookup, $graphLookup) marka loo eego taageeridda qaabka garaafyada, in kasta oo, dabcan, horudhackoodu uu u baahday qaar ka mid ah hagaajinta heerka kaydinta jireed ee jihada taageerada qaabka garaafka.
  • Marka la eego Redis, waxaan ula jeednaa kordhinta RedisGraph.

Marka xigta, mid kasta oo ka mid ah fasallada, waxaan ku tusi doonaa sida taageerada dhowr nooc loogu fuliyo DBMS fasalkan. Waxaan tixgelin doonaa xiriirka, dukumeentiyada iyo moodooyinka garaafyada inay yihiin kuwa ugu muhiimsan waxaana isticmaalnaa tusaalooyin DBMS-yada gaarka ah si aan u tuso sida "kuwa maqan" loo fuliyo.

Qaababka badan ee DBMS oo ku salaysan qaabka xidhiidhka

DBMS-yada hormuudka ah hadda waa kuwo xiriir ah; Saadaasha Gartner looma tixgelin karo run haddii RDBMS-yadu aysan muujin dhaqdhaqaaqa jihada qaabaynta badan. Oo ay muujiyaan. Hadda fikradda ah in DBMS-model-ka-badan ay la mid tahay mindida Swiss, oo aan si fiican wax u qaban karin, waxaa si toos ah loogu hagaajin karaa Larry Ellison.

Qoraagu, si kastaba ha ahaatee, wuxuu door bidaa hirgelinta moodeelka badan ee Microsoft SQL Server, tusaale ahaan taageerada RDBMS ee dukumentiyada iyo moodooyinka garaafyada ayaa lagu tilmaami doonaa.

Qaabka dukumeentiga ee MS SQL Server

Waxa horeba u jiray laba maqaal oo aad u wanaagsan oo ku saabsan Habré oo ku saabsan sida MS SQL Server u fuliyo taageerada moodeelka dukumeentiga; Waxaan naftayda ku koobayaa dib-u-eegis kooban iyo faallo:

Habka loo taageero qaabka dukumeentiga ee MS SQL Server waa wax caadi u ah DBMS-yada xidhiidhka ah: Dukumeentiyada JSON waxa la soo jeediyay in lagu kaydiyo goobaha qoraalka caadiga ah. Taageerada qaabka dukumeentigu waa in la siiyo hawl wadeeno gaar ah si ay u qiimeeyaan JSON:

Doodda labaad ee labada hawl wadeenadu waa odhaah ku jirta JSONPath-like syntax.

Dhab ahaantii, waxaan dhihi karnaa dukumeenti lagu kaydiyay habkan maaha "xubnaha fasalka koowaad" ee DBMS xiriir la leh, oo ka duwan tuples. Gaar ahaan, gudaha MS SQL Server hadda ma jiraan wax tilmaameyaal ah oo ku saabsan goobaha dukumeentiyada JSON, taas oo adkeynaysa in lagu biiro miisaska iyadoo la adeegsanayo qiyamka goobahan iyo xitaa dooro dukumeenti isticmaalaya qiyamkan. Si kastaba ha ahaatee, waxaa suurtagal ah in la abuuro tiir la xisaabiyay oo loogu talagalay goobtaas iyo tusaha ku yaal.

Intaa waxaa dheer, MS SQL Server wuxuu bixiyaa awood si ku habboon loogu dhiso dukumeenti JSON ah waxyaabaha ku jira miisaska iyadoo la adeegsanayo hawlwadeenka FOR JSON PATH - suurtogalnimada, dareen gaar ah, oo ka soo horjeeda kii hore, kaydinta caadiga ah. Way caddahay in si kasta oo degdeg ah RDBMS u yahay, habkani waxa uu ka hor imanayaa fikradda dukumeentiga DBMSs, kaas oo asal ahaan kaydiya jawaabaha diyaarsan ee su'aalaha caanka ah, oo kaliya xallin kara dhibaatooyinka sahlan ee horumarka, laakiin ma aha xawaare.

Ugu dambeyntii, MS SQL Server wuxuu kuu ogolaanayaa inaad xalliso dhibaatada ka soo horjeeda dhismaha dukumeenti: waxaad u jajabin kartaa JSON miisaska adigoo isticmaalaya OPENJSON. Haddii dukumeentigu aanu si buuxda u fidsanayn, waxaad u baahan doontaa inaad isticmaasho CROSS APPLY.

Qaabka sawirka ee MS SQL Server

Taageerada qaabka garaafka (LPG) ayaa sidoo kale si buuxda looga hirgeliyay Microsoft SQL Server la saadaalin karo: Waxaa la soo jeediyay in la isticmaalo miisas gaar ah si loo kaydiyo noodhka iyo in lagu kaydiyo geesaha garaafyada. Miisaska noocan oo kale ah ayaa la abuuray iyadoo la adeegsanayo tibaaxo CREATE TABLE AS NODE и CREATE TABLE AS EDGE siday u kala horreeyaan.

Shaxda nooca koowaad waxay la mid yihiin miisaska caadiga ah ee lagu kaydinayo diiwaannada, iyadoo farqiga dibadda oo keliya uu yahay in miiska uu ka kooban yahay goob habaysan. $node_id - Aqoonsiga gaarka ah ee noodhka garaaf ee ku dhex jira kaydka xogta.

Sidoo kale, miisaska nooca labaad waxay leeyihiin goobo nidaamka $from_id и $to_id, Gelitaanka shaxanka noocan oo kale ah ayaa si cad u qeexaya xidhiidhka ka dhexeeya noodhadhka. Miis gaar ah ayaa loo isticmaalaa in lagu kaydiyo xidhiidhada nooc kasta ah.

Qaababka badan ee DBMS-yadu ma yihiin saldhigga nidaamyada macluumaadka casriga ah? Aan ku tusaalayno arrintan tusaale. Xogta garaafku ha lahaado qaabayn sida kan shaxanka ku cad. Markaa si aad u abuurto qaab-dhismeedka u dhigma ee kaydka xogta waxaad u baahan tahay inaad socodsiiso weydiimaha DDL ee soo socda:

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);

Tilmaamaha ugu weyn ee jaantusyada noocan oo kale ah ayaa ah in su'aalaha iyaga ka soo horjeeda ay suurtagal tahay in la isticmaalo jaantusyada garaafyada oo leh syntax-sida Cypher (si kastaba ha ahaatee, "*"iwm weli lama taageero). Iyadoo lagu salaynayo cabbiraadaha waxqabadka, waxa kale oo loo qaadan karaa in habka xogta loo kaydiyo shaxdan ay ka duwan tahay habka xogta loogu kaydiyo miisaska caadiga ah oo loo hagaajiyo fulinta weydiimaha garaafka.

SELECT Cafe.name
  FROM Person, likes, Cafe
  WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
  AND Person.name = 'John';

Waxaa intaa dheer, way adag tahay in aan la isticmaalin jaantusyada garaafyada marka la shaqeynayo miisaska noocaas ah, sababtoo ah su'aalaha caadiga ah ee SQL si loo xalliyo dhibaatooyinka la midka ah waxay noqon doontaa lagama maarmaan in la sameeyo dadaal dheeraad ah si loo helo nidaamka "garaafka" aqoonsiga noodhka ($node_id, $from_id, $to_id; Isla sababtaas awgeed, su'aalaha gelitaanka xogta halkan laguma tusi doono maadaama ay yihiin kuwo aan loo baahnayn).

Si aan u soo koobo sharraxaadda fulinta dukumeentiyada iyo moodooyinka garaafyada ee MS SQL Server, waxaan ogaan lahaa in hirgelinta noocan oo kale ah ee hal nooc oo korka ka mid ah aysan u muuqan mid guul leh, ugu horrayn marka laga eego aragtida naqshadeynta luqadda. Waxaa lagama maarmaan ah in la kordhiyo hal luqad oo kale, luqadaha ma aha si buuxda "orthogonal", xeerarka waafaqid noqon kartaa mid aad u yaab leh.

Qaababka badan ee DBMS oo ku salaysan qaabka dukumeentiga

Qaybtan, waxaan jeclaan lahaa inaan ku muujiyo hirgelinta noocyo badan oo dukumeenti ah DBMSs anigoo isticmaalaya tusaalaha kuwa aan caanka ahayn ee MongoDB $lookup и $graphLookup, oo aan ka shaqaynayn ururinta la jeexjeexay), laakiin la isticmaalayo tusaale ka weyn iyo "shirkad" DBMS MarkLogic.

Markaa, ururintu ha ka koobnaato dukumeenti XML ah nooca soo socda (MarkLogic waxa kale oo ay kuu ogolaataa inaad kaydiso dukumeentiyada JSON):

<Person INN="631803299804">
  <name>John</name>
  <surname>Smith</surname>
</Person>

Qaabka xidhiidhka ee MarkLogic

Aragti la xidhiidha ururinta dukumentiyada ayaa la abuuri karaa iyadoo la isticmaalayo qaab muuqaal ah (content of element value Tusaalaha hoose waxaa jiri kara XPath gar-daran):

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

Waxaad wax kaga qaban kartaa aragtida la abuuray su'aal SQL ah (tusaale ahaan, iyada oo loo marayo ODBC):

SELECT name, surname FROM Person WHERE name="John"

Nasiib darro, aragtida xidhiidhka ee uu abuuray qaabka bandhiggu waa akhris-kaliya. Marka codsiga codsiga, MarkLogic isku dayi doonaa inuu isticmaalo tusmooyinka dukumeentiyada. Markii hore, MarkLogic wuxuu lahaa aragtiyo xaddidan oo xiriir ah, gebi ahaanba index ku salaysan oo wax la qori karo, laakiin hadda waxaa loo arkaa inay yihiin kuwo laga baxay.

Qaabka sawirka ee MarkLogic

Iyada oo la taageerayo qaabka garaafka (RDF), wax walba waa isku mid. Mar labaad iyadoo la kaashanayo qaab muuqaal ah waxaad samayn kartaa matalaadda RDF ee ururinta dukumentiyada tusaalaha sare:

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

Waxaad wax kaga qaban kartaa garaafka RDF ee ka soo baxay su'aal SPARQL ah:

PREFIX : <http://example.org/example#>
SELECT ?name ?surname {
  :631803299804 :name ?name ; :surname ?surname .
}

Si ka duwan midka xiriirka ah, MarkLogic wuxuu ku taageeraa qaabka garaafka laba siyaabood oo kale:

  1. DBMS waxay noqon kartaa kayd gaar ah oo dhamaystiran oo xogta RDF ah (saddex qaybood oo ku dhex jira ayaa loogu yeedhi doonaa maamulay si ka duwan kuwa kor lagu tilmaamay soo saaray).
  2. RDF ee taxanaha gaarka ah waxaa si fudud loo gelin karaa dukumeentiyada XML ama JSON (kadibna saddex-geesoodka ayaa loogu yeeri doonaa aan maamulin). Tani waxay u badan tahay inay tahay beddelka hababka idref iyo kuwa kale.

Fikrad wanaagsan oo ah sida waxyaaluhu "runtii" ugu shaqeeyaan MarkLogic waxaa bixiyay Optical API, Dareenkan, waa heer hoose, inkastoo ujeeddadeedu tahay mid ka soo horjeeda - in la isku dayo in la soo saaro qaabka xogta loo isticmaalo, si loo hubiyo in si joogto ah loo shaqeeyo xogta noocyada kala duwan, macaamil ganacsi, iwm.

Qaababka badan ee DBMS "la'aanteed nooc weyn"

Waxa kale oo jira DBMS-yada suuqa kuwaas oo marka hore isu dhigaya moodal-kala-duwan, iyada oo aan lahayn nooc guud oo la dhaxlo. Kuwaas waxaa ka mid ah ArangoDB, OrientDB (tan iyo 2018 shirkadda horumarinta waxaa iska leh SAP) iyo CosmosDB (adeeg qayb ka mid ah madal daruureedka Microsoft Azure).

Dhab ahaantii, waxaa jira moodooyinka "core" ee ArangoDB iyo OrientDB. Labada xaaladoodba, kuwani waa moodooyin xogeed oo iyaga u gaar ah, kuwaas oo guud ahaan ka mid ah dukumeentiga. Xog-ururintu waxay inta badan tahay in la fududeeyo awoodda lagu samaynayo weydiimaha garaafka iyo dabeecadda xidhiidhka.

Moodooyinkani waa kuwa kaliya ee loo heli karo in lagu isticmaalo DBMS-ga la cayimay; luqadahooda weydiimaha ayaa loogu talagalay inay la shaqeeyaan. Dabcan, moodooyinka noocan oo kale ah iyo DBMS-yadu waa kuwo rajo leh, laakiin la'aanta waafaqsanaanta moodooyinka caadiga ah iyo luqadaha ayaa ka dhigaysa mid aan suurtagal ahayn in la isticmaalo DBMS-yadan nidaamyada dhaxalka-si loo beddelo DBMS-yada horay loo isticmaalay.

Waxaa horey u jiray maqaal cajiib ah oo ku saabsan ArangoDB iyo OrientDB ee Habré: KU BIIR NoSQL xog-ururinta.

ArangoDB

ArangoDB waxay sheeganeysaa taageerada qaabka xogta garaafyada.

Noodhyada garaafka ArangoDB waa dukumeenti caadi ah, cidhifyaduna waa dukumeenti nooc gaar ah, oo ay la socdaan goobaha nidaamka caadiga ah, (_key, _id, _rev) goobaha nidaamka _from и _to. Dukumeentiyada ku jira dukumeentiga DBMS-yada dhaqan ahaan ayaa la isugu geeyaa ururinta. Ururinta dukumeentiyada matalaya geesaha waxaa lagu magacaabaa ururinta geesaha gudaha ArangoDB. Jid ahaan, dukumiintiyada ururinta cidhifyada sidoo kale waa dukumeenti, markaa cidhifyada ArangoDB waxay sidoo kale u dhaqmi karaan sidii qanjidhada.

Xogta ugu horeysa

Aan urursano persons, oo dukumeentigoodu u egyahay sidan:

[
  {
    "_id"  : "people/alice" ,
    "_key" : "alice" ,
    "name" : "Алиса"
  },
  {
    "_id"  : "people/bob" ,
    "_key" : "bob" ,
    "name" : "Боб"  
  }
]

Sidoo kale ha jiro ururin cafes:

[
  {
    "_id" : "cafes/jd" ,
    "_key" : "jd" ,
    "name" : "Джон Донн"  
  },
  {
    "_id" : "cafes/jj" ,
    "_key" : "jj" ,
    "name" : "Жан-Жак"
  }
]

Ka dibna ururinta likes wuxuu u ekaan karaa sidan:

[
  {
    "_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 
  }
]

Weydiimaha iyo natiijooyinka

Weydiinta qaabka garaafyada ee luqadda AQL ee lagu isticmaalo ArangoDB, ku soo noqoshada macluumaadka foomka-akhrisanaan karo ee ku saabsan cidda jecel kafateeriyada, waxay u egtahay sidan:

FOR p IN persons
  FOR c IN OUTBOUND p likes
  RETURN { person : p.name , likes : c.name }

Qaab xidhiidhsan, halkaas oo aanu ku “ xisaabinayno ” cilaaqaadka halkii aan kaydin lahayn, su’aashan waxa dib loo qori karaa sidan oo kale (sida, iyada oo aan la ururin likes la'aanteed wuu samayn karaa):

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 }

Natiijada labada xaaladood waxay noqon doontaa isku mid:

[
  { "person" : "Алиса" , likes : "Жан-Жак" } ,
  { "person" : "Алиса" , likes : "Джон Донн" } ,
  { "person" : "Боб" , likes : "Джон Донн" }
]

Weydiimo iyo natiijooyin badan

Haddii qaabka natiijadu u muuqato mid ka sii caadi ah DBMS-ga xidhiidhka ah marka loo eego dukumeentiga DBMS, waxaad isku dayi kartaa waydiintan (ama waxaad isticmaali kartaa COLLECT):

FOR p IN persons
  RETURN {
    person : p.name,
    likes : (
      FOR c IN OUTBOUND p likes
      RETURN c.name
    )
}

Natiijadu waxay u ekaan doontaa sidan:

[
  { "person" : "Алиса" , likes : ["Жан-Жак" , "Джон Донн"]  } ,
  { "person" : "Боб" , likes : ["Джон Донн"] }
]

OrientDB

Saldhigga hirgelinta qaabka garaaf ee dusha sare ee qaabka dukumeentiga ee OrientDB waa fursad goobaha dukumeenti, marka lagu daro in ka badan ama ka yar qiyamka scalar caadiga ah, sidoo kale waxay leeyihiin qiimaha noocyada sida LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Qiimaha noocyadani waa isku xidhka ama ururinta isku xidhka aqoonsiga nidaamka dukumentiyada.

Aqoonsiga dukumeentiga ee nidaamku u xilsaaray waxa uu leeyahay "macne jireed", oo tilmaamaya booska diiwaanka ee kaydka, wuxuuna u egyahay sidan: @rid : #3:16. Sidaa daraadeed, qiyamka guryaha tixraaca ayaa runtii tilmaamayaal (sida qaabka garaafyada) halkii ay ka ahaan lahaayeen shuruudaha xulashada (sida qaabka xiriirka).

Sida ArangoDB, cidhifyada OrientDB waxay u taagan yihiin dukumeenti gaar ah (inkasta oo cidhifku aanu lahayn hanti u gaar ah, waa la samayn karaa khafiif ah, umana dhigmi doonto dukumeenti gaar ah).

Xogta ugu horeysa

Qaab u dhow qaabka daadinta Xogta OrientDB, xogta tusaalihii hore ee ArangoDB waxay u ekaan doontaa wax sidan oo kale ah:

[
     {
      "@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"
    }
  ]

Sida aan arki karno, geesaha sidoo kale waxay kaydiyaan macluumaadka ku saabsan geesaha soo galaya iyo kuwa baxaya. Marka isticmaalaya Dukumeentiga API waa inuu la socdaa daacadnimada tixraaca laftiisa, iyo Graph API wuxuu qaadanayaa shaqadan. Laakin aan aragno sida gelitaanka OrientDB uu u eg yahay luqadaha su'aalaha "saafi ah" ee aan ku dhex milmin luqadaha barnaamijka.

Weydiimaha iyo natiijooyinka

Weydiimo la mid ah ujeeddada weydiinta tusaalaha ArangoDB ee OrientDB waxay u egtahay sidan:

SELECT name AS person_name, OUT('likes').name AS cafe_name
   FROM Person
   UNWIND cafe_name

Natiijada waxaa lagu heli doonaa qaabka soo socda:

[
  { "person_name": "Алиса", "cafe_name": "Джон Донн" },
  { "person_name": "Алиса", "cafe_name": "Жан-Жак" },
  { "person_name": "Боб",  "cafe_name": "Жан-Жак" }
]

Haddii qaabka natiijadu mar kale u muuqato mid "xidhiidh ah", waxaad u baahan tahay inaad ka saarto khadka UNWIND():

[
  { "person_name": "Алиса", "cafe_name": [ "Джон Донн", "Жан-Жак" ] },
  { "person_name": "Боб",  "cafe_name": [ "Жан-Жак" ' }
]

Luqadda weydiinta OrientDB waxaa lagu sifayn karaa SQL oo leh Gremlin-ga la mid ah. Nooca 2.2, foom codsi u eg oo Cypher ah ayaa ka soo muuqday 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

Qaabka natiijadu wuxuu la mid noqonayaa codsigii hore. Ka fakar waxa loo baahan yahay in meesha laga saaro si looga dhigo mid “xidhiidh” ka badan, sida su'aashii u horaysay.

Azure CosmosDB

Ilaa xad, waxa kor laga sheegay ArangoDB iyo OrientDB waxay quseysaa Azure CosmosDB. CosmosDB waxay bixisaa xogta soo socota APIs gelitaanka: SQL, MongoDB, Gremlin iyo Cassandra.

SQL API iyo MongoDB API ayaa loo isticmaalaa in lagu galo xogta qaabka dukumeentiga. Gremlin API iyo Cassandra API - si loo helo xogta garaafyada iyo qaababka tiirka, siday u kala horreeyaan. Xogta dhammaan noocyada waxaa lagu keydiyay qaabka gudaha ee CosmosDB: ARS ("atom-record-sequence"), kaas oo sidoo kale ku dhow dukumeentiga mid.

Qaababka badan ee DBMS-yadu ma yihiin saldhigga nidaamyada macluumaadka casriga ah?

Laakin qaabka xogta ee ay doorteen isticmaaluhu iyo API-ga la isticmaalay ayaa go'an wakhtiga abuurista akoontada adeega. Suurtagal maaha in la helo xogta ku raran qaab qaab kale, sida lagu muujiyay wax sidan oo kale ah:

Qaababka badan ee DBMS-yadu ma yihiin saldhigga nidaamyada macluumaadka casriga ah?

Sidaa darteed, moodooyinka badan ee Azure CosmosDB maanta waa awooda kaliya ee lagu isticmaalo dhowr xog ururin oo taageeraya moodooyinka kala duwan ee hal soo saaraha, kaas oo aan xallin dhammaan dhibaatooyinka kaydinta kala duwanaansho badan.

Qaababka badan ee DBMS oo ku salaysan qaabka garaaf?

Waxaa xusid mudan xaqiiqda ah in aysan jirin DBMS-yada kala duwan ee suuqa oo weli ku saleysan qaab garaaf (marka laga reebo taageerada moodooyinka badan ee isku mar ah laba garaaf: RDF iyo LPG; tan ka eeg gudaha daabacaad hore). Dhibaatooyinka ugu waaweyn waxaa keena hirgelinta qaabka dukumeentiga ee dusha sare ee qaabka garaafyada, halkii ay ka ahaan lahaayeen mid xiriir ah.

Su'aasha ah sida loo hirgeliyo qaabka xiriirka ee dusha sare ee garaafyada ayaa la tixgeliyey xitaa inta lagu jiro samaynta dambe. Sidee hadlaytusaale ahaan David McGovern:

Ma jiraan wax ku jira habka garaafyada oo ka hortagaya abuurista lakab (tusaale ahaan, tusmaynta ku habboon) ee kaydka garaafyada kaas oo awood u siinaya aragti la xidhiidha (1) ka soo kabashada tups ee lamaanaha qiimaha muhiimka ah ee caadiga ah iyo (2) kooxaynta tuple nooca xiriirka ah.

Markaad hirgelinayso qaabka dukumeentiga korkiisa qaabka garaafka, waxaad u baahan tahay inaad maskaxda ku hayso, tusaale ahaan, kuwan soo socda:

  • Qaybaha shaxanka JSON ayaa loo tixgaliyaa in la amray, laakiin kuwa ka soo baxaya cidhifka garaafku maaha;
  • Xogta ku jirta qaabka dukumeentigu inta badan waa la kala jajabiyay; wali ma rabto inaad kaydiso dhowr nuqul oo dukumeenti ku dhex jira, iyo dukumeenti hoosaadyadu badanaa ma laha aqoonsiyo;
  • Dhanka kale, fikradda dukumeentiga DBMS waa in dukumeentiyadu yihiin "isugeyn" diyaarsan oo aan u baahnayn in mar kale la dhiso. Waxaa loo baahan yahay in la bixiyo qaabka garaafka oo awood u leh in uu si degdeg ah u helo qoraal hoosaadyo u dhigma dukumeentiga la dhammeeyey.

Xayeysiis yar

Qoraaga maqaalku wuxuu la xiriiraa horumarinta NitrosBase DBMS, qaabka gudaha kaas oo ah garaaf, iyo qaababka dibadda - xiriirka iyo dukumentiga - waa matalaaddeeda. Dhammaan moodooyinka waa siman yihiin: ku dhawaad ​​xog kasta ayaa lagu heli karaa mid kasta oo iyaga ka mid ah iyadoo la adeegsanayo luqad su'aal oo dabiici ah. Waxaa intaa dheer, aragti kasta, xogta waa la bedeli karaa. Isbeddellada ayaa ka muuqan doona qaabka gudaha iyo, si waafaqsan, aragtiyo kale.

Waxaan rajeynayaa inaan ku qeexo waxa u dhigma moodelku u eg yahay NitrosBase mid ka mid ah maqaallada soo socda.

gunaanad

Waxa aan rajaynayaa in dulucda guud ee waxa la yidhaa Multi-modeling ay u caddaatay akhristaha. Qaababka badan ee DBMS-yadu aad bay u kala duwan yihiin, iyo "taageerada moodooyinka badan" waxay u ekaan kartaa mid ka duwan. Si loo fahmo waxa loo yaqaan "multi-model" kiis kasta oo gaar ah, waxaa faa'iido leh inaad ka jawaabto su'aalaha soo socda:

  1. Ma waxaan ka hadleynaa taageeridda moodooyinka dhaqameed ama nooc ka mid ah moodooyinka "isku-dhafka ah"?
  2. Moodooyinka ma "isku mid yihiin", mise mid iyaga ka mid ah ayaa mawduuca kuwa kale?
  3. Moodooyinka "mid aan dan ka lahayn" midba midka kale ma yahay? Xogta ku qoran hal qaab ma lagu akhriyi karaa mid kale ama xitaa dib baa loo qori karaa?

Waxaan u maleynayaa in su'aasha ku saabsan ku habboonaanta moodooyinka badan ee DBMS horeba looga jawaabi karo si wanaagsan, laakiin su'aasha xiisaha leh ayaa ah noocyada iyaga ka mid ah ayaa noqon doona kuwo badan oo baahi loo qabo mustaqbalka dhow. Waxay u muuqataa in moodooyinka badan ee DBMS-yada taageera moodooyinka dhaqanka, ugu horreyntii, ay ahaan doonaan baahi weyn; Caannimada moodooyinka badan ee DBMS-yada, oo bixiya moodallo cusub oo isku daraya faa'iidooyinka kuwa dhaqameed ee kala duwan, waa arrin mustaqbalka fog ah.

Isticmaalayaasha diiwaangashan oo keliya ayaa ka qaybqaadan kara sahanka. Soo gal, soo dhawoow.

Ma isticmaasha DBMS-model-badan?

  • Ma isticmaalno, wax walba waxaan ku kaydinnaa hal DBMS iyo hal nooc

  • Waxaan isticmaalnaa awoodaha moodooyinka badan ee DBMS-yada dhaqanka

  • Waxaan ku celcelineynaa ku adkaysiga polyglot

  • Waxaan isticmaalnaa nooc cusub oo DBMS ah (Arango, Orient, CosmosDB)

19 isticmaale ayaa codeeyay. 4 isticmaale ayaa ka aamusay.

Source: www.habr.com

Add a comment