Ingabe ama-DBMS amamodeli amaningi ayisisekelo sezinhlelo zesimanje zolwazi?

Izinhlelo zesimanje zokwaziswa ziyinkimbinkimbi kakhulu. Okungenani kukho konke, ubunkimbinkimbi bawo bubangelwa ubunkimbinkimbi bedatha ecutshungulwa kuzo. Ubunkimbinkimbi bedatha ngokuvamile bulele ezinhlobonhlobo zamamodeli wedatha asetshenziswayo. Ngakho-ke, isibonelo, lapho idatha iba "nkulu", enye yezimpawu eziyinkinga akuyona nje ivolumu yayo ("ivolumu"), kodwa futhi izinhlobonhlobo zayo ("izinhlobonhlobo").

Uma ungakatholi iphutha ekucabangeni, qhubeka ufunda.

Ingabe ama-DBMS amamodeli amaningi ayisisekelo sezinhlelo zesimanje zolwazi?


Okuqukethwe

Ukuphikelela kwe-Polyglot
Amamodeli amaningi
I-DBMS yamamodeli amaningi asuselwa kumodeli yobudlelwano
     Imodeli yedokhumenti ku-MS SQL Server
     Imodeli yegrafu ku-MS SQL Server
I-DBMS yamamodeli amaningi asuselwa kumodeli yedokhumenti
     Imodeli yobudlelwano kuMarkLogic
     Imodeli yegrafu ku-MarkLogic
I-DBMS yamamodeli amaningi "ngaphandle kwemodeli eyinhloko"
     I-ArangoDB
     I-OrientDB
     I-Azure CosmosDB
I-DBMS yamamodeli amaningi esekelwe kumodeli yegrafu?
isiphetho
I-poll

Ukuphikelela kwe-Polyglot

Okungenhla kuholela eqinisweni lokuthi ngezinye izikhathi ngisho nangaphakathi kohlaka lwesistimu eyodwa kuyadingeka ukusebenzisa ama-DBMS amaningana ahlukene ukugcina idatha nokuxazulula izinkinga ezihlukahlukene zokuyicubungula, ngayinye esekela imodeli yayo yedatha. Ngesandla esilula sikaM. Fowler, umbhali inqwaba yezincwadi ezidumile kanye neyodwa yazo ababhali abambisene nabo I-Agile Manifesto, lesi simo sibizwa isitoreji esinezinto eziningi (“i-polyglot persistence”).

U-Fowler futhi unesibonelo esilandelayo sokuhlela isitoreji sedatha kuhlelo lokusebenza olugcwele isici esigcwele nomthwalo ophezulu emkhakheni we-e-commerce.

Ingabe ama-DBMS amamodeli amaningi ayisisekelo sezinhlelo zesimanje zolwazi?

Lesi sibonelo, yiqiniso, siyihaba ngandlela-thile, kodwa ezinye izinto ezicatshangelwayo ezivuna ukukhetha i-DBMS eyodwa noma enye ngenjongo ehambisanayo zingatholakala, isibonelo, lapha.

Kuyacaca ukuthi ukuba yinceku endaweni enjalo ye-zoo akulula.

  • Inani lekhodi elenza ukugcinwa kwedatha likhula ngokulingana nenani lama-DBMS asetshenzisiwe; inani ledatha yokuvumelanisa ikhodi lihle uma lingalingani nesikwele sale nombolo.
  • Njengokuphindaphinda kwenombolo ye-DBMS esetshenzisiwe, izindleko zokuhlinzeka ngezici zebhizinisi (scalability, ukubekezelela amaphutha, ukutholakala okuphezulu) kwe-DBMS ngayinye esetshenzisiwe ziyakhuphuka.
  • Akunakwenzeka ukuqinisekisa izici zebhizinisi zesistimu engaphansi yesitoreji iyonke - ikakhulukazi ukuthengiselana.

Ngokombono womqondisi we-zoo, yonke into ibukeka kanje:

  • Ukwenyuka okuningi ezindlekweni zamalayisense nokwesekwa kobuchwepheshe okuvela kumkhiqizi we-DBMS.
  • Ukugcwala kwabasebenzi kanye nezikhathi ezimisiwe ezandayo.
  • Ukulahlekelwa okuqondile kwezezimali noma izinhlawulo ngenxa yokungahambelani kwedatha.

Kukhona ukwenyuka okuphawulekayo ezindlekweni eziphelele zobunikazi bohlelo (TCO). Ingabe ikhona indlela yokuphuma esimweni "sezinketho eziningi zokugcina"?

Amamodeli amaningi

Igama elithi "isitoreji se-multivariate" laqala ukusetshenziswa ngo-2011. Ukuqwashisa ngezinkinga zendlela kanye nokufuna isisombululo kwathatha iminyaka eminingana, futhi ngo-2015, ngemilomo yabahlaziyi bakaGartner, impendulo yakhiwe:

Kubonakala sengathi kulokhu abahlaziyi bakaGartner babeqinisile ngesibikezelo sabo. Uma uya ekhasini nge isilinganiso esiyinhloko DBMS ku-DB-Engines, ungakubona lokhoоIningi labaholi bayo lizibeka ngokukhethekile njengama-DBMS amamodeli amaningi. Okufanayo kungabonakala ekhasini nganoma yisiphi isilinganiso esiyimfihlo.

Ithebula elingezansi libonisa i-DBMS - abaholi esilinganisweni ngasinye esiyimfihlo, abathi bangamamodeli amaningi. Ku-DBMS ngayinye, kukhonjiswa imodeli yoqobo esekelwe (eyake yaba yiyo yodwa) kanye nayo namamodeli asekelwayo. Okunye okubalulwe ama-DBMS azibeka “njengamamodeli amaningi okwangempela” futhi, ngokusho kwabadali, awanayo imodeli yokuqala ezuzwe njengefa.

I-DBMS Imodeli yokuqala Amamodeli engeziwe
Oracle Ezobudlelwano Igrafu, idokhumenti
I-MS SQL Ezobudlelwano Igrafu, idokhumenti
I-PostgreSQL Ezobudlelwano Igrafu*, idokhumenti
I-MarkLogic Idokhumentari Igrafu, ubudlelwano
I-MongoDB Idokhumentari Inani elingukhiye, igrafu*
IdathaStax Ikholomu ebanzi Idokhumentari, igrafu
Redis Inani elingukhiye Idokhumentari, igrafu*
I-ArangoDB - Igrafu, idokhumenti
I-OrientDB - Igrafu, idokhumenti, ubudlelwano
I-Azure CosmosDB - Igrafu, idokhumenti, ubudlelwano

Amanothi etafuleni

Izinkanyezi kuthebula zimaka izitatimende ezidinga ukubhukha:

  • I-PostgreSQL DBMS ayisekeli imodeli yedatha yegrafu, kodwa lo mkhiqizo uyawusekela ngokusekelwe kukho, njenge-AgensGraph.
  • Maqondana ne-MongoDB, kulungile ukukhuluma ngobukhona babaqhubi begrafu ngolimi lombuzo ($lookup, $graphLookup) kunokumayelana nokusekela imodeli yegrafu, nakuba, kunjalo, isingeniso sabo sasidinga ukuthuthukiswa okuthile ezingeni lesitoreji esiphathekayo ngasohlangothini lokusekela imodeli yegrafu.
  • Ngokuphathelene ne-Redis, sisho isandiso I-RedisGraph.

Okulandelayo, kukilasi ngalinye, sizobonisa ukuthi ukusekelwa kwamamodeli amaningana kwenziwa kanjani ku-DBMS kusuka kuleli klasi. Sizobheka amamodeli ahlobene, amadokhumenti namagrafu njengabaluleke kakhulu futhi sisebenzise izibonelo zama-DBMS athile ukukhombisa ukuthi "alahlekile" asetshenziswa kanjani.

I-DBMS yamamodeli amaningi asuselwa kumodeli yobudlelwano

Ama-DBMS ahamba phambili njengamanje ahlobene; Isibikezelo sikaGartner asikwazanga ukubhekwa njengeqiniso uma ama-RDBMS engabonisi umnyakazo oqonde ekumodeleni okuningi. Futhi bayakhombisa. Manje umqondo wokuthi i-DBMS yamamodeli amaningi ifana nommese waseSwitzerland, ongakwazi ukwenza lutho kahle, ingaqondiswa ngqo kuLarry Ellison.

Umbhali, nokho, ukhetha ukuqaliswa kokumodela okuningi ku-Microsoft SQL Server, esibonelweni lapho ukusekelwa kwe-RDBMS kwamamodeli wedokhumenti namagrafu kuzochazwa.

Imodeli yedokhumenti ku-MS SQL Server

Sekuvele kube nezindatshana ezimbili ezinhle kakhulu ku-Habré mayelana nokuthi i-MS SQL Server ikusebenzisa kanjani ukusekelwa kwemodeli yedokhumenti; ngizokhawula ekulandiseni okufushane kanye nokuphawula:

Indlela yokusekela imodeli yedokhumenti ku-MS SQL Server ijwayelekile kuma-DBMS ahlobene: amadokhumenti e-JSON ahlongozwa ukuthi agcinwe ezinkambini zombhalo ezijwayelekile. Usekelo lwemodeli yedokhumenti ukuhlinzeka ngama-opharetha akhethekile ukuze ahlaziye le JSON:

Ingxabano yesibili yabo bobabili opharetha iyinkulumo eku-JSONPath-like syntax.

Ngokusobala, singasho ukuthi amadokhumenti agcinwe ngale ndlela awawona "izinkampani zesigaba sokuqala" ku-DBMS ehlobene, ngokungafani nama-tuples. Ngokucacile, ku-MS SQL Server okwamanje azikho izinkomba ezinkundleni zemibhalo ye-JSON, okwenza kube nzima ukujoyina amathebula usebenzisa amanani alezi zinkambu ngisho nokukhetha amadokhumenti usebenzisa la manani. Kodwa-ke, kungenzeka ukudala ikholomu ebaliwe yensimu enjalo kanye nenkomba kuyo.

Ukwengeza, i-MS SQL Server inikeza ikhono lokwakha kalula idokhumenti ye-JSON kusukela kokuqukethwe amatafula usebenzisa opharetha. FOR JSON PATH - okungenzeka, ngomqondo othile, ngokuphambene nowangaphambili, isitoreji esivamile. Kuyacaca ukuthi kungakhathaliseki ukuthi i-RDBMS ishesha kangakanani, le ndlela iphikisana nemibono yedokhumenti ye-DBMS, egcina izimpendulo esezilungile zemibuzo ethandwayo, futhi ingaxazulula izinkinga zokuthuthuka kalula, kodwa hhayi isivinini.

Ekugcineni, i-MS SQL Server ikuvumela ukuthi uxazulule inkinga ephambene yokwakhiwa kwedokhumenti: ungadiliza i-JSON ibe amatafula usebenzisa OPENJSON. Uma idokhumenti ingesicaba ngokuphelele, uzodinga ukuyisebenzisa CROSS APPLY.

Imodeli yegrafu ku-MS SQL Server

Ukusekela imodeli yegrafu (LPG) nakho kusetshenziswa ngokugcwele ku-Microsoft SQL Server ukubikezelwa: Kuhlongozwa ukusebenzisa amathebula akhethekile ukugcina ama-node kanye nokugcina imiphetho yegrafu. Amathebula anjalo akhiwa kusetshenziswa izinkulumo CREATE TABLE AS NODE и CREATE TABLE AS EDGE ngokulandelana.

Amathebula ohlobo lokuqala afana namatafula ajwayelekile okugcina amarekhodi, umehluko wangaphandle kuphela ukuthi ithebula liqukethe inkambu yesistimu. $node_id - inkomba eyingqayizivele yenodi yegrafu ngaphakathi kwesizindalwazi.

Ngokufanayo, amathebula ohlobo lwesibili anezinkambu zesistimu $from_id и $to_id, okufakiwe kumathebula anjalo kuchaza ngokucacile ukuxhumana phakathi kwamanodi. Ithebula elihlukile lisetshenziselwa ukugcina ubudlelwano bohlobo ngalunye.

Ingabe ama-DBMS amamodeli amaningi ayisisekelo sezinhlelo zesimanje zolwazi? Ake sifanekise lokhu ngesibonelo. Vumela idatha yegrafu ibe nesakhiwo esifana nalesi esiboniswe emfanekisweni. Bese udala isakhiwo esihambisanayo kusizindalwazi udinga ukusebenzisa imibuzo elandelayo ye-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);

Ukucaciswa okuyinhloko kwamathebula anjalo ukuthi emibuzweni ephikisana nawo kungenzeka ukusebenzisa amaphethini wegrafu nge-syntax efana ne-Cypher (nokho, “*"njll. azikasekelwa). Ngokusekelwe ezilinganisweni zokusebenza, kungase futhi kucatshangwe ukuthi indlela idatha egcinwa ngayo kulawa mathebula ihlukile endleleni idatha egcinwa ngayo kumathebula avamile futhi ithuthukiselwe ukusebenzisa imibuzo enjalo yegrafu.

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

Ngaphezu kwalokho, kunzima kakhulu ukungawasebenzisi la maphethini egrafu lapho usebenza namathebula anjalo, ngoba emibuzweni evamile ye-SQL ukuze uxazulule izinkinga ezifanayo kuzodingeka wenze imizamo eyengeziwe yokuthola izihlonzi ze-node "zegrafu" yesistimu ($node_id, $from_id, $to_id; Ngesizathu esifanayo, imibuzo yokufaka idatha ayiboniswa lapha njengoba inzima ngokungadingekile).

Ukufingqa incazelo yokusetshenziswa kwedokhumenti namamodeli egrafu ku-MS SQL Server, ngingaqaphela ukuthi ukuqaliswa okunjalo kwemodeli eyodwa phezu kwenye akubonakali kuphumelela, ngokuyinhloko ngokombono womklamo wolimi. Kudingeka ukunweba ulimi olulodwa nolunye, izilimi azizona "i-orthogonal" ngokuphelele, imithetho yokuhambisana ingaba yinqaba kakhulu.

I-DBMS yamamodeli amaningi asuselwa kumodeli yedokhumenti

Kulesi sigaba, ngithanda ukukhombisa ukuqaliswa kwamamodeli amaningi kumadokhumenti e-DBMS ngisebenzisa isibonelo salawo angadumile kakhulu kuwo, i-MongoDB (njengoba kushiwo, inabasebenzi begrafu abanemibandela kuphela. $lookup и $graphLookup, hhayi ukusebenza kumaqoqo abiwe), kodwa kusetshenziswa isibonelo se-DBMS evuthiwe “nebhizinisi” I-MarkLogic.

Ngakho-ke, vumela iqoqo liqukathe iqoqo lemibhalo ye-XML yohlobo olulandelayo (I-MarkLogic iphinde ikuvumela ukuthi ugcine imibhalo ye-JSON):

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

Imodeli yobudlelwano kuMarkLogic

Ukubuka okuhlobene kweqoqo lemibhalo kungadalwa kusetshenziswa isifanekiso sokubonisa (okuqukethwe yizakhi value esibonelweni esingezansi kungaba khona i-XPath engafanele):

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

Ungakwazi ukubhekana nokubuka okudaliwe ngombuzo we-SQL (isibonelo, nge-ODBC):

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

Ngeshwa, ukubuka okuhlobene okudalwe yisifanekiso sokubonisa ukufunda kuphela. Lapho icubungula isicelo sayo, i-MarkLogic izozama ukusebenzisa izinkomba zedokhumenti. Ngaphambilini, i-MarkLogic yayinombono olinganiselwe wobudlelwane, ngokuphelele inkomba esekelwe futhi ziyabhaleka, kodwa manje sezibhekwa njengezihoxisiwe.

Imodeli yegrafu ku-MarkLogic

Ngokusekelwa kwemodeli yegrafu (RDF), yonke into icishe ifane. Futhi ngosizo isifanekiso sokubonisa ungakha isethulo se-RDF seqoqo lamadokhumenti esibonelweni esingenhla:

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

Ungakwazi ukubhekana negrafu ye-RDF ewumphumela ngombuzo we-SPARQL:

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

Ngokungafani nehlobene, i-MarkLogic isekela imodeli yegrafu ngezinye izindlela ezimbili:

  1. I-DBMS ingaba isitoreji esigcwele esiphelele sedatha ye-RDF (ama-triplets kuyo azobizwa ephethwe ngokungafani nalezo ezichazwe ngenhla kukhishwe).
  2. I-RDF ekukhiqizeni okukhethekile ingavele ifakwe kumadokhumenti e-XML noma e-JSON (futhi ama-triplets azobizwa ngaleso sikhathi engalawulwa). Lokhu mhlawumbe kungenye yezindlela idref nabanye.

Umbono omuhle wokuthi izinto "ngempela" zisebenza kanjani kuMarkLogic unikezwa ngu I-Optical API, ngalo mqondo, isezingeni eliphansi, nakuba inhloso yayo kunalokho iphambene - ukuzama ukukhipha imodeli yedatha esetshenzisiwe, ukuqinisekisa ukusebenza okuhambisanayo nedatha kumamodeli ahlukene, ukuthengiselana, njll.

I-DBMS yamamodeli amaningi "ngaphandle kwemodeli eyinhloko"

Kukhona nama-DBMS emakethe azibeka njengamamodeli amaningi ekuqaleni, ngaphandle kwanoma iyiphi imodeli eyinhloko ezuzwe njengefa. Lezi zihlanganisa I-ArangoDB, I-OrientDB (kusukela ngo-2018 inkampani yokuthuthukisa ingeye-SAP) futhi I-CosmosDB (inkonzo njengengxenye yesikhulumi samafu se-Microsoft Azure).

Eqinisweni, kukhona amamodeli "awumgogodla" ku-ArangoDB nase-OrientDB. Kuzo zombili lezi zimo, lawa amamodeli edatha yawo, ahlanganisa idokhumenti eyodwa. Ama-generalizations ikakhulukazi ukwenza lula ikhono lokwenza imibuzo yegrafu kanye nemvelo yobudlelwano.

Lawa mamodeli yiwo kuphela atholakalayo ukuthi asetshenziswe ku-DBMS eshiwo; izilimi zabo zokubuza zenzelwe ukusebenza nazo. Yiqiniso, amamodeli anjalo nama-DBMS ayathembisa, kodwa ukuntula ukuhambisana namamodeli ajwayelekile nezilimi kwenza kungenzeki ukusebenzisa lawa ma-DBMS ezinhlelweni zefa—ukushintsha ama-DBMS asevele asetshenziswa lapho.

Bekuvele kunendatshana emnandi mayelana ne-ArangoDB ne-OrientDB ku-Habré: JOYINA kusizindalwazi se-NoSQL.

I-ArangoDB

I-ArangoDB ifuna ukusekelwa kwemodeli yedatha yegrafu.

Amanodi egrafu ku-ArangoDB ayimibhalo evamile, futhi imiphetho iyimibhalo yohlobo olukhethekile okuthi, kanye nezinkambu zesistimu ezivamile, zibe (_key, _id, _rev) izinkambu zesistimu _from и _to. Amadokhumenti kudokhumenti ye-DBMS ahlanganiswa ngokwesiko abe amaqoqo. Amaqoqo amadokhumenti amele imiphetho abizwa ngokuthi amaqoqo asemaphethelweni ku-ArangoDB. Ngendlela, imibhalo yokuqoqwa konqenqema nayo ingamadokhumenti, ngakho-ke imiphetho ku-ArangoDB ingasebenza njengamanodi.

Idatha ebomvu

Ake sibe neqoqo persons, amadokhumenti akhe abukeka kanje:

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

Makube khona futhi iqoqo cafes:

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

Bese kuba yiqoqo likes kungahle kubukeke kanjena:

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

Imibuzo nemiphumela

Umbuzo wesitayela segrafu ngolimi lwe-AQL olusetshenziswa ku-ArangoDB, ubuyisela ngolwazi olufundeka umuntu olumayelana nokuthi ubani othanda ukuthi iyiphi ikhefi, ebukeka kanje:

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

Ngesitayela esihlobene, lapho "senza ikhompyutha" ubudlelwano esikhundleni sokubugcina, lo mbuzo ungabhalwa kabusha kanje (indlela, ngaphandle kweqoqo likes engakwenza ngaphandle):

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 }

Umphumela kuzo zombili izimo uzofana:

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

Imibuzo eminingi nemiphumela

Uma ifomethi yomphumela engenhla ibonakala ijwayeleke kakhulu ku-DBMS yobudlelwano kune-DBMS yedokhumenti, ungazama lo mbuzo (noma ungasebenzisa COLLECT):

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

Umphumela uzobukeka kanje:

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

I-OrientDB

Isisekelo sokuqalisa imodeli yegrafu phezu kwemodeli yedokhumenti ku-OrientDB si ithuba izinkambu zedokhumenti, ngaphezu kwamanani ajwayelekile we-scalar angaphezulu noma amancane, nawo anamanani ezinhlobo ezifana nalezi LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Amanani alezi zinhlobo ayizixhumanisi noma amaqoqo ezixhumanisi eziya izihlonzi zesistimu imibhalo.

Isihlonzi sedokhumenti esinikezwe isistimu “sinencazelo engokomzimba”, ebonisa indawo yerekhodi kusizindalwazi, futhi sibukeka kanjena: @rid : #3:16. Ngakho-ke, amanani ezakhiwo zereferensi ayizinkomba ngempela (njengakumodeli yegrafu) kunezimo zokukhetha (njengakumodeli yobudlelwano).

Njenge-ArangoDB, imiphetho ku-OrientDB imelwe njengamadokhumenti ahlukene (yize uma unqenqema lungenayo impahla yalo, lungenziwa. engasindi, futhi ngeke ihambisane nedokhumenti ehlukile).

Idatha ebomvu

Ngefomethi eseduze ne ifomethi yokulahla Idatha ye-OrientDB, idatha evela kusibonelo sangaphambilini se-ArangoDB ingabukeka kanjena:

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

Njengoba singabona, ama-vertices abuye agcine ulwazi mayelana nemiphetho engenayo naphumayo. Ngo usebenzisa I-Document API kufanele iqaphe ubuqotho benkomba ngokwayo, futhi i-Graph API ithatha lo msebenzi. Kodwa ake sibone ukuthi ukufinyelela ku-OrientDB kubukeka kanjani ezilimini zemibuzo “ezihlanzekile” ezingahlanganisiwe ezilimini zokuhlela.

Imibuzo nemiphumela

Umbuzo ofana nenjongo nombuzo ovela kusibonelo se-ArangoDB e-OrientDB ubukeka kanje:

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

Umphumela uzotholakala ngaleli fomu elilandelayo:

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

Uma ifomethi yomphumela futhi ibonakala "ihlobene", udinga ukususa umugqa nge UNWIND():

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

Ulimi lombuzo lwe-OrientDB lungachazwa ngokuthi i-SQL enokufakwa okufana ne-Gremlin. Enguqulweni engu-2.2, kuvele ifomu lesicelo elifana ne-Cypher, 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

Ifomethi yomphumela izofana nesicelo sangaphambilini. Cabanga ngalokho okudingeka kususwe ukuze kube "nobudlelwano", njengasembuzweni wokuqala.

I-Azure CosmosDB

Ngokwezinga elincane, okushiwo ngenhla nge-ArangoDB ne-OrientDB kusebenza ku-Azure CosmosDB. I-CosmosDB inikeza ama-API okufinyelela kudatha alandelayo: SQL, MongoDB, Gremlin kanye neCassandra.

I-SQL API ne-MongoDB API zisetshenziselwa ukufinyelela idatha kumodeli yedokhumenti. I-Gremlin API kanye ne-Cassandra API - yokufinyelela idatha ngefomethi yegrafu nekholomu, ngokulandelanayo. Idatha kuwo wonke amamodeli ilondolozwe ngefomethi yemodeli yangaphakathi ye-CosmosDB: ARS (“i-atom-record-sequence”), nayo eseduze nedokhumenti eyodwa.

Ingabe ama-DBMS amamodeli amaningi ayisisekelo sezinhlelo zesimanje zolwazi?

Kodwa imodeli yedatha ekhethwe umsebenzisi kanye ne-API esetshenzisiwe ilungiswa ngesikhathi sokudala i-akhawunti kusevisi. Akwenzeki ukufinyelela idatha elayishwe kumodeli eyodwa kufomethi yenye imodeli, njengoba kuboniswe into efana nale:

Ingabe ama-DBMS amamodeli amaningi ayisisekelo sezinhlelo zesimanje zolwazi?

Ngakho-ke, amamodeli amaningi ku-Azure CosmosDB namuhla kuphela ikhono lokusebenzisa imininingwane eminingana esekela amamodeli ahlukene avela kumkhiqizi oyedwa, ongaxazululi zonke izinkinga zokugcina okuhlukahlukene.

I-DBMS yamamodeli amaningi esekelwe kumodeli yegrafu?

Kuyaphawuleka ukuthi awekho ama-DBMS angamamodeli amaningi emakethe okwamanje asekelwe kumodeli yegrafu (ngaphandle kokusekelwa kwamamodeli amaningi ngasikhathi sinye amamodeli amagrafu amabili: i-RDF ne-LPG; bona lokhu kokuthi ukushicilelwa kwangaphambilini). Ubunzima obukhulu kakhulu bubangelwa ukuqaliswa kwemodeli yedokhumenti phezu kwemodeli yegrafu, esikhundleni sobudlelwano.

Umbuzo wendlela yokusebenzisa imodeli yobudlelwane phezu kwemodeli yegrafu yacatshangelwa ngisho nangesikhathi sokubunjwa kokugcina. Kanjani wakhulumangokwesibonelo UDavid McGovern:

Akukho lutho olungokwemvelo endleleni yegrafu evimbela ukudala ungqimba (isb, ngokufaka inkomba okulungile) kusizindalwazi segrafu esivumela ukubuka okuhlobene (1) nokutholwa kwama-tuples ukusuka kumanani ajwayelekile angukhiye kanye (2) nokuhlanganisa ama-tuples ngohlobo lobudlelwano.

Lapho usebenzisa imodeli yedokhumenti phezu kwemodeli yegrafu, udinga ukukhumbula, isibonelo, okulandelayo:

  • Izinto zamalungu afanayo e-JSON zibhekwa njengezi-odwe, kodwa lezo eziphuma ku-vertex yomkhawulo wegrafu awazona;
  • Idatha kumodeli yedokhumenti ivamise ukwenziwa i-denormal; awukafuni ukugcina amakhophi amaningana edokhumenti eshunyekiwe efanayo, futhi imibhalo engaphansi ngokuvamile ayinazo izihlonzi;
  • Ngakolunye uhlangothi, i-ideology yedokhumenti ye-DBMS iwukuthi imibhalo "i-aggregate" eyenziwe ngomumo engadingi ukwakhiwa kabusha isikhathi ngasinye. Kudingeka ukunikeza imodeli yegrafu ikhono lokuthola ngokushesha i-subgraph ehambisana nedokhumenti eqediwe.

Ukukhangisa okuncane

Umbhali we-athikili uhlobene nokuthuthukiswa kwe-NitrosBase DBMS, imodeli yangaphakathi eyigrafu, kanye namamodeli angaphandle - ahlobene nombhalo - yizethulo zayo. Wonke amamodeli ayalingana: cishe noma iyiphi idatha iyatholakala kunoma iyiphi yazo kusetshenziswa ulimi lombuzo olungokwemvelo kuwo. Ngaphezu kwalokho, kunoma yikuphi ukubuka, idatha ingashintshwa. Izinguquko zizobonakala kumodeli yangaphakathi futhi, ngokufanelekile, kokunye ukubuka.

Ngizochaza ngethemba ukuthi ukufanisa imodeli kubukeka kanjani ku-NitrosBase kwesinye sezindatshana ezilandelayo.

isiphetho

Ngiyethemba ukuthi uhlaka olujwayelekile lwalokho okubizwa nge-multi-modeling selucace kakhulu kumfundi. Ama-DBMS amamodeli amaningi ahluke kakhulu, futhi "ukusekelwa kwamamodeli amaningi" kungabukeka kuhlukile. Ukuze uqonde lokho okubizwa ngokuthi "amamodeli amaningi" esimweni ngasinye, kuyasiza ukuphendula imibuzo elandelayo:

  1. Ingabe sikhuluma ngokusekela amamodeli endabuko noma uhlobo oluthile lwemodeli "ye-hybrid"?
  2. Ingabe amamodeli “ayalingana”, noma ingabe enye yawo iyisihloko sabanye?
  3. Ingabe amamodeli "awanandaba" komunye nomunye? Ingabe idatha ebhalwe kumodeli eyodwa ingafundwa kwenye noma ibhalwe phezu kwalokho?

Ngicabanga ukuthi umbuzo mayelana nokufaneleka kwe-DBMS yamamodeli amaningi ungaphendulwa kahle, kodwa umbuzo othakazelisayo ukuthi yiziphi izinhlobo zazo ezizodingeka kakhulu esikhathini esizayo esiseduze. Kubonakala sengathi ama-DBMS amamodeli amaningi asekela amamodeli endabuko, ngokuyinhloko ahlobene, azoba nesidingo esikhulu; Ukuthandwa kwama-DBMS amamodeli amaningi, ahlinzeka ngamamodeli amasha ahlanganisa izinzuzo zendabuko ehlukahlukene, kuyindaba yekusasa elikude kakhulu.

Abasebenzisi ababhalisiwe kuphela abangabamba iqhaza kuhlolovo. Ngena ngemvume, wamukelekile.

Ingabe usebenzisa i-DBMS yamamodeli amaningi?

  • Asiyisebenzisi, sigcina yonke into ku-DBMS eyodwa nakumodeli owodwa

  • Sisebenzisa amakhono amamodeli amaningi ama-DBMS endabuko

  • Senza ukuphikelela kwe-polyglot

  • Sisebenzisa i-DBMS entsha enamamodeli amaningi (i-Arango, i-Orient, i-CosmosDB)

Bangu-19 abasebenzisi abavotile. Abasebenzisi abangu-4 bayenqaba.

Source: www.habr.com

Engeza amazwana