Da li su multimodelni DBMS osnova modernih informacionih sistema?

Savremeni informacioni sistemi su prilično složeni. Ne manje od svega, njihova složenost je posljedica složenosti podataka koji se u njima obrađuju. Složenost podataka često leži u različitim modelima podataka koji se koriste. Tako, na primjer, kada podaci postanu „veliki“, jedna od problematičnih karakteristika nije samo njihov volumen („volumen“), već i njihova raznolikost („raznovrsnost“).

Ako još uvijek ne pronađete nedostatak u obrazloženju, čitajte dalje.

Da li su multimodelni DBMS osnova modernih informacionih sistema?


Sadržaj

Poliglotska upornost
Multi-model
Višemodelni DBMS zasnovan na relacionom modelu
     Model dokumenta u MS SQL Serveru
     Grafički model u MS SQL Serveru
Višemodelni DBMS zasnovan na modelu dokumenta
     Relacioni model u MarkLogic-u
     Grafički model u MarkLogic-u
Multi-model DBMS “bez glavnog modela”
     ArangoDB
     OrientDB
     Azure CosmosDB
Multi-model DBMS zasnovan na modelu grafa?
zaključak
Anketa

Poliglotska upornost

Navedeno dovodi do činjenice da je ponekad čak iu okviru jednog sistema potrebno koristiti više različitih DBMS-a za pohranjivanje podataka i rješavanje različitih problema njihove obrade, od kojih svaki podržava svoj model podataka. Lakom rukom M. Fowlera, autor niz poznatih knjiga i jedna od koautori Agile Manifest, ova situacija se zove viševarijantno skladištenje („upornost poliglota“).

Fowler također ima sljedeći primjer organiziranja pohrane podataka u potpuno opremljenoj aplikaciji s velikim opterećenjem u polju e-trgovine.

Da li su multimodelni DBMS osnova modernih informacionih sistema?

Ovaj primjer je, naravno, pomalo preuveličan, ali se mogu naći neka razmatranja u korist odabira jednog ili drugog DBMS-a za odgovarajuću svrhu, npr. ovdje.

Jasno je da u takvom zoološkom vrtu nije lako biti sluga.

  • Količina koda koji obavlja skladištenje podataka raste proporcionalno broju korištenih DBMS-ova; količina podataka za sinhronizaciju koda je dobra ako nije proporcionalna kvadratu ovog broja.
  • Kao višekratnik broja korišćenih DBMS-ova, troškovi obezbeđivanja karakteristika preduzeća (skalabilnost, tolerancija grešaka, visoka dostupnost) svakog od korišćenih DBMS-a rastu.
  • Nemoguće je osigurati poslovne karakteristike podsistema za skladištenje u cjelini – posebno transakcionost.

Iz ugla direktora zoološkog vrta, sve izgleda ovako:

  • Višestruko povećanje troškova licenci i tehničke podrške proizvođača DBMS-a.
  • Prekomjerno osoblje i povećani rokovi.
  • Direktni finansijski gubici ili kazne zbog nedosljednosti podataka.

Postoji značajno povećanje ukupnih troškova vlasništva sistema (TCO). Postoji li izlaz iz situacije „više opcija za skladištenje“?

Multi-model

Termin „multivarijantno skladištenje“ ušao je u upotrebu 2011. Osvješćivanje problema pristupa i traženje rješenja trajalo je nekoliko godina, a do 2015. godine, kroz usta analitičara Gartnera, formulisan je odgovor:

Čini se da su ovog puta analitičari Gartnera bili u pravu sa svojom prognozom. Ako odete na stranicu sa glavni rejting DBMS na DB-Engines, to možete vidjetiоVećina njegovih lidera se pozicionira posebno kao multimodelni DBMS. Isto se može vidjeti na stranici sa bilo kojom privatnom ocjenom.

