Multimudelilised andmebaasid – tĂ€napĂ€evaste infosĂŒsteemide vundament?

Kaasaegsed infotehnoloogia sĂŒsteemid on piisavalt keerulised. Nende keerukuse pĂ”hjuseks on osaliselt ka andmete keerukus, mida neist sĂŒsteemidest töödeldakse. Andmete keerukus peitub sageli andmemudelite mitmekesisuses. NĂ€iteks, kui andmed muutuvad "suurteks", ei ole nende maht ("volume") ainus ebamugavustunne, vaid ka nende mitmekesisus ("variety").

Kui te ei leia veel antud arutlustes puudusi, siis lugege edasi.

Multimudelilised andmebaasid – tĂ€napĂ€evaste infosĂŒsteemide vundament?


Sisu

Polyglot persistents
Multimodaalsus
Multimudelilised andmebaasisĂŒsteemid, mis pĂ”hinevad relatsioonimudelil
     Dokumendimudel MS SQL Serveris
     Graafimudel MS SQL Serveris
Multimudelilised andmebaasisĂŒsteemid, mis pĂ”hinevad dokumendimudelil
     Relatsioonimudel MarkLogicis
     Graafimudel MarkLogicis
Multimudelilised andmebaasisĂŒsteemid "ilma pĂ”hiraamideta"
     ArangoDB
     OrientDB
     Azure CosmosDB
Multimudelilised andmebaasisĂŒsteemid, mis pĂ”hinevad graafimudelil?
KokkuvÔte
KĂŒsitlus

Polyglot persistents

Ülaltoodud viitab sellele, et teinekord tuleb isegi ĂŒhes sĂŒsteemis andmete salvestamiseks ja nende töötlemiseks kasutada mitmeid erinevaid andmebaasisĂŒsteeme, millest igaĂŒhel on oma andmemudel. M. Fowleri kergelt öeldes, autori paljude tuntud raamatute ja ĂŒhe kaasautori Agile Manifesto, sellist olukorda nimetatakse mitme variandi sĂ€ilitamiseks («polyglot persistence»).

Fowler tÔi vÀlja jÀrgmise nÀite andmete hoidmise korraldamisest tÀisfunktsionaalses ja kÔrge koormusega rakenduses e-kaubanduse valdkonnas.

Multimudelilised andmebaasid – tĂ€napĂ€evaste infosĂŒsteemide vundament?

See nÀide on muidugi veidi liialdatud, kuid mÔningaid kaalutlusi, miks valida sobiv andmebaas vastava eesmÀrgi jaoks, vÔib leida nÀiteks, siit.

Selge on, et sellises loomaaias teenimine ei ole kerge.

  • Andmete sĂ€ilitamiseks vajalik koodihulk kasvab proportsionaalselt kasutatavate andmebaaside arvuga; andmete sĂŒnkroonimiseks vajalik kood — oleks hea, kui see ei kasva ruudus selle arvu jĂ€rgi.
  • Kasutatavate andmebaaside arvu tĂ”ttu suurenevad kulud enterprise-omaduste tagamiseks (skaalautuvus, katkestustele vastupidavus, kĂ”rge kĂ€ttesaadavus) iga kasutatava andmebaasi puhul.
  • Enterprise-omaduste tagamine kogu salvestussĂŒsteemi ulatuses — eriti tehinguliste omaduste puhul — on vĂ”imatu.

Zooloodi direktori silmis paistab kÔik vÀlja jÀrgmine:

  • Tarkvara litsentside ja tugiteenuste hinnatĂ”us tootjalt.
  • Töötajate arvu suurenemine ja tĂ€htaegade pikenemine.
  • Otsesed rahalised kaotused vĂ”i trahvid andmete ebakĂ”lade tĂ”ttu.

KokkuvĂ”tlikuks sĂŒsteemi omamiskulude (TCO) mĂ€rkimisvÀÀrne kasv. Kas olukorrast "mitme variandi hoidmine" on mingit vĂ€ljapÀÀsu?

Multimodaalsus

MĂ”isted "mitme variandi hoidmine" on saanud tuntuks 2011. aastal. Probleemide teadlikkus ja lahenduste leidmine vĂ”ttis aastaid, ning 2015. aastaks sĂ”nastasid analĂŒĂŒtikud Gartner, et

Tundub, et seekord analĂŒĂŒtikud Gartner ei eksinud. Kui minna lehele peamiseks reitinguks andmebaaside DB-Engines, vĂ”ib nĂ€ha, etoenamus selle liidreid positsioneerivad end just kui multimudeelsed andmebaasid. Sama on nĂ€htav ka igal eraldi reitingu lehel.

AlljÀrgnevas tabelis on toodud andmebaasid, mis on liidrid igas eraldi klassifikatsioonis ja vÀidavad oma multimudelit. Iga andmebaasi puhul on mÀrgitud algne toetatud mudel (mis kunagi oli ainus) ja koos sellega ka mudelid, mida toetatakse praegu. Samuti on esitatud andmebaasid, mis positsioneerivad end kui "algusest peale multimudelilised", millel ei ole arendajate vÀidete kohaselt mingit algset pÀrandmudelit.

ANDMEBAASIDE haldamiseks.Algne mudelTĂ€iendavad mudelid
OracleSuhetepÔhineGraafik, dokument
MS SQLSuhetepÔhineGraafik, dokument
PostgreSQLSuhetepÔhineGraafik*, dokument
MarkLogicDokumentGraafik, suhetepÔhine
MongoDBDokumentVÔti-vÀÀrtus, graafik*
DataStaxLai veerupÔhineDokument, graafik
RedisVÔti-vÀÀrtusDokument, graafik*
ArangoDB—Graafik, dokument
OrientDB—Graafik, dokument, suhetepĂ”hine
Azure CosmosDB—Graafik, dokument, suhetepĂ”hine

MĂ€rgid tabelis

Tabelis on tÀrniga mÀrgitud vÀited, mis vajavad tÀpsustamist:

  • Andmebaas PostgreSQL ei toeta graafimudeleid, kuid sellel toetab seda toode alusel, nagu nĂ€iteks AgensGraph.
  • MongoDB puhul on korrektsem rÀÀkida pigem graafilistest operaatoritest pĂ€ringukeeles ($lookup, $graphLookup), kui rÀÀgitakse graafimudeli toest, kuigi selle kasutuselevĂ”tt nĂ”udis fĂŒĂŒsilise salvestuse optimeerimist graafimudeli toetamise suunas.
  • Redis'i kontekstis rÀÀgitakse laiendusest RedisGraph.

Edasi nÀitame igas klassis, kuidas erinevate mudelite toetamine andmebaasides sellest klassist on teostatav. Olulisemateks peame suhete, dokumentide ja graafimudeleid ning nÀitame konkreetsete andmebaaside nÀidete pÔhjal, kuidas teostatakse 'puuduolevaid'.

Multimudelilised andmebaasisĂŒsteemid, mis pĂ”hinevad relatsioonimudelil

Praegu on juhtivad andmebaasid suhete andmebaasid, Gartneri ennustus ei oleks tĂ€idetud, kui relatsioonilised andmebaasid ei nĂ€itaks liikumist mitmemudelisuse suunas. Ja nad tĂ”epoolest nĂ€itavad. NĂŒĂŒd vĂ”ib arvesse vĂ”tta sĂ”navĂ”tte selle kohta, et mitmemudeliline andmebaas on nagu Ć veitsi armee nuga, millega ei saa mitte midagi hĂ€sti teha, suunata otse Larry Ellisonile.

Kuid autorile meeldib rohkem mitmemudelisuse rakendamine Microsoft SQL Serveris, mille nÀitel kirjeldame dokumentide ja graafimudelite toetust relatsioonilistes andmebaasides.

Dokumendimudel MS SQL Serveris

Kuidas MS SQL Server toetab dokumentide mudelit, on Habr siiski kaks suurepĂ€rast artiklit, piirduksin lĂŒhikese kokkuvĂ”tte ja kommentaariga:

Dokumentide mudeli toetus MS SQL Serveris on piisavalt tĂŒĂŒpiline relaatsiooniandmebaaside jaoks: JSON-dokumente pakutakse tavalistes tekstivĂ€ljade kaudu salvestamiseks. Dokumentide mudeli toetus seisneb spetsiaalsete operaatorite pakkumises nende JSON-i analĂŒĂŒsimiseks:

  • JSON_VALUE skaalaarsete atribuute vÀÀrtuste vĂ€ljatĂ”mbamiseks,
  • JSON_QUERY alusdokumentide vĂ€ljatĂ”mbamiseks.

MĂ”lema operaatoriga on teiseks argumendiks vĂ€ljend JSONPath-taolises sĂŒntaksis.

Üldiselt vĂ”ib öelda, et sellisel viisil salvestatud dokumendid ei ole relaatsiooniandmebaasis "esmaklassilised ĂŒksused", erinevalt k Tup vÀÀrtustest. Konkreetsetes MS SQL Serveri versioonides puuduvad hetkel JSON-dokumentide vĂ€ljade indeksid, mis raskendab tabelite ĂŒhendamise operatsioonide tegemist nende vĂ€ljade vÀÀrtuste pĂ”hjal ja isegi dokumentide valimist nende vÀÀrtuste jĂ€rgi. Siiski on vĂ”imalik luua selle vĂ€lja pĂ”hjal arvutatud veerg ja indeks.

MS SQL Server pakub vĂ”imalust mugavalt koostada JSON-dokumenti tabeli sisust operatöriga FOR JSON PATH — vĂ”imalus, mis on teatud mĂ”ttes vastand eelmisele, tavapĂ€rasele sĂ€ilitamisele. Selge, et ĂŒkskĂ”ik kui kiire ka poleks RDBMS, on selline lĂ€henemine vastupidine dokumentide DB ideoloogiale, mis pĂ”himĂ”tteliselt salvestab valmis vastused populaarsetele pĂ€ringutele, ja vĂ”ib lahendada vaid arendamise mugavuse, mitte kiirusprobleeme.

LĂ”puks vĂ”imaldab MS SQL Server lahendada ĂŒlesande, mis on vastupidine dokumendi koostamisele: JSON-i saab tabelitesse jagada operatöriga OPENJSON. Kui dokument pole tĂ€iesti tasane, tuleb kasutada RISTSÜND APPLY.

Graafimudel MS SQL Serveris

Graafilise (LPG) mudeli tugi on Microsoft SQL Serveris samuti tÀiesti ennustatav: soovitatakse kasutada spetsiaalseid tabeleid sÔlmede ja kaare hoidmiseks. Sellised tabelid luuakse vÀljendite abil CREATE TABLE AS NODE ja CREATE TABLE AS EDGE vastavalt.

Esimese tĂŒĂŒbi tabelid on sarnased tavapĂ€rastele tabelitele, mis salvestavad kirjeid, ainsa vĂ€lise erinevusega, et tabelis on sĂŒsteemne vĂ€li $node_id — unikaalne graafi sĂ”lme identifikaator andmebaasis.

Sarnaselt, teise tĂŒĂŒbi tabelitel on sĂŒsteemi vĂ€ljad $from_id ja $to_id, sellistes tabelites mÀÀratlevad kirjed selgelt seosed sĂ”lmede vahel. Iga tĂŒĂŒbi seoste salvestamiseks kasutatakse eraldi tabelit.

Multimudelilised andmebaasid – tĂ€napĂ€evaste infosĂŒsteemide vundament? Illustreerime seda nĂ€itega. Oletame, et graafilised andmed on skeemiga nagu eespool toodud joonisel. Vastava struktuuri loomine andmebaasis nĂ”uab jĂ€rgmiste DDL-kĂ€skude tĂ€itmist:

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

Selliste tabelite peamine eripĂ€ra on see, et nendele pĂ€ringutes on vĂ”imalik kasutada graafilisi mustreid Cypher-tĂŒĂŒpi sĂŒntaksiga (kuigi "*" jms hetkel ei toetata). Tootlikkuse mÔÔtmiste pĂ”hjal vĂ”ib ka eeldada, et nende tabelite andmete salvestamise viis erineb tavapĂ€raste tabelite andmete salvestamise mehhanismist ning on optimeeritud selliste graafiliste pĂ€ringute tĂ€itmiseks.

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

Lisaks on ĂŒsna keeruline selliste tabelitega töötades neid graafipattern'e mitte kasutada, kuna traditsioonilistes SQL-pĂ€ringutes sarnaste ĂŒlesannete lahendamiseks tuleb teha tĂ€iendavaid samme sĂŒsteemsete "graafiliste" sĂ”lmede identifikaatorite saamiseks ($node_id, $from_id, $to_id; sama pĂ”hjusel ei ole siin andmete sisestamise pĂ€ringud vĂ€lja toodud, kuna need oleksid liiga mahukad).

KokkuvĂ”ttes MS SQL Serveri dokumendi- ja graafimudelite rakenduste kirjeldamisel tahaksin mĂ€rkida, et sarnaste mudelite realiseerimine ĂŒksteise peal ei tundu esimese jao keelelise disaini seisukohast eriti Ă”nnestunud. Ühe keele laiendamine teisega on vajalik, keeled ei ole tĂ€ielikult "ortogonaalsed", ja ĂŒhilduvuse reeglid vĂ”ivad olla ĂŒsna veidrad.

Multimudelilised andmebaasisĂŒsteemid, mis pĂ”hinevad dokumendimudelil

Selles osas soovin illustreerida multimudelisust dokumendivaatide SÜB-de nĂ€itel, kasutades selleks mitte kĂ”ige populaarsemat neist, MongoDB-d (nagu mainitud, on seal ainult tinglikult graafilised operaatorid $lookup ja $graphLookup, mis ei toimi jagatud kogumites), vaid nĂ€itheks kĂŒpsem SÜB. MarkLogic.

Olgu, oletame, et kogu kollektsioon sisaldab jÀrgmise vormingu XML-dokumente (MarkLogic toetab ka JSON-dokumentide salvestamist):

John
  Smith

Relatsioonimudel MarkLogicis

Dokumentide kollektsiooni suhtelise esitluse saab luua kuvaƥabloni (elementide sisu value alltoodud nÀites vÔib olla soovitud XPath):

/Person
  
    
      Person
      
        
          SSN
          @SSN
          string
        
        
          name
          name
        
        
          surname
          surname

Loodud esitlusele saab suunata SQL-pÀringu (nÀiteks ODBC kaudu):

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

Kahjuks on kuvaĆĄabloni abil loodud suhteline esitus ainult lugemiseks. PĂ€ringu töötlemisel pĂŒĂŒab MarkLogic kasutada dokumentide indekseid. Varasemalt olid MarkLogicis ka piiratud suhtelised esitused, mis pĂ”hinesid tĂ€ielikult indeksite peal ja on kirjalik, kuid praegu on need arvatud vananenuks.

Graafimudel MarkLogicis

Grafitehnoloogia (RDF) mudel toetab sama pĂ”himĂ”tteid. JĂ€lle on selle saavutamiseks vĂ”imalik kuvaĆĄabloni luua RDF-esitlus ĂŒlaltoodud dokumentide kogumist:

/Person
    
      
        PREFIX
        "http://example.org/example#"
      
    
  
    
      sem:iri( $PREFIX || @SSN )
      sem:iri( $PREFIX || surname )
      xs:string( surname )
    
    
      sem:iri( $PREFIX || @SSN )
      sem:iri( $PREFIX || name )
      xs:string( name )

Saadud RDF-graafile saab esitada SPARQL-pÀringu:

PREFIX : 
SELECT ?name ?surname {
  :631803299804 :name ?name ; :surname ?surname .
}

Erinevalt relatsioonilisest mudelist toetab MarkLogic graafimudelit veel kahel muul viisil:

  1. Andmebaas vĂ”ib olla tĂ€ielik iseseisev RDF-andmete ladustamine (tripleid nimetatakse seal managed vastandina ĂŒlaltoodule extracted).
  2. RDF er spetsialiseeritud serialiseerimises vÔib lihtsalt olla kantud XML- vÔi JSON-dokumentidesse (ja tripletid nimetatakse siis haldamata). TÔenÀoliselt on see alternatiiv mehhanismidele idref ja sarnased.

Hea ĂŒlevaade sellest, kuidas MarkLogic tegelikult töötab, annab Optic API, selle mĂ”ttes on see madala taseme, kuigi selle eesmĂ€rk on pigem vastupidine — pĂŒĂŒda abstraheerida kasutatavast andmemudelist, tagada andmete jĂ€rjepidev töö erinevates mudelites, tehingulisus jne.

Multimudelilised andmebaasisĂŒsteemid "ilma pĂ”hiraamideta"

Turul on ka andmebaase, mis positsioneerivad end kui algselt multiamoodulised, ilma igasuguse pÀrandatud pÔhistruktuurita. Nende hulka kuuluvad ArangoDB, OrientDB (alates 2018. aastast kuulub arendav ettevÔte SAP-le) ja CosmosDB (teenus Microsoft Azure'i pilveplatvormi koostisosana).

Tegelikult on ArangoDB ja OrientDB-l „pĂ”hilised” mudelid. MĂ”lemal juhul on need omapĂ€rased andmemudelid, mis on dokumentide ĂŒldistused. Üldistused seisnevad peamiselt selles, et kergendada graafi- ja suhteliselt tĂ”husaid pĂ€ringute tegemise vĂ”imalusi.

Need valikud on nimetatud andmebaasides ainsad, mida saab kasutada, ning nende jaoks on mĂ”eldud spetsiaalsed pĂ€ringukeeled. Absoluutselt, sellised mudelid ja andmebaasid on perspektiivikad, kuid standardmudelite ja keeltes puuduv ĂŒhilduvus muudab nende andmebaaside integreerimise pĂ€randtehnoloogiatega vĂ”imatuks.

Habr's on juba olnud suurepÀrane artikkel ArangoDB ja OrientDB kohta: JOIN NoSQL andmebaasides.

ArangoDB

ArangoDB kinnitab graafimudeli toe.

ArangoDB graafi sĂ”lmed on tavalised dokumendid, ja servad on spetsiaalse liigi dokumendid, mis omavad tavapĂ€raste sĂŒsteemsete vĂ€ljadega (_key, _id, _rev) sĂŒsteemseid vĂ€lju _from ja _to. Dokumente dokumentide andmebaasides tavaliselt grupeeritakse kogudesse. Graafide esindavad dokumentide kogud, mida ArangoDB-s nimetatakse servade kogudeks. Muide, servade kogude dokumendid on samuti dokumendid, nii et servad ArangoDB-s vĂ”ivad toimida ka sĂ”lmedena.

Algandmed

Olgu meil kogum persons, mille dokumendid nÀevad vÀlja jÀrgmisugused:

[
  {
    "_id"  : "people/alice" ,
    "_key" : "alice" ,
    "name" : "Alice"
  },
  {
    "_id"  : "people/bob" ,
    "_key" : "bob" ,
    "name" : "Bob"  
  }
]

Olgu ka kogum cafes:

[
  {
    "_id" : "cafes/jd" ,
    "_key" : "jd" ,
    "name" : "John Donne"  
  },
  {
    "_id" : "cafes/jj" ,
    "_key" : "jj" ,
    "name" : "Jean-Jacques"
  }
]

Siis kogu kollektsioon meeldimised vÔib vÀlja nÀha jÀrgmine:

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

PĂ€ringud ja tulemused

Graalistiilis pÀring ArangoDB AQL keeles, mis tagastab arusaadaval kujul andmed selle kohta, kellele milline kohvik meeldib, nÀeb vÀlja nii:

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

Suhete arvutamisel rikka stilistika puhul, mitte nende salvestamisel, vÔiks selle pÀringu kirjutada nii (muide, ilma kollektsioonita meeldimised vÔiks ka hakkama saada):

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 }

MÔlemas olukorras on tulemus sama:

[
  { "person" : "Alice" , likes : "Jean-Jacques" } ,
  { "person" : "Alice" , likes : "John Donne" } ,
  { "person" : "Bob" , likes : "John Donne" }
]

Veel pÀringud ja tulemused

Kui tundub, et ĂŒlaltoodud tulemusformaat on pigem iseloomulik alumisele relatsioonilisele DB asemel dokumendi andmebaasile, siis vĂ”ib proovida sellist pĂ€ringut (vĂ”i kasutada COLLECT):

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

Tulemus nÀeb vÀlja jÀrgmine:

[
  { "person" : "Alica" , likes : ["Jean-Jacques" , "John Donne"]  } ,
  { "person" : "Bob" , likes : ["John Donne"] }
]

OrientDB

Dokumendimudeli peal graafikumudeli rakendamine OrientDB-s pĂ”hineb vĂ”imalus dokumendi vĂ€ljad, mis sisaldavad peale enam-vĂ€hem standardsete skaalarvÀÀrtuste ka selliste tĂŒĂŒpide vÀÀrtusi, nagu LINK, LINKLIST, LINKSET, LINKMAP ja LINKBAG. Nende tĂŒĂŒpide vÀÀrtused on viidud vĂ”i viidud kollektsioonidele sĂŒsteemi identifikaatoritele dokumentide.

SĂŒsteemi mÀÀratud dokumendi identifikaator omab „fĂŒĂŒsilist tĂ€hendust“, nĂ€idates kirje positsiooni andmebaasis ja nĂ€eb vĂ€lja umbes nii: @rid : #3:16. Seega on viidatud omaduste vÀÀrtused tĂ”epoolest pigem nĂ€idikud (nagu graafikumudelis), mitte valikutingimused (nagu relatsioonilistes).

Nagu ArangoDB-s, esindatakse OrientDB-s servad eraldi dokumentidega (kuigi kui serval ei ole omadusi, saab selle teha kergekaaluliseks, ja sellele ei ole eraldi dokumenti vastavuses).

Algandmed

Formaat, mis on lÀhedane dumpi formaadile OrientDB-st, eelneva nÀite andmed ArangoDB-s nÀeksid vÀlja umbes nii:

[
     {
      "@type": "document",
      "@rid": "#11:0",
      "@class": "Person",
      "name": "Alice",
      "out_likes": [
        "#30:1",
        "#30:2"
      ],
      "@fieldTypes": "out_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#12:0",
      "@class": "Person",
      "name": "Bob",
      "out_likes": [
        "#30:3"
      ],
      "@fieldTypes": "out_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#21:0",
      "@class": "Cafe",
      "name": "Jean-Jacques",
      "in_likes": [
        "#30:2",
        "#30:3"
      ],
      "@fieldTypes": "in_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#22:0",
      "@class": "Cafe",
      "name": "John Donne",
      "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"
    }
  ]

Nagu nÀeme, salvestavad tipud samuti teavet sisenemise ja vÀljamineva servade kohta. Kasutamisel kolmandate osapoolte Dokumendi API lingvistiline terviklikkus peab jÀlgima ise, kuid Graph API teeb selle töö sinu eest. Vaadakem, kuidas nÀeb vÀlja pÀring OrientDB-s "puhtalt", programmeerimiskeeltesse integreerimata pÀringute keeltes.

PĂ€ringud ja tulemused

PÀring, mis on mÔeldud sama eesmÀrgi saavutamiseks nagu ArangoDB nÀites, nÀeb OrientDB-s vÀlja jÀrgmine:

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

Tulemus saadakse jÀrgmises vormis:

[
  { "person_name": "Alica", "cafe_name": "John Donne" },
  { "person_name": "Alica", "cafe_name": "Jean-Jacques" },
  { "person_name": "Bob",  "cafe_name": "Jean-Jacques" }
]

Kui tulemuse formaat tundub taas liiga "relatsiooniline", tuleb eemaldada rida, mis sisaldab UNWIND():

[
  { "person_name": "Alica", "cafe_name": [ "John Donne", "Jean-Jacques" ] },
  { "person_name": "Bob",  "cafe_name": [ "Jean-Jacques" ] }
]

OrientDB pÀringukeelt vÔib iseloomustada kui SQL Gremlin-sarnaste lisanditega. Versioonis 2.2 ilmus Cypher-sarnane pÀringu vorm, 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

Tulemuse formaat on sama, mis eelmises pÀringus. MÔelge, mida tuleks eemaldada, et muuta see rohkem "relatsiooniliseks", nagu kÔige esimeses pÀringus.

Azure CosmosDB

VÀhemal mÀÀral kehtib eelnevalt öeldu ArangoDB ja OrientDB kohta ka Azure CosmosDB-le. CosmosDB pakub jÀrgmisi andmete ligipÀÀsu API-sid: SQL, MongoDB, Gremlin ja Cassandra.

SQL API ja MongoDB API kasutatakse andmete ligipÀÀsuks dokumendimudelile. Gremlin API ja Cassandra API - vastavalt graafi- ja veergmudelile. KĂ”ikide mudelite andmed salvestatakse CosmosDB sisemise mudeli formaadis: ARS („atom-record-sequence“), mis on samuti lĂ€hedane dokumendile.

Multimudelilised andmebaasid – tĂ€napĂ€evaste infosĂŒsteemide vundament?

Kuid kasutaja valitud andmemudel ja kasutatav API fikseeritakse konto loomisel teenuses. Ühe mudeli formati andmetele ei ole vĂ”imalik ligipÀÀsu saada teise mudeli formaadis, mida illustreeriks ligikaudu jĂ€rgmine joonis:

Multimudelilised andmebaasid – tĂ€napĂ€evaste infosĂŒsteemide vundament?

Seega esindab Azure CosmosDB tĂ€napĂ€eval multimudelisus lihtsalt vĂ”imalust kasutada mitut andmebaasi, mis toetavad erinevaid mudeleid ĂŒhelt tootjalt, mis ei lahenda kĂ”iki variatiivse salvestamise probleeme.

Multimudelilised andmebaasisĂŒsteemid, mis pĂ”hinevad graafimudelil?

RÔhutab, et turul pole veel mitmemudelseid andmebaase, mille aluseks oleks graafimudel (v.a. mitmemudelsuse alla kuulub kahe graafimudelilise toe, RDF ja LPG, olemasolu; vt selle kohta eelnevas postituses). Suurimad raskused tekivad dokumentaarse, mitte relatsioonilise mudeli rakendamisel graafimudeli kohal.

KĂŒsimust, kuidas rakendada relatsioonilist mudelit graafimudeli kohal, arutati juba relatsioonilise mudeli algusaegadel. Nagu ĂŒtles, nĂ€iteks David McGovern:

Graafi lĂ€henemisviisis ei ole midagi sellist, mis takistaks graafandmebaasi pĂ”hjal kihi loomist (nt sobiva indekseerimise abil), mis vĂ”imaldaks relatsioonilist vaadet koos (1) tavapĂ€raste vĂ”tmevÀÀrtuste paari pĂ”hjal tupplike taastamisega ja (2) tupplike rĂŒhmitamisega suhte tĂŒĂŒbi jĂ€rgi.

Dokumentaarse mudeli rakendamisel graafimudeli kohal tuleb arvestada nÀiteks jÀrgmist:

  • JSON-massiivi elemendid loetakse jĂ€rjestatud, graafi serva tipust lĂ€htuvad — ei;
  • Dokumentaarses mudelis on andmed tavaliselt denormeeritud, ei soovi ikkagi hoida mitmeid koopiaid samast siserese dokumentist, ja aladokumentide identifikaatorid puuduvad tavaliselt.
  • Teiselt poolt, dokumentide andmebaaside ideoloogia seisneb selles, et dokumendid on valmis "kogumid", mida ei pea iga kord uuesti ĂŒles ehitama. On vajalik tagada graafimudelis vĂ”imalus kiiresti saada alagraaf, mis vastab valminud dokumendile.

Natuke reklaami

Artikli autor on seotud andmebaasi NitrosBase arendamisega, mille sisemine mudel on graafiline ja vĂ€lismudelid — relatsiooniline ja dokumentaalne — on selle representatsioonid. KĂ”ik mudelid on vĂ”rdsed: praktiliselt kĂ”ik andmed on saadaval igas neist, kasutades loomulikku selle keele pĂ€ringu jaoks. Veelgi enam, igas representatsioonis saab andmeid muuta. Muudatused kajastuvad sisemodelis ja vastavalt ka teistes representatsioonides.

Kuidas mudelite vastavus NitrosBase'is vĂ€lja nĂ€eb — kirjeldan, loodan, ĂŒhes jĂ€rgmistest artiklitest.

KokkuvÔte

Loodetavasti on nĂŒĂŒd saanud lugejale selgeks, mida mĂ”istetakse muldimudeli all. Multimudeliteks nimetatakse erinevaid andmebaasisĂŒsteeme ning "mitme mudeli toetamine" vĂ”ib vĂ€lja nĂ€ha erinevalt. Selle mĂ”istmiseks, mida mĂ”istetakse "multimudeli" all konkreetses kontekstis, on kasulik vastata jĂ€rgmistele kĂŒsimustele:

  1. Kas rÀÀgitakse traditsiooniliste mudelite toetamises vĂ”i on tegu mingi "hĂŒbriidse" mudeliga?
  2. Kas mudelid on "vĂ”rdsetes tingimustes" vĂ”i on ĂŒks neist teistest ĂŒle?
  3. Kas mudelid on ĂŒksteise suhtes "ĂŒkskikud"? Kas ĂŒhe mudeli alla kirjutatud andmed saavad olla loetavad teises vĂ”i isegi ĂŒmberkirjutatud?

Ma arvan, et nĂŒĂŒdsaegsete mitmemudelite andmebaaside (SУБД) asjakohasuse kĂŒsimusele saab juba positiivselt vastata, kuid huvitav on see, milliseid nende sorte nĂ”utakse lĂ€hitulevikus. Tundub, et nĂ”udlus suureneb traditsiooniliste mudelite, eelkĂ”ige relatsiooniliste, toetavate mitmemudelite andmebaaside jĂ€rele; mitmemudelite andmebaaside populaarsus, mis pakuvad uusi mudeleid, kombineerides erinevate traditsiooniliste omadusi, on asi, mis kuulub rohkem kaugemasse tulevikku.

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Kas kasutate mitmemudelite andmebaase?

  • Ei kasuta, hoiame kĂ”ike ĂŒhes andmebaasis ja ĂŒhes mudelis

  • Kasutame traditsiooniliste andmebaaside mitmemudelite vĂ”imalusi

  • Harjutame mitmehargalist salvestamist (polyglot persistence)

  • Kasutame uusi mitmemudelite andmebaase (Arango, Orient, CosmosDB)

HÀÀletas 19 kasutajat. 4 kasutajat jÀi erapooletuks.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster