Multimudeli andmebaasid – kaasaegsete infosĂŒsteemide alus?

Kaasaegsed teabevĂ”rgustikud on piisavalt keerulised. Nende keerukust pĂ”hjustab osaliselt ka töötlemiseks kasutatavate andmete keerukus. Andmete keerukus seisneb sageli kasutatavate andmemudelite mitmekesisuses. NĂ€iteks, kui andmed muutuvad „suureks”, on ĂŒheks ebamugavust tekitavaks tunnuseks mitte ainult nende maht („volume”), vaid ka nende mitmekesisus („variety”).

Kui te ei leia veel arutlustest puudusi, siis lugege edasi.

Multimudeli andmebaasid – kaasaegsete infosĂŒsteemide alus?


Sisukord

Polyglot persistence
Multimodaalsus
Multimodaalsed andmebaasisĂŒsteemid relatsioonilisest mudelist
     Dokumendimudel MS SQL Serveris
     Graafikamudel MS SQL Serveris
Multimodaalsed andmebaasisĂŒsteemid dokumendimudelist
     Relatsiooniline mudel MarkLogicis
     Graafikamudel MarkLogicis
Multimodaalsed andmebaasisĂŒsteemid „ilma pĂ”himmudelta”
     ArangoDB
     OrientDB
     Azure CosmosDB
Multimodaalsed andmebaasisĂŒsteemid graafikamudelist?
KokkuvÔte
KĂŒsitlus

Polyglot persistence

Ülaltoodust tuleneb, et sageli tuleb isegi ĂŒhe sĂŒsteemi raames andmete hoidmiseks ja nende töötlemise erinevate ĂŒlesannete lahendamiseks kasutada mitmeid erinevaid andmebaasisĂŒsteeme, millest igaĂŒks toetab oma andmemudelit. TĂ€nu M. Fowlerile, autor mitme tuntud raamatu ja ĂŒhe kaasautori Agile Manifesto, sai see olukord nimeks polĂŒglot-hoidmine „(polyglot persistence)”.

Fowlerile kuulub ka jÀrgmine nÀide andmete hoidmise korraldamisest funktsionaalses ja kÔrgelt koormatud rakenduses e-kaubanduse vallas.

Multimudeli andmebaasid – kaasaegsete infosĂŒsteemide alus?

See nĂ€ide on loomulikult veidi liialdatud, kuid mĂ”ningaid kaalutlusi vastava andmebaasisĂŒsteemi valiku kasuks vĂ”ib leida nĂ€iteks siin.

Selge on, et olla teenistuses sellises loomaaia sĂŒsteemis ei ole kerge.

  • Andmete salvestamise koodi maht kasvab proportsionaalselt kasutatavate andmebaasisĂŒsteemide arvuga; andmete sĂŒnkroniseerimise koodi maht — hea, kui mitte proportsionaalselt selle arvu ruuduga.
  • Kasutatavate andmebaasisĂŒsteemide arvu suurenemisega kasvavad ka kulud enterprise-omaduste (skaaleeritavuse, rikke suhtes vastupidavuse, kĂ”rge saadavuse) tagamiseks iga kasutatava andmebaasisĂŒsteemi jaoks.
  • Ei ole vĂ”imalik tagada enterprise-omadusi andmete hoidmise all­sĂŒsteemi jaoks – eriti tehingute osas.

Loomaaia direktori vaatepunktist nÀeb see vÀlja nii:

  • Suurenenud litsentside ja andmebaasisĂŒsteemi tootja toe kulude kordamine.
  • Riigi töötajate arvu suurenemine ja tĂ€htaegade pikenemine.
  • Otsesed rahalised kahjud vĂ”i karistusmeetmed andmete kokkusobimatuse tĂ”ttu.

Kogutud sĂŒsteemi omamise kogu maksumuse (TCO) mĂ€rkimisvÀÀrne kasvu. Kas olukorrast „mitme variandi hoidmine” on mingisugune vĂ€ljapÀÀs?

Multimodaalsus

MĂ”isted „mitme variandi hoidmine” said laiemalt tuntuks 2011. aastal. Probleemide mĂ”istmine ja lahenduse leidmine vĂ”ttis mitu aastat ning 2015. aastaks oli Gartneri analĂŒĂŒtikute poolt vastus vĂ€lja pakutud:

Tundub, et seekord ei eksinud Gartneri analĂŒĂŒtikud prognoosimisega. Kui vaadata lehte, kus asub peamine reiting andmebaaside kohta DB-Engines, on nĂ€ha, etilotkaenamik nende liidritest positsioneerib end just multimudelisena. Sama vĂ”ib nĂ€ha ka igas eraldi reitingus.

Allpool on tabel, kus on nĂ€idatud andmebaasid — liidrid igas eraldi reitingus, kes vĂ€idavad oma multimudelisust. Iga andmebaasi puhul on nĂ€idatud algne toetatud mudel (mis kunagi oli ainus) ja koos sellega mudelid, mida toetatakse praegu. Samuti on esitatud andmebaasid, kes positsioneerivad end „alguses multimudelisena”, ilma algse pĂ€randmudelita, nagu vĂ€idavad nende loojad.

andmebaaseAlgne mudelTĂ€iendavad mudelid
OracleRelatsioonilineGraafiline, dokumentaalne
MS SQLRelatsioonilineGraafiline, dokumentaalne
PostgreSQLRelatsioonilineGraafiline*, dokumentaalne
MarkLogicDokumentaalneGraafiline, relatsiooniline
MongoDBDokumentaalneVÔti-vÀÀrtus, graafiline*
DataStaxLai veergDokumentaalne, graafiline
RedisVÔti-vÀÀrtusDokumentaalne, graafiline*
ArangoDB—Graafiline, dokumentaalne
OrientDB—Graafiline, dokumentaalne, relatsiooniline
Azure CosmosDB—Graafiline, dokumentaalne, relatsiooniline

MĂ€rkused tabelisse

Tabelis on tÀhistatud tÀhtedega vÀited, mis vajavad ettevaatust:

  • Andmebaas PostgreSQL ei toeta graafikamudeleid, kuid selline toode toetab seda sellel alusel, nagu nĂ€iteks AgensGraph.
  • MongoDB puhul oleks Ă”igem rÀÀkida pigem graafikute operaatorite olemasolust pĂ€ringute keeles ($lookup, $graphLookup), kui graafikamudeli toetamisest, kuigi nende loomine nĂ”udis mĂ”ningaid optimeerimisi fĂŒĂŒsilise salvestamise tasandil graafikamudeli toetamiseks.
  • Redis'e puhul rÀÀgitakse laiendamisest. RedisGraph.

Edasi vaatame iga klassi puhul, kuidas toetatakse mitmeid mudeleid andmebaasis, mis kuulub sellesse klassi. Olulisimateks mudeliteks peame suhtelist, dokumendi- ja graafikamudeleid ning toome nĂ€iteid konkreetsest andmebaasist, et nĂ€idata, kuidas „puuduvad“ mudelid on rakendatud.

Multimodaalsed andmebaasisĂŒsteemid relatsioonilisest mudelist

Peamisteks andmebaasides praegu on suhtelised, Gartneri prognoosi kohaselt ei saaks pidada tĂ€itunuks, kui RDBMS ei nĂ€itaks suundi mitmemudelilisuse suunas. Ja nad nĂ€itavad. NĂŒĂŒd vĂ”ib mĂ”tteid selle kohta, et mitmemudeliline RDBMS on nagu Ć veitsi armee nuga, millega ei saa midagi hĂ€sti teha, suunata otse Larry Ellisonile.

Autorile meeldib siiski rohkem mitmemudelilisuse rakendamine Microsoft SQL Serveris, mille nÀitel kirjeldatakse dokumentide ja graafikamudelite toetust RDBMS-is.

Dokumendimudel MS SQL Serveris

MS SQL Serveris, kuidas on rakendatud dokumentide mudeli tugi, on juba olnud kaks suurepĂ€rast artiklit Habrist, piirdun lĂŒhikese kokkuvĂ”tte ja kommentaariga:

Dokumentide mudeli toetamise viis MS SQL Serveris on piisavalt tĂŒĂŒpiline suhteliste andmebaaside jaoks: JSON-dokumendid on soovitatav salvestada tavalistesse tekstivĂ€ljadele. Dokumentide mudeli tugi seisneb selles, et pakutakse spetsiaalseid operaatorite JSON-i analĂŒĂŒsimiseks:

  • JSON_VALUE atribuutide skalaarsed vÀÀrtused vĂ€ljavĂ”tmiseks,
  • JSON_QUERY alamdokumendi vĂ€ljavĂ”tmiseks.

MĂ”lema operaatori teine argument on vĂ€ljend JSONPath-sarnases sĂŒntaksis.

Üldiselt vĂ”ib öelda, et selle viisil salvestatud dokumendid ei ole suhtelises andmebaasis „esimese klassi entiteedid“, erinevalt kinnitusest. Konkreetsemalt puuduvad MS SQL Serveris praegu indeksid JSON-dokumentide vĂ€ljade jaoks, mis raskendab tabelite ĂŒhendamise operatsioone nende vĂ€li vÀÀrtuste jĂ€rgi ja isegi dokumentide vĂ€ljavĂ”tmist nende vÀÀrtuste jĂ€rgi. Siiski on vĂ”imalik luua kalkuleeritud veerg nii vĂ€lja kui ka indeks selle piirkonna peale.

Lisaks pakub MS SQL Server mugavat vĂ”imalust koostada JSON-dokument tabelite sisust operaatori abil FOR JSON PATH — vĂ”imalus, mis on teatud mĂ”ttes vastupidine tavapĂ€rasele salvestamisele. On selge, et ĂŒkskĂ”ik kui kiire ka ei oleks RDBMS, on see lĂ€henemine vastupidine dokumentide DBMS ideoloogiale, mis sisuliselt salvestavad valmis vastuseid populaarsetele pĂ€ringutele ning lahendab vaid arenduse mugavuse, kuid mitte kiirusprobleeme.

LĂ”puks vĂ”imaldab MS SQL Server lahendada ĂŒlesande, mis on vastupidine dokumendi konstruerimisele: JSONi saab jagada tabeliteks, kasutades OPENJSON. Kui dokument ei ole tĂ€iesti tasane, tuleb kasutada PIVOT.

Graafikamudel MS SQL Serveris

Graafimudeli (LPG) toetust on Microsoft SQL Serveris ka tÀiesti ettearvatav: soovitatakse kasutada spetsiaalseid tabeleid sÔlmede salvestamiseks ja graafi servade salvestamiseks. Sellised tabelid luuakse vÀljendite abil CREATE TABLE AS NODE ja CREATE TABLE AS EDGE vastavalt.

Esimese tĂŒĂŒbi tabelid sarnanevad tavalistele salvestustabelitele, ainsa vĂ€ljendatud erinevusega, et tabelis on sĂŒsteemivĂ€li $node_id — ainulaadne graafi sĂ”lme identifikaator andmebaasi piires.

Sarnaselt on teise tĂŒĂŒbi tabelitel sĂŒsteemivĂ€ljad $from_id ja $to_id, selliste tabelite kirjed mÀÀravad selgelt sidemed sĂ”lmede vahel. Iga tĂŒĂŒbi sidemete salvestamiseks kasutatakse eraldi tabelit.

Multimudeli andmebaasid – kaasaegsete infosĂŒsteemide alus? Illustreerime öeldut nĂ€itega. Oletame, et graafialased andmed omavad skeemi, nagu on kujutatud antud joonisel. Siis, et luua vastav struktuur andmebaasis, tuleb tĂ€ita jĂ€rgmised DDL-pĂ€ringud:

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 graafimustreid Cypher-sarnase sĂŒntaksiga (kuid "*" jne ei ole veel toetatud). Tootlikkuse mÔÔtmise pĂ”hjal vĂ”ib samuti eeldada, et andmete salvestamise viis nende tabelites erineb tavapĂ€rastest tabelitest ja on optimeeritud selliste graafipĂ€ringute tĂ€itmiseks.

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

Lisaks on ĂŒsna raske töötada selliste tabelitega, ilma et kasutada graafikupatente, sest tavapĂ€rastes SQL-pĂ€ringutes analoogsete probleemide lahendamiseks on vaja teha lisapingutusi, et saada sĂŒsteemi 'graafik' sĂ”lmede identifikaatoreid ($node_id, $from_id, $to_id; sama pĂ”hjusel ei ole siin toodud andmete sisestamise pĂ€ringud, kuna need on liiga mahukad).

KokkuvĂ”tteks MS SQL Serveris dokumentide ja graafimudelite rakenduste kirjeldamisest tahan mĂ€rkida, et ĂŒhe mudeli peal teise rakendamine ei tundu esmajĂ€rgulise keelekujunduse seisukohalt Ă”nnestunud. Üht keelt tuleb laiendada teisega, keeled ei ole tĂ€ielikult 'ortoonaalsed', ĂŒhilduvuse reeglid vĂ”ivad olla ĂŒsna kummalised.

Multimodaalsed andmebaasisĂŒsteemid dokumendimudelist

Selles jaotises tahaksin illustreerida mult mudeli rakendust dokumentide andmebaasides, kasutades nĂ€idet mitte kĂ”ige populaarsemast MongoDB-st (nagu mainitud, sisaldab see vaid tinglikult graafilisi operaatorite $lookup ja $graphLookup, mis ei tööta partiteeritud kogumites), vaid kĂŒpsemast ja 'ettevĂ”tte' andmebaasist. MarkLogic.

Nii et oletame, et koguja sisaldab XML-dokumentide kogumit jÀrgmisel kujul (MarkLogic vÔimaldab ka JSON-dokumentide salvestamist):

John
  Smith

Relatsiooniline mudel MarkLogicis

Dokumentide koguse relatsiooniline esitus vÔib olla loodud kujundusmalli (elementide sisu value allolevas nÀites vÔib olla mis tahes XPath):

/Person
  
    
      Person
      
        
          SSN
          @SSN
          string
        
        
          name
          name
        
        
          surname
          surname

Loodud esitlusele saab viidata SQL-pÀringuga (nÀiteks ODBC kaudu):

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

Kahjuks on malliga loodud relatsiooniline esitus ainult lugemiseks. PĂ€ringut tööteldes pĂŒĂŒab MarkLogic kasutada dokumendi indekseid. Varasemalt oli MarkLogic’il piiratud relatsioonilised esitlused, mis pĂ”hinesid tĂ€ielikult indeksitele ja olid kirjutatav, kuid neid peetakse nĂŒĂŒd aeglaseks.

Graafikamudel MarkLogicis

Graafimudeli (RDF) toetusega on olukord enam-vĂ€hem sama. JĂ€llegi on vĂ”imalik kujundusmalli luua RDF-esitlus ĂŒlaltoodud dokumentide kollektsioonist:

/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 suhtelisest mudelist toetab MarkLogic graafimudelit ka kahes muus vormis:

  1. Andmebaas vĂ”ib olla tĂ€isvÀÀrtuslik eraldiseisev RDF-andmete hoidla (kolmnurgad nimetatakse selles managed vastandina ĂŒlaltoodud kirjeldusele extracted).
  2. RDF eriserealiseerimises vÔib lihtsalt sisestada XML- vÔi JSON-dokumentidesse (ja kolmnurgasid nimetatakse siis unmanaged). TÔenÀoliselt on see alternatiiv mehhanismidele idref ja nii edasi.

Hea ĂŒlevaade sellest, kuidas kĂ”ik MarkLogicis "pĂ€riselt" toimib, annab Optic API, sellega on see madala tasemega, kuigi selle eesmĂ€rk on pigem vastupidine — proovida abstraheerida kasutatavast andmemudelist, tagada andmete jĂ€rgelemine erinevates mudelites, tehingulisus jne.

Multimodaalsed andmebaasisĂŒsteemid „ilma pĂ”himmudelta”

Turul on ka andmebaase, mis positeerivad end algselt multimeedia mudelitena, millel ei ole mingit pÀrandatud pÔhimuudelit. Nende hulka kuuluvad ArangoDB, OrientDB (alates 2018. aastast kuulub arendajaettevÔte SAPile) ja CosmosDB (teenus osa Microsoft Azure'i pilveplatvormist).

Tegelikult on ArangoDB-l ja OrientDB-l "pĂ”himudelid" olemas. Nii ĂŒhes kui teises kaetakse oma andmemudelitega, mis on dokumendi ĂŒldistused. Üldistused seisnevad peamiselt vĂ”imaluse hĂ”lbustamises esitada graafikuid ja suhetega seotud pĂ€ringuid.

Need to productively utilize specified DBMS models, their own query languages are designed for this. These models and DBMS are certainly promising, but the lack of compatibility with standard models and languages makes it impossible to use these DBMS in legacy systems — replacing already used DBMS there.

A wonderful article about ArangoDB and OrientDB has already appeared on Habr: JOIN in NoSQL databases.

ArangoDB

ArangoDB claims support for graph data model.

Graph nodes in ArangoDB are regular documents, while edges are special types of documents that have standard system fields along with:_key, _id, _rev) system fields _from ja _to. In document-oriented DBMS, documents are traditionally grouped into collections. Collections of documents representing edges in ArangoDB are called edge collections. It's worth noting that edge collection documents are also documents, so edges in ArangoDB can also act as nodes.

Algandmed

Let us have a collection persons, the documents of which look like this:

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

Let there also be a collection cafes:

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

Then the collection likes might look like this:

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

Queries and results

A graph-style query in the AQL language used in ArangoDB, returning in human-readable form the information about who likes which cafe, looks like this:

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

In relational style, where we rather 'compute' relationships instead of storing them, this query could be rewritten like this (by the way, it could be done without the collection): likes 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 }

The result in both cases will be the same:

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

More queries and results

ЕщД Đ·Đ°ĐżŃ€ĐŸŃŃ‹ Đž Ń€Đ”Đ·ŃƒĐ»ŃŒŃ‚Đ°Ń‚Ń‹

Kui tundub, et ĂŒlaltoodud vĂ€ljundiformaat sobib pigem relatsioonilise andmebaasi kui dokumentidepĂ”hise andmebaasi jaoks, siis vĂ”ib proovida sellist pĂ€ringut (vĂ”i kasutada) KOGU):

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

Tulemuseks on jÀrgmine formaat:

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

OrientDB

Graafi mudeli rakendamine dokumentidepĂ”hise OrientDB kohal pĂ”hineb vĂ”imaluse dokumentide vĂ€ljadele, millel on lisaks enam-vĂ€hem standardsetele skalaarsetele vÀÀrtustele ka selliste tĂŒĂŒpide vÀÀrtused, nagu LINK, LINKLIST, LINKSET, LINKMAP ja LINKBAG. Need tĂŒĂŒbid — viidatud vĂ”i viidete kogud sĂŒsteemi ĐžĐŽĐ”ĐœŃ‚ĐžŃ„ĐžĐșĐ°Ń‚ĐŸŃ€id dokumentide.

Dokumendi mÀÀratud sĂŒsteemi ĐžĐŽĐ”ĐœŃ‚ĐžŃ„ĐžĐșĐ°Ń‚ĐŸŃ€il on "fĂŒĂŒsiline tĂ€hendus", nĂ€idates salvestuse positsiooni andmebaasis, ja see nĂ€eb vĂ€lja ligikaudu nii: @rid : #3:16. Seega on viidatud omaduste vÀÀrtused tĂ”eliselt pigem viidud (nagu graafimudel), mitte valiku tingimused (nagu relatsiooniline).

Nagu ArangoDB-s, esindatakse OrientDB-s servi eraldi dokumentidena (kuigi kui serval ei ole oma omadusi, vÔib selle teha kergekaaluliseks, ja sellele ei vasta eraldi dokument).

Algandmed

Sellises formaadis, mis on ligikaudu dumpi formaat andmed eelmisest nÀitest ArangoDB jaoks nÀeksid vÀlja ligikaudu niimoodi:

[
     {
      "@type": "document",
      "@rid": "#11:0",
      "@class": "Person",
      "name": "Alisa",
      "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, sÀilitavad tipud ka teavet sisse- ja vÀljaminevate servade kohta. Kui kasutamist Dokumendi API lingivÔrgustiku terviklikkuse jÀlgimine peab toimuma kÀsitsi, kuid Graph API teeb selle töö teie eest. Kuid vaatame, kuidas nÀevad vÀlja pÀringud OrientDB-s "puhtates", programmeerimiskeeltesse integreerimata pÀringute keeltes.

Queries and results

PÀring, mis on samalaadne ArangoDB nÀite pÀringule, 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Àrgmise kujul:

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

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

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

OrientDB pĂ€ringukeelt saab iseloomustada kui SQL-i Gremlin-taoliste lisanditega. Versioonis 2.2 ilmus Cypher-taoline pĂ€ringuvorm. MÄRKUS :

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 eelnevas pÀringus. MÔelge, mida on vaja eemaldada, et muuta see rohkem "suhteliseks", nagu esimeses pÀringus.

Azure CosmosDB

VÀhemalt osas kehtib eelpool öeldu ArangoDB ja OrientDB kohta Azure CosmosDB suhtes. CosmosDB pakub jÀrgmisi API-sid andmetele juurdepÀÀsuks: SQL, MongoDB, Gremlin ja Cassandra.

SQL API ja MongoDB API kasutatakse andmete juurdepÀÀsuks dokumendi mudelis. Gremlin API ja Cassandra API kasutavad andmete juurdepÀÀsuks vastavalt graafika ja veergude mudel. Andmed kÔigis mudelites salvestatakse CosmosDB sisemises mudelis: ARS ("atom-record-sequence"), mis on samuti lÀhedane dokumentide mudelile.

Multimudeli andmebaasid – kaasaegsete infosĂŒsteemide alus?

Kuid kasutaja valitud andmemudel ja kasutatav API kinnitatakse konto loomise hetkeks teenuses. Andmetele, mis on laaditud ĂŒhes mudelis, ei saa juurde pÀÀseda teises mudelis, lahendust illustreerimiseks vĂ”iks vĂ€lja pakkuda jĂ€rgmise joonise:

Multimudeli andmebaasid – kaasaegsete infosĂŒsteemide alus?

Seega tĂ€hendab mitmekesisus Azure CosmosDB-s tĂ€napĂ€eval vaid vĂ”imalust kasutada mitut andmebaasi, mis toetavad erinevaid mudeleid, ĂŒhe tootja kĂ€est, mis ei lahenda kĂ”iki multifunktsionaalse salvestamise probleeme.

Multimodaalsed andmebaasisĂŒsteemid graafikamudelist?

Tuleb mÀrkida, et turul pole veel mitme mudeli andmebaase, mille aluseks oleks graafikamudel (kui mitte lugeda mitme mudelina kahe graafikamudeli samal ajal toetamise vÔimalust: RDF ja LPG; vaata selle kohta. eelmine postitus). Suurimad raskused tekivad dokumendi graafimudeli, mitte relatsioonilise rakendamisel.

KĂŒsimus, kuidas rakendada relatsioonilisi elemente graafimudeli peale, kĂ€sitleti juba nĂ”ukogude ajal selle viimase kujunemise pĂ€evadel. Kuidas ja meie tehniline direktor)., nĂ€iteks, David McGovern:

GraafipĂ”hise lĂ€henemisega ei ole seotud midagi, mis takistaks luua kihti (nt sobiva indekseerimise kaudu) graafandmebaasis, mis vĂ”imaldab relatsioonilist vaadet, kus (1) taastatakse tupelid tavapĂ€rastest vĂ”tme-vÀÀrtuspaaridest ja (2) grupeeritakse tupelid seose tĂŒĂŒbi jĂ€rgi.

Kuid graafimudeli alusel dokumendimudelit rakendades tuleb meeles pidada nÀiteks jÀrgmist:

  • JSON-massiivi elemendid loetakse jĂ€rjestatud, graafi serva tipust tulevad - mitte;
  • Dokumendimudelis on andmed tavaliselt denormaliseeritud, mitme koopia hoidmine samast sisemiselt dokumendist ei ole soovitav, samas puuduvad alldokumendidel tavaliselt identifikaatorid;
  • Teisest kĂŒljest on dokumendibaaside ideoloogia see, et dokumendid on valmid "agregaadid", mida ei pea iga kord uuesti koostama. Graafimudelis peab olema vĂ”imalik kiiresti saada alagraaf, mis vastab valmisl dokumendile.

Veidi reklaami

Artikli autor on seotud andmebaasi NitrosBase arendamisega, mille sisemine mudel on graafipÔhine ja vÀlised mudelid - relatsiooniline ja dokumendipÔhine - on selle esitlused. KÔik mudelid on vÔrdvÀÀrsed: praktiliselt kÔik andmed on saadaval igas neist, kasutades loomulikku pÀringukeelt. Veelgi enam, igas esituses saab andmeid muuta. Muudatused kajastuvad sisemises mudelis ja vastavalt ka teistes esitustes.

Kuidas mudelid NitrosBase'is vastavad - loodan kirjeldada ĂŒhes jĂ€rgnevates artiklites.

KokkuvÔte

Loodan, et ĂŒldised kontuurid selle kohta, mida nimetatakse mitmemudelilisuseks, on lugejale enam-vĂ€hem selged. Mitmemudelist rÀÀkivad andmebaasid on ĂŒsna erinevad ja "mitme mudeli toetamine" vĂ”ib vĂ€lja nĂ€ha erinevalt. Selle mĂ”istmiseks, mida mĂ”istetakse "mitmemudelilisuse" all iga konkreetse juhtumi puhul, on kasulik vastata jĂ€rgmistele kĂŒsimustele:

  1. Kas on jutt traditsiooniliste mudelite toetamisest vĂ”i mingist ĂŒhest "hĂŒbriidmudelist"?
  2. Kas mudelid on "vĂ”rdvÀÀrsed", vĂ”i on ĂŒks neist alluv teistele?
  3. Kas on mudelite vahel ĂŒkskĂ”ik? Kas ĂŒhe mudeli andmeid saab lugeda teises vĂ”i isegi ĂŒle kirjutada?

MĂ”tleksin, et kĂŒsimusele multimeetodiliste andmebaasisĂŒsteemide aktuaalsuse kohta saab juba positiivselt vastata, kuid huvitav on kĂŒsimus, millised nende variandid saavad lĂ€hitulevikus rohkem nĂ”udlust. Tundub, et rohkem kĂŒsitakse multimeetodiliste andmebaasisĂŒsteemide jĂ€rele, mis toetavad traditsioonilisi mudeleid, eelkĂ”ige relatsioonilisi; multimeetodiliste andmebaasisĂŒsteemide populaarsus, mis pakuvad uusi mudeleid, kombineerides erinevate traditsiooniliste eeliseid, on kaugema tuleviku kĂŒsimus.

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

Kasutate multimeetodilisi andmebaasisĂŒsteeme?

  • Ei kasuta, kĂ”ik andmed hoitakse ĂŒhes andmebaasis ja ĂŒhes mudelis

  • Kasutame traditsiooniliste andmebaasisĂŒsteemide multimeetodilisi vĂ”imalusi

  • Praktiliselt rakendame polĂŒgloti pĂŒsivust (polyglot persistence)

  • Kasutame uusi multimeetodilisi andmebaasisĂŒsteeme (Arango, Orient, CosmosDB)

HÀÀletas 19 kasutajat. 4 kasutajat olid erapooletud.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster