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.

Sisu
    Â
    Â
    Â
    Â
    Â
    Â
    Â
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, paljude tuntud raamatute ja ĂŒhe 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.

See nÀide on muidugi veidi liialdatud, kuid mÔningaid kaalutlusi, miks valida sobiv andmebaas vastava eesmÀrgi jaoks, vÔib leida nÀiteks, .
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
- VÀljavÔte "»:
Andmebaasi tulevik, nende arhitektuur ja kasutusviisid â multimudeelsus.
- VÀljavÔte "»:
Juhtivad operatiivsed andmebaasid pakuvad mitmeid mudeleid â nii relationaalset kui ka mitte-relationaalset â ĂŒhel platvormil.
Tundub, et seekord analĂŒĂŒtikud Gartner ei eksinud. Kui minna lehele 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 mudel | TĂ€iendavad mudelid |
|---|---|---|
| Oracle | SuhetepÔhine | Graafik, dokument |
| MS SQL | SuhetepÔhine | Graafik, dokument |
| PostgreSQL | SuhetepÔhine | Graafik*, dokument |
| MarkLogic | Dokument | Graafik, suhetepÔhine |
| MongoDB | Dokument | VÔti-vÀÀrtus, graafik* |
| DataStax | Lai veerupÔhine | Dokument, graafik |
| Redis | VÔti-vÀÀrtus | Dokument, 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 , nagu nÀiteks AgensGraph.
- MongoDB puhul on korrektsem rÀÀkida pigem graafilistest operaatoritest pĂ€ringukeeles (, ), kui rÀÀgitakse graafimudeli toest, kuigi selle kasutuselevĂ”tt nĂ”udis fĂŒĂŒsilise salvestuse optimeerimist graafimudeli toetamise suunas.
- Redis'i kontekstis rÀÀgitakse laiendusest .
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:
- skaalaarsete atribuute vÀÀrtuste vÀljatÔmbamiseks,
- 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 â 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 . 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 : 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.
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. .
Olgu, oletame, et kogu kollektsioon sisaldab jÀrgmise vormingu XML-dokumente (MarkLogic toetab ka JSON-dokumentide salvestamist):
John
SmithRelatsioonimudel MarkLogicis
Dokumentide kollektsiooni suhtelise esitluse saab luua (elementide sisu value alltoodud nÀites vÔib olla soovitud XPath):
/Person
Person
SSN
@SSN
string
name
name
surname
surnameLoodud 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 . Varasemalt olid MarkLogicis ka piiratud suhtelised esitused, mis pĂ”hinesid tĂ€ielikult 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 luua RDF-esitlus ĂŒlaltoodud dokumentide kogumist:
/Person
PREFIX
"http://example.org/example#"
sem:iri( $PREFIX || @SSN )
sem:iri( $PREFIX || surname )
sem:iri( $PREFIX || @SSN )
sem:iri( $PREFIX || 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:
- Andmebaas vĂ”ib olla tĂ€ielik iseseisev RDF-andmete ladustamine (tripleid nimetatakse seal vastandina ĂŒlaltoodule ).
- RDF er spetsialiseeritud serialiseerimises vÔib lihtsalt olla kantud XML- vÔi JSON-dokumentidesse (ja tripletid nimetatakse siis ). TÔenÀoliselt on see alternatiiv mehhanismidele
idrefja sarnased.
Hea ĂŒlevaade sellest, kuidas MarkLogic tegelikult töötab, annab , 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 , (alates 2018. aastast kuulub arendav ettevÔte SAP-le) ja (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: .
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 ):
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 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 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 , ja sellele ei ole eraldi dokumenti vastavuses).
Algandmed
Formaat, mis on lÀhedane 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 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_nameTulemus 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 :
[
{ "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 {CLASS: Person, AS: person}-likes->{CLASS: Cafe, AS: cafe}
RETURN person.name AS person_name, LIST(cafe.name) AS cafe_name
GROUP BY person_nameTulemuse 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: (âatom-record-sequenceâ), mis on samuti lĂ€hedane dokumendile.

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:

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 ). Suurimad raskused tekivad dokumentaarse, mitte relatsioonilise mudeli rakendamisel graafimudeli kohal.
KĂŒsimust, kuidas rakendada relatsioonilist mudelit graafimudeli kohal, arutati juba relatsioonilise mudeli algusaegadel. Nagu , nĂ€iteks :
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:
- Kas rÀÀgitakse traditsiooniliste mudelite toetamises vĂ”i on tegu mingi "hĂŒbriidse" mudeliga?
- Kas mudelid on "vĂ”rdsetes tingimustes" vĂ”i on ĂŒks neist teistest ĂŒle?
- 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. , 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