U tabeli ispod prikazani su DBMS - lideri u svakoj od privatnih ocjena, koji tvrde da su multimodelni. Za svaki DBMS je naznačen originalni podržani model (koji je nekada bio jedini) i zajedno sa njim trenutno podržani modeli. Navedeni su i DBMS-ovi koji se pozicioniraju kao „prvobitno multimodelni“ i, prema kreatorima, nemaju nikakav inicijalni naslijeđeni model.

DBMSPočetni modelDodatni modeli
proročanstvorelacijskiGrafikon, dokument
MSSQLrelacijskiGrafikon, dokument
PostgreSQLrelacijskiGrafikon*, dokument
MarkLogicDokumentaracGrafikon, relacioni
MongoDBDokumentaracKljuč/vrijednost, grafikon*
DataStaxŠiroka kolonaDokumentarac, graf
RedisKljuč/vrijednostdokumentarac, graf*
ArangoDB-Grafikon, dokument
OrientDB-Grafikon, dokument, relacija
Azure CosmosDB-Grafikon, dokument, relacija

Bilješke na stolu

Zvezdice u tabeli označavaju izjave koje zahtevaju rezervacije:

  • PostgreSQL DBMS ne podržava model podataka grafa, ali ga ovaj proizvod podržava na osnovu toga, kao što je AgensGraph.
  • U odnosu na MongoDB, ispravnije je govoriti o prisutnosti operatora grafa u jeziku upita ($lookup, $graphLookup) nego o podršci modelu grafa, iako je, naravno, njihovo uvođenje zahtevalo neke optimizacije na nivou fizičkog skladištenja u pravcu podrške modelu grafa.
  • U odnosu na Redis, mislimo na proširenje RedisGraph.

Zatim ćemo za svaku od klasa pokazati kako je podrška za nekoliko modela implementirana u DBMS iz ove klase. Smatrat ćemo relacijske, dokumentne i grafičke modele najvažnijim i koristiti primjere specifičnih DBMS-a da pokažemo kako se implementiraju oni koji nedostaju.

Višemodelni DBMS zasnovan na relacionom modelu

Vodeći DBMS-ovi trenutno su relacijski. Gartnerova prognoza ne bi se mogla smatrati istinitom ako RDBMS-ovi ne pokazuju kretanje u pravcu višestrukog modeliranja. I demonstriraju. Sada se ideja da je multimodelni DBMS poput švicarskog noža, koji ne može učiniti ništa dobro, može direktno uputiti Larryju Ellisonu.

Autor, međutim, preferira implementaciju multimodeliranja u Microsoft SQL Server, na čijem će primjeru biti opisana podrška RDBMS za modele dokumenata i grafova.

Model dokumenta u MS SQL Serveru

Na Habréu su već bila dva odlična članka o tome kako MS SQL Server implementira podršku za model dokumenta Ograničit ću se na kratko prepričavanje i komentare;

Način podrške modelu dokumenta u MS SQL Serveru prilično je tipičan za relacijske DBMS: predlaže se da se JSON dokumenti pohranjuju u obična tekstualna polja. Podrška za model dokumenta je obezbjeđivanje posebnih operatora za raščlanjivanje ovog JSON-a:

Drugi argument oba operatora je izraz u JSONPath-sličnoj sintaksi.

Apstraktno, možemo reći da dokumenti pohranjeni na ovaj način nisu “prvoklasni entiteti” u relacijskom DBMS-u, za razliku od tuple-a. Konkretno, u MS SQL Serveru trenutno nema indeksa na poljima JSON dokumenata, što otežava spajanje tabela koristeći vrijednosti ovih polja, pa čak i odabir dokumenata koristeći te vrijednosti. Međutim, moguće je kreirati izračunatu kolonu za takvo polje i indeks na njemu.

Dodatno, MS SQL Server pruža mogućnost pogodne izrade JSON dokumenta iz sadržaja tabela koristeći operator FOR JSON PATH - mogućnost, u određenom smislu, suprotna prethodnoj, konvencionalno skladištenje. Jasno je da bez obzira na to koliko je brz RDBMS, ovaj pristup je u suprotnosti sa ideologijom dokumentnih DBMS-a, koji u suštini pohranjuju gotove odgovore na popularne upite i mogu riješiti samo probleme lakoće razvoja, ali ne i brzine.

Konačno, MS SQL Server vam omogućava da riješite suprotan problem konstrukcije dokumenta: možete rastaviti JSON u tabele koristeći OPENJSON. Ako dokument nije potpuno ravan, morat ćete ga koristiti CROSS APPLY.

Grafički model u MS SQL Serveru

Podrška za model grafa (LPG) je također u potpunosti implementirana u Microsoft SQL Server predvidljivo: Predlaže se korištenje posebnih tablica za pohranjivanje čvorova i pohranjivanje rubova grafa. Takve tabele se kreiraju pomoću izraza CREATE TABLE AS NODE и CREATE TABLE AS EDGE respektivno.

Tabele prvog tipa su slične običnim tablicama za pohranjivanje zapisa, s jedinom vanjskom razlikom što tablica sadrži sistemsko polje $node_id — jedinstveni identifikator čvora grafa unutar baze podataka.

Slično, tabele drugog tipa imaju sistemska polja $from_id и $to_id, unosi u takvim tabelama jasno definišu veze između čvorova. Za pohranjivanje relacija svakog tipa koristi se posebna tabela.

Da li su multimodelni DBMS osnova modernih informacionih sistema? Ilustrirajmo to primjerom. Neka podaci na grafikonu imaju izgled kao što je prikazano na slici. Zatim da biste kreirali odgovarajuću strukturu u bazi podataka morate pokrenuti sljedeće DDL upite:

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

Glavna specifičnost ovakvih tabela je da je u upitima protiv njih moguće koristiti obrasce grafova sa sintaksom sličnom Cypher (međutim, “*"itd. još nisu podržani). Na osnovu mjerenja performansi, također se može pretpostaviti da se način na koji se podaci pohranjuju u ovim tabelama razlikuje od načina na koji se podaci pohranjuju u regularnim tabelama i optimiziran za izvršavanje takvih upita na grafu.

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

Štoviše, prilično je teško ne koristiti ove obrasce grafova kada radite s takvim tabelama, jer će u običnim SQL upitima za rješavanje sličnih problema biti potrebno uložiti dodatne napore da se dobiju identifikatori čvorova "grafa" sistema ($node_id, $from_id, $to_id; Iz istog razloga, upiti za umetanje podataka ovdje nisu prikazani jer su nepotrebno glomazni).

Da sumiramo opis implementacija modela dokumenta i grafova u MS SQL Serveru, napomenuo bih da se ovakve implementacije jednog modela na drugi ne čine uspješnim, prvenstveno sa stanovišta jezičkog dizajna. Potrebno je proširiti jedan jezik drugim, jezici nisu potpuno „ortogonalni“, pravila kompatibilnosti mogu biti prilično bizarna.

Višemodelni DBMS zasnovan na modelu dokumenta

U ovom odeljku, želeo bih da ilustrujem implementaciju multimodela u dokument DBMS na primeru ne najpopularnijeg od njih, MongoDB (kao što je rečeno, ima samo uslovne operatore grafa $lookup и $graphLookup, ne radeći na podijeljenim kolekcijama), ali koristeći primjer zrelijeg i „poduzetničkog“ DBMS-a MarkLogic.

Dakle, neka kolekcija sadrži skup XML dokumenata sljedećeg tipa (MarkLogic vam također omogućava pohranjivanje JSON dokumenata):

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

Relacioni model u MarkLogic-u

Relacioni prikaz zbirke dokumenata može se kreirati pomoću predložak za prikaz (sadržaj elemenata value u primjeru ispod može postojati proizvoljan XPath):

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

Možete adresirati kreirani pogled pomoću SQL upita (na primjer, putem ODBC-a):

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

Nažalost, relacijski prikaz kreiran predloškom prikaza je samo za čitanje. Prilikom obrade zahtjeva za to, MarkLogic će pokušati koristiti indeksi dokumenata. Ranije je MarkLogic u potpunosti imao ograničene relacijske poglede baziran na indeksu i upisivi, ali se sada smatraju zastarjelim.

Grafički model u MarkLogic-u

Uz podršku za graf (RDF) model, sve je otprilike isto. Opet uz pomoć predložak za prikaz možete kreirati RDF reprezentaciju kolekcije dokumenata iz gornjeg primjera:

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

Rezultirajući RDF graf možete adresirati sa SPARQL upitom:

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

Za razliku od relacionog, MarkLogic podržava model grafa na dva druga načina:

  1. DBMS može biti potpuno odvojeno skladište RDF podataka (trojke u njemu će se zvati upravlja za razliku od gore opisanih izvučeni).
  2. RDF u posebnoj serijalizaciji može se jednostavno umetnuti u XML ili JSON dokumente (i tripleti će se tada zvati neupravljano). Ovo je vjerovatno alternativa mehanizmima idref i drugi.

Dobra ideja o tome kako stvari "stvarno" funkcionišu u MarkLogicu daje Optički API, u tom smislu je niskog nivoa, iako je njegova svrha pre suprotna - da pokuša da se apstrahuje od modela podataka koji se koristi, da osigura konzistentan rad sa podacima u različitim modelima, transakcionost itd.

Multi-model DBMS “bez glavnog modela”

Postoje i DBMS-ovi na tržištu koji se pozicioniraju kao inicijalno multimodelni, bez ikakvog naslijeđenog glavnog modela. To uključuje ArangoDB, OrientDB (od 2018 razvojna kompanija pripada SAP-u) i CosmosDB (usluga kao dio Microsoft Azure cloud platforme).

U stvari, postoje „osnovni“ modeli u ArangoDB i OrientDB. U oba slučaja radi se o vlastitim modelima podataka, koji su generalizacije dokumentnog. Generalizacije uglavnom služe za olakšavanje mogućnosti izvođenja upita grafske i relacijske prirode.

Ovi modeli su jedini dostupni za upotrebu u navedenom DBMS-u, dizajnirani su za rad s njima. Naravno, takvi modeli i DBMS-ovi obećavaju, ali nedostatak kompatibilnosti sa standardnim modelima i jezicima onemogućava korištenje ovih DBMS-a u naslijeđenim sistemima – da bi se zamijenili DBMS-ovi koji se već koriste.

Već je postojao divan članak o ArangoDB i OrientDB na Habréu: JOIN u NoSQL bazama podataka.

ArangoDB

ArangoDB tvrdi da podržava model podataka grafa.

Čvorovi grafa u ArangoDB-u su obični dokumenti, a ivice su dokumenti posebnog tipa koji, uz redovna sistemska polja, imaju (_key, _id, _rev) sistemska polja _from и _to. Dokumenti u DBMS-ovima dokumenata tradicionalno se kombinuju u kolekcije. Kolekcije dokumenata koji predstavljaju ivice nazivaju se kolekcije rubova u ArangoDB-u. Usput, dokumenti za prikupljanje rubova su također dokumenti, tako da ivice u ArangoDB-u također mogu djelovati kao čvorovi.

Sirovi podaci

Dajte nam kolekciju persons, čiji dokumenti izgledaju ovako:

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

Neka bude i zbirka cafes:

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

Zatim kolekcija likes može izgledati ovako:

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

Upiti i rezultati

Upit u stilu grafa na AQL jeziku koji se koristi u ArangoDB-u, koji vraća u čovjeku čitljivom obliku informacije o tome ko voli koji kafić, izgleda ovako:

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

U relacionom stilu, gde „računamo“ odnose umesto da ih pohranjujemo, ovaj upit se može prepisati ovako (usput, bez kolekcije likes mogao bez):

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 }

Rezultat će u oba slučaja biti isti:

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

Više upita i rezultata

Ako se gornji format rezultata čini tipičnijim za relacijski DBMS nego za dokument DBMS, možete isprobati ovaj upit (ili možete koristiti COLLECT):

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

Rezultat će izgledati ovako:

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

OrientDB

Osnova za implementaciju modela grafa na vrhu modela dokumenta u OrientDB je prilika polja dokumenta, pored manje-više standardnih skalarnih vrijednosti, imaju i vrijednosti tipova kao npr LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Vrijednosti ovih tipova su veze ili kolekcije veza ka identifikatori sistema dokumenti.

Identifikator dokumenta koji je dodijelio sistem ima "fizičko značenje", što ukazuje na poziciju zapisa u bazi podataka, i izgleda otprilike ovako: @rid : #3:16. Dakle, vrijednosti referentnih svojstava su zapravo pokazivači (kao u modelu grafa), a ne uvjeti odabira (kao u relacijskom modelu).

Kao i ArangoDB, ivice u OrientDB-u su predstavljene kao zasebni dokumenti (iako ako ivica nema svoja svojstva, može se napraviti lagana, i neće odgovarati posebnom dokumentu).

Sirovi podaci

U formatu bliskom dump format OrientDB baze podataka, podaci iz prethodnog primjera za ArangoDB bi izgledali otprilike ovako:

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

Kao što možemo vidjeti, vrhovi također pohranjuju informacije o dolaznim i odlaznim rubovima. At koristeći Document API mora sam nadgledati referentni integritet, a Graph API preuzima ovaj posao. Ali hajde da vidimo kako izgleda pristup OrientDB-u u "čistim" jezicima upita koji nisu integrisani u programske jezike.

Upiti i rezultati

Upit sličan po svrsi upitu iz primjera za ArangoDB u OrientDB izgleda ovako:

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

Rezultat će se dobiti u sljedećem obliku:

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

Ako se format rezultata opet čini previše „relacionim“, morate ukloniti liniju sa UNWIND():

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

OrientDB-ov jezik upita može se opisati kao SQL sa umetcima sličnim Gremlinu. U verziji 2.2 pojavio se obrazac zahtjeva sličan 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

Format rezultata će biti isti kao u prethodnom zahtjevu. Razmislite o tome šta treba ukloniti da bi bilo više "relacijski", kao u prvom upitu.

Azure CosmosDB

U manjoj mjeri, ono što je gore rečeno o ArangoDB i OrientDB odnosi se na Azure CosmosDB. CosmosDB pruža sljedeće API-je za pristup podacima: SQL, MongoDB, Gremlin i Cassandra.

SQL API i MongoDB API se koriste za pristup podacima u modelu dokumenta. Gremlin API i Cassandra API - za pristup podacima u formatima grafikona i kolona, ​​respektivno. Podaci u svim modelima se čuvaju u CosmosDB internom formatu modela: ARS (“atom-record-sequence”), koji je takođe blizak dokumentu.

Da li su multimodelni DBMS osnova modernih informacionih sistema?

Ali model podataka koji je odabrao korisnik i korišteni API su fiksni u trenutku kreiranja naloga u servisu. Nije moguće pristupiti podacima učitanim u jednom modelu u formatu drugog modela, što ilustruje nešto poput ovoga:

Da li su multimodelni DBMS osnova modernih informacionih sistema?

Dakle, multi-model u Azure CosmosDB danas je samo mogućnost korištenja nekoliko baza podataka koje podržavaju različite modele jednog proizvođača, što ne rješava sve probleme viševarijantnog skladištenja.

Multi-model DBMS zasnovan na modelu grafa?

Zanimljiva je činjenica da na tržištu još nema višemodelnih DBMS-ova koji su zasnovani na grafičkom modelu (osim podrške za više modela za istovremeno dva modela grafa: RDF i LPG; pogledajte ovo u prethodna publikacija). Najveće poteškoće izaziva implementacija modela dokumenta iznad modela grafa, a ne relacionog.

Pitanje kako implementirati relacioni model na vrhu grafskog modela razmatrano je još tokom formiranja potonjeg. Kako govorio, na primjer, David McGovern:

Ne postoji ništa svojstveno pristupu grafa što sprečava kreiranje sloja (npr. odgovarajućim indeksiranjem) na bazi podataka grafova koji omogućava relacioni pogled sa (1) obnavljanjem torki iz uobičajenih parova vrednosti ključa i (2) grupisanjem tuple po tipu relacije.

Kada implementirate model dokumenta na model grafa, morate imati na umu, na primjer, sljedeće:

  • Elementi JSON niza se smatraju uređenim, ali oni koji izlaze iz vrha ivice grafa nisu;
  • Podaci u modelu dokumenta obično su denormalizirani, još uvijek ne želite pohraniti nekoliko kopija istog ugrađenog dokumenta, a poddokumenti obično nemaju identifikatore;
  • S druge strane, ideologija dokumentnih DBMS-a je da su dokumenti gotovi „agregati“ koje ne treba svaki put iznova graditi. Potrebno je obezbediti model grafa sa mogućnošću brzog dobijanja podgrafa koji odgovara gotovom dokumentu.

Malo reklame

Autor članka se odnosi na razvoj NitrosBase DBMS-a, čiji je interni model graf, a eksterni modeli – relacijski i dokument – ​​su njegove reprezentacije. Svi modeli su jednaki: gotovo svi podaci dostupni su u bilo kojem od njih koristeći jezik upita koji mu je prirodan. Štaviše, u bilo kojem prikazu podaci se mogu mijenjati. Promjene će se odraziti na interni model i, shodno tome, na druge poglede.

Nadam se da ću opisati kako uparivanje modela izgleda u NitrosBaseu u jednom od sljedećih članaka.

zaključak

Nadam se da su opšti obrisi onoga što se naziva multimodeliranjem postali manje-više jasni čitaocu. Višemodelni DBMS-ovi su prilično različiti, a „podrška za više modela“ može izgledati drugačije. Da bismo razumjeli šta se u svakom konkretnom slučaju naziva "multi-modelom", korisno je odgovoriti na sljedeća pitanja:

  1. Govorimo li o podršci tradicionalnim modelima ili nekoj vrsti “hibridnog” modela?
  2. Da li su modeli „jednaki“, ili je jedan od njih predmet ostalih?
  3. Da li su modeli “ravnodušni” jedni prema drugima? Da li se podaci napisani u jednom modelu mogu pročitati u drugom ili čak prepisati?

Mislim da se na pitanje o relevantnosti multimodelnih DBMS-a već može pozitivno odgovoriti, ali je interesantno pitanje koje vrste njih će biti traženije u bliskoj budućnosti. Čini se da će višemodelni DBMS koji podržavaju tradicionalne modele, prvenstveno relacijske, biti traženiji; Popularnost multimodelnih DBMS-a, koji nude nove modele koji kombinuju prednosti raznih tradicionalnih, pitanje je daleke budućnosti.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Da li koristite multi-model DBMS?

  • Mi to ne koristimo, sve pohranjujemo u jedan DBMS i u jedan model

  • Koristimo multimodelne mogućnosti tradicionalnih DBMS-ova

  • Prakticiramo poliglotsku upornost

  • Koristimo novi multi-model DBMS (Arango, Orient, CosmosDB)

Glasalo je 19 korisnika. 4 korisnika je bila uzdržana.

izvor: www.habr.com

Dodajte komentar