Moderna informationssystem Àr ganska komplexa. Inte minst av allt beror deras komplexitet pÄ komplexiteten hos de data som behandlas i dem. Datans komplexitet ligger ofta i mÀngden datamodeller som anvÀnds. SÄ, till exempel, nÀr data blir "stora", Àr en av de problematiska egenskaperna inte bara dess volym ("volym"), utan ocksÄ dess variation ("variation").
Om du Ànnu inte hittar en brist i resonemanget, lÀs vidare.

InnehÄll
Polyglott uthÄllighet
OvanstÄende leder till det faktum att det ibland Àven inom ramen för ett system Àr nödvÀndigt att anvÀnda flera olika DBMS:er för att lagra data och lösa olika problem med att bearbeta dem, som var och en stöder sin egen datamodell. Med M. Fowlers lÀtta hand, ett antal kÀnda böcker och en av Agile Manifesto kallas denna situation lagring med flera varianter ("polyglot persistens").
Fowler har ocksÄ följande exempel pÄ att organisera datalagring i en fullfjÀdrad och högbelastningsapplikation inom e-handelsomrÄdet.

Detta exempel Àr förstÄs nÄgot överdrivet, men vissa övervÀganden som talar för att vÀlja ett eller annat DBMS för motsvarande ÀndamÄl kan t.ex. .
Det Àr klart att det inte Àr lÀtt att vara tjÀnare i en sÄdan djurpark.
- MÀngden kod som utför datalagring vÀxer i proportion till antalet anvÀnda DBMS; mÀngden kodsynkroniseringsdata Àr bra om inte proportionell mot kvadraten pÄ detta tal.
- Som en multipel av antalet anvÀnda DBMS ökar kostnaderna för att tillhandahÄlla företagsegenskaper (skalbarhet, feltolerans, hög tillgÀnglighet) för var och en av de anvÀnda DBMS.
- Det Àr omöjligt att sÀkerstÀlla företagsegenskaperna för lagringsdelsystemet som helhet - sÀrskilt transaktionalitet.
Ur djurparksdirektörens synvinkel ser allt ut sÄ hÀr:
- En multipel ökning av kostnaden för licenser och teknisk support frÄn DBMS-tillverkaren.
- Ăverbemanning och ökade deadlines.
- Direkta ekonomiska förluster eller pÄföljder pÄ grund av datainkonsekvens.
Det finns en betydande ökning av systemets totala Àgandekostnad (TCO). Finns det nÄgon vÀg ut ur situationen med "flera lagringsalternativ"?
Multimodell
Termen "multivariatlagring" kom i bruk 2011. Medvetenheten om problemen med tillvÀgagÄngssÀttet och sökandet efter en lösning tog flera Är, och 2015 formulerades svaret genom Gartners analytikers mun:
- FrÄn "»:
Framtiden för DBMS, deras arkitekturer och sÀtt att anvÀnda dem Àr multi-modell.
- FrÄn "»:
Ledande operativa DBMS kommer att erbjuda flera modeller â relationella och icke-relationella â som en del av en enda plattform.
Det verkar som att Gartners analytiker denna gĂ„ng hade rĂ€tt med sin prognos. Om du gĂ„r till sidan med DBMS pĂ„ DB-Engines, det kan du seĐŸDe flesta av dess ledare positionerar sig specifikt som multi-modell DBMS. Detsamma kan ses pĂ„ sidan med valfritt privat betyg.
Tabellen nedan visar DBMS - de ledande i var och en av de privata betygen, som pÄstÄr sig vara multimodeller. För varje DBMS anges den ursprungliga stödda modellen (som en gÄng var den enda) och tillsammans med den de modeller som stöds för nÀrvarande. OcksÄ listade Àr DBMS som positionerar sig som "ursprungligen multi-modell" och, enligt skaparna, inte har nÄgon initial Àrvd modell.
| DBMS | Initial modell | Ytterligare modeller |
|---|---|---|
| Oracle | Relationellt | Graf, dokument |
| MSSQL | Relationellt | Graf, dokument |
| PostgreSQL | Relationellt | Graf*, dokument |
| Marklogic | DokumentÀr | Graf, relationell |
| MongoDB | DokumentÀr | Nyckel-vÀrde, diagram* |
| DataStax | Bred kolumn | DokumentÀr, graf |
| Redis | NyckelvÀrde | DokumentÀr, graf* |
| ArangoDB | - | Graf, dokument |
| OrientDB | - | Graf, dokument, relationell |
| Azure CosmosDB | - | Graf, dokument, relationell |
Tabellanteckningar
Asterisker i tabellen markerar uttalanden som krÀver reservationer:
- PostgreSQL DBMS stöder inte grafdatamodellen, men den hÀr produkten stöder det , sÄsom AgensGraph.
- I förhÄllande till MongoDB Àr det mer korrekt att tala om förekomsten av grafoperatorer i frÄgesprÄket (, ) Àn om att stödja grafmodellen, Àven om deras införande naturligtvis krÀvde vissa optimeringar pÄ den fysiska lagringsnivÄn i riktning mot att stödja grafmodellen.
- I förhÄllande till Redis menar vi förlÀngningen .
DÀrefter kommer vi för var och en av klasserna att visa hur stöd för flera modeller implementeras i DBMS frÄn denna klass. Vi kommer att betrakta relations-, dokument- och grafmodellerna som de viktigaste och anvÀnda exempel pÄ specifika DBMS:er för att visa hur de "saknade" implementeras.
Multi-modell DBMS baserat pÄ relationsmodellen
De ledande DBMS:erna Àr för nÀrvarande relationella; Gartners prognos kunde inte anses vara sann om RDBMS:erna inte visade rörelse i riktning mot multimodellering. Och de demonstrerar. Nu kan tanken att en multimodell DBMS Àr som en schweizisk kniv, som inte kan göra nÄgot bra, riktas direkt till Larry Ellison.
Författaren föredrar dock implementeringen av multimodellering i Microsoft SQL Server, pÄ vilket exemplet RDBMS-stöd för dokument- och grafmodeller kommer att beskrivas.
Dokumentmodell i MS SQL Server
Det har redan funnits tvÄ utmÀrkta artiklar om Habré om hur MS SQL Server implementerar stöd för dokumentmodellen; Jag kommer att begrÀnsa mig till en kort ÄterberÀttelse och kommentar:
SÀttet att stödja dokumentmodellen i MS SQL Server Àr ganska typiskt för relationella DBMS:er: JSON-dokument föreslÄs lagras i vanliga textfÀlt. Stöd för dokumentmodellen Àr att tillhandahÄlla speciella operatörer för att analysera denna JSON:
- för att extrahera skalÀra attributvÀrden,
- att extrahera underdokument.
Det andra argumentet för bÄda operatorerna Àr ett uttryck i JSONPath-liknande syntax.
Sammanfattningsvis kan vi sÀga att dokument som lagras pÄ detta sÀtt inte Àr "förstklassiga enheter" i ett relationellt DBMS, till skillnad frÄn tupler. Specifikt i MS SQL Server finns det för nÀrvarande inga index pÄ fÀlten för JSON-dokument, vilket gör det svÄrt att sammanfoga tabeller med vÀrdena för dessa fÀlt och till och med vÀlja dokument med dessa vÀrden. Det Àr dock möjligt att skapa en berÀknad kolumn för ett sÄdant fÀlt och ett index pÄ det.
Dessutom ger MS SQL Server möjligheten att bekvÀmt konstruera ett JSON-dokument frÄn innehÄllet i tabeller med hjÀlp av operatorn - en möjlighet, i viss mening, motsatt den tidigare, konventionell lagring. Det Àr uppenbart att oavsett hur snabbt ett RDBMS Àr sÄ motsÀger detta tillvÀgagÄngssÀtt ideologin för dokument-DBMS, som i huvudsak lagrar fÀrdiga svar pÄ populÀra frÄgor, och kan bara lösa problem med enkel utveckling, men inte hastighet.
Slutligen lÄter MS SQL Server dig lösa det motsatta problemet med dokumentkonstruktion: du kan dekomponera JSON i tabeller med . Om dokumentet inte Àr helt platt mÄste du anvÀnda CROSS APPLY.
Grafmodell i MS SQL Server
Stöd för grafmodellen (LPG) Àr ocksÄ fullt implementerat i Microsoft SQL Server : Det föreslÄs att anvÀnda speciella tabeller för att lagra noder och för att lagra grafkanter. SÄdana tabeller skapas med hjÀlp av uttryck CREATE TABLE AS NODE О CREATE TABLE AS EDGE respektive.
Tabeller av den första typen liknar vanliga tabeller för lagring av poster, med den enda externa skillnaden Ă€r att tabellen innehĂ„ller ett systemfĂ€lt $node_id â unik identifierare för en grafnod i databasen.
PÄ liknande sÀtt har tabeller av den andra typen systemfÀlt $from_id О $to_id, poster i sÄdana tabeller definierar tydligt kopplingarna mellan noder. En separat tabell anvÀnds för att lagra relationer av varje typ.
LÄt oss illustrera detta med ett exempel. LÄt grafdata ha en layout som den som visas i figuren. För att sedan skapa motsvarande struktur i databasen mÄste du köra följande DDL-frÄgor:
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);Den huvudsakliga specificiteten för sÄdana tabeller Àr att det i frÄgor mot dem Àr möjligt att anvÀnda grafmönster med Cypher-liknande syntax (dock "*"etc. stöds inte Ànnu). Baserat pÄ prestandamÀtningar kan det ocksÄ antas att sÀttet som data lagras i dessa tabeller skiljer sig frÄn hur data lagras i vanliga tabeller och Àr optimerat för att utföra sÄdana graffrÄgor.
SELECT Cafe.name
FROM Person, likes, Cafe
WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
AND Person.name = 'John';Dessutom Àr det ganska svÄrt att inte anvÀnda dessa grafmönster nÀr man arbetar med sÄdana tabeller, eftersom det i vanliga SQL-frÄgor för att lösa liknande problem kommer att vara nödvÀndigt att göra ytterligare anstrÀngningar för att erhÄlla systemets "graf"-nodidentifierare ($node_id, $from_id, $to_id; Av samma anledning visas inte frÄgor för att infoga data hÀr eftersom de Àr onödigt krÄngliga).
För att sammanfatta beskrivningen av implementeringarna av dokument- och grafmodellerna i MS SQL Server, vill jag notera att sÄdana implementeringar av en modell ovanpÄ en annan inte verkar framgÄngsrika, frÀmst ur sprÄkdesignsynpunkt. Det Àr nödvÀndigt att utöka ett sprÄk med ett annat, sprÄken Àr inte helt "ortogonala", kompatibilitetsreglerna kan vara ganska bisarra.
Multi-modell DBMS baserat pÄ dokumentmodellen
I det hÀr avsnittet skulle jag vilja illustrera implementeringen av multimodell i dokument-DBMS med exemplet pÄ den inte mest populÀra av dem, MongoDB (som sagt, den har bara villkorade grafoperatorer $lookup О $graphLookup, arbetar inte med fragmenterade samlingar), utan anvÀnder exemplet med ett mer mogen och "företagande" DBMS .
SÄ lÄt samlingen innehÄlla en uppsÀttning XML-dokument av följande typ (MarkLogic lÄter dig ocksÄ lagra JSON-dokument):
<Person INN="631803299804">
<name>John</name>
<surname>Smith</surname>
</Person>Relationsmodell i MarkLogic
En relationsvy av en samling dokument kan skapas med hjÀlp av (innehÄll av element value i exemplet nedan kan det finnas en godtycklig 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>Du kan adressera den skapade vyn med en SQL-frÄga (till exempel via ODBC):
SELECT name, surname FROM Person WHERE name="John"TyvÀrr Àr den relationsvy som skapas av visningsmallen skrivskyddad. Vid bearbetning av en begÀran om det kommer MarkLogic att försöka anvÀnda . Tidigare hade MarkLogic begrÀnsade relationella Äsikter, helt och hÄllet och skrivbara, men nu anses de förÄldrade.
Grafmodell i MarkLogic
Med stöd för grafmodellen (RDF) Àr allt ungefÀr sig likt. à terigen med hjÀlp du kan skapa en RDF-representation av en samling dokument frÄn exemplet ovan:
<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>Du kan adressera den resulterande RDF-grafen med en SPARQL-frÄga:
PREFIX : <http://example.org/example#>
SELECT ?name ?surname {
:631803299804 :name ?name ; :surname ?surname .
}Till skillnad frÄn den relationella stöder MarkLogic grafmodellen pÄ tvÄ andra sÀtt:
- Ett DBMS kan vara en fullfjÀdrad separat lagring av RDF-data (tripletter i den kommer att anropas i motsats till de ovan beskrivna ).
- RDF i speciell serialisering kan helt enkelt infogas i XML- eller JSON-dokument (och tripletter kommer dÄ att anropas ). Detta Àr förmodligen ett alternativ till mekanismer
idrefetc.
En bra uppfattning om hur saker "verkligen" fungerar i MarkLogic ges av , i denna mening Àr det lÄgnivÄ, Àven om dess syfte snarare Àr det motsatta - att försöka abstrahera frÄn den anvÀnda datamodellen, för att sÀkerstÀlla konsekvent arbete med data i olika modeller, transaktionalitet, etc.
Multi-modell DBMS "utan en huvudmodell"
Det finns Àven DBMS pÄ marknaden som positionerar sig som initialt multimodeller, utan nÄgon Àrvd huvudmodell. Dessa inkluderar , (sedan 2018 tillhör utvecklingsbolaget SAP) och (tjÀnst som en del av Microsoft Azure molnplattform).
Faktum Àr att det finns "kÀrnmodeller" i ArangoDB och OrientDB. I bÄda fallen Àr det deras egna datamodeller, som Àr generaliseringar av dokument ett. Generaliseringarna Àr frÀmst till för att underlÀtta möjligheten att utföra frÄgor av grafisk och relationell karaktÀr.
Dessa modeller Ă€r de enda som Ă€r tillgĂ€ngliga för anvĂ€ndning i det angivna DBMS; deras egna frĂ„gesprĂ„k Ă€r designade för att fungera med dem. Naturligtvis Ă€r sĂ„dana modeller och DBMS lovande, men bristen pĂ„ kompatibilitet med standardmodeller och sprĂ„k gör det omöjligt att anvĂ€nda dessa DBMS i Ă€ldre system â för att ersĂ€tta de DBMS som redan anvĂ€nds dĂ€r.
Det fanns redan en underbar artikel om ArangoDB och OrientDB pÄ Habré: .
ArangoDB
ArangoDB hÀvdar stöd för en grafdatamodell.
Noderna i en graf i ArangoDB Àr vanliga dokument, och kanterna Àr dokument av en speciell typ som tillsammans med vanliga systemfÀlt har (_key, _id, _rev) systemfÀlt _from О _to. Dokument i dokument-DBMS kombineras traditionellt till samlingar. Samlingar av dokument som representerar kanter kallas kantsamlingar i ArangoDB. Kantsamlingsdokument Àr förresten ocksÄ dokument, sÄ kanter i ArangoDB kan ocksÄ fungera som noder.
RĂ„ data
LÄt oss ha en samling persons, vars dokument ser ut sÄ hÀr:
[
{
"_id" : "people/alice" ,
"_key" : "alice" ,
"name" : "ĐлОŃа"
},
{
"_id" : "people/bob" ,
"_key" : "bob" ,
"name" : "ĐĐŸĐ±"
}
]LÄt det ocksÄ finnas en samling cafes:
[
{
"_id" : "cafes/jd" ,
"_key" : "jd" ,
"name" : "ĐĐ¶ĐŸĐœ ĐĐŸĐœĐœ"
},
{
"_id" : "cafes/jj" ,
"_key" : "jj" ,
"name" : "ĐĐ°Đœ-ĐаĐș"
}
]Sedan samlingen likes kan se ut sÄ hÀr:
[
{
"_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
}
]FrÄgor och resultat
En frÄga i grafisk stil i AQL-sprÄket som anvÀnds i ArangoDB, som returnerar information i lÀsbar form om vem som gillar vilket kafé, ser ut sÄ hÀr:
FOR p IN persons
FOR c IN OUTBOUND p likes
RETURN { person : p.name , likes : c.name }I en relationsstil, dÀr vi "berÀknar" relationer snarare Àn att lagra dem, kan denna frÄga skrivas om sÄ hÀr (förresten, utan samlingen likes kunde klara sig utan):
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 }Resultatet i bÄda fallen blir detsamma:
[
{ "person" : "ĐлОŃа" , likes : "ĐĐ°Đœ-ĐаĐș" } ,
{ "person" : "ĐлОŃа" , likes : "ĐĐ¶ĐŸĐœ ĐĐŸĐœĐœ" } ,
{ "person" : "ĐĐŸĐ±" , likes : "ĐĐ¶ĐŸĐœ ĐĐŸĐœĐœ" }
]Fler frÄgor och resultat
Om resultatformatet ovan verkar vara mer typiskt för en relations-DBMS Àn för ett dokument-DBMS, kan du prova den hÀr frÄgan (eller sÄ kan du anvÀnda ):
FOR p IN persons
RETURN {
person : p.name,
likes : (
FOR c IN OUTBOUND p likes
RETURN c.name
)
}Resultatet kommer att se ut sÄ hÀr:
[
{ "person" : "ĐлОŃа" , likes : ["ĐĐ°Đœ-ĐаĐș" , "ĐĐ¶ĐŸĐœ ĐĐŸĐœĐœ"] } ,
{ "person" : "ĐĐŸĐ±" , likes : ["ĐĐ¶ĐŸĐœ ĐĐŸĐœĐœ"] }
]OrientDB
Grunden för att implementera en grafmodell ovanpÄ en dokumentmodell i OrientDB Àr dokumentfÀlt har, förutom mer eller mindre standardskalÀra vÀrden, Àven vÀrden av typer som t.ex LINK, LINKLIST, LINKSET, LINKMAP О LINKBAG. VÀrdena för dessa typer Àr lÀnkar eller samlingar av lÀnkar till dokument.
Dokumentidentifieraren som tilldelas av systemet har en "fysisk betydelse", som indikerar postens position i databasen, och ser ut ungefÀr sÄ hÀr: @rid : #3:16. SÄledes Àr vÀrdena för referensegenskaper egentligen pekare (som i grafmodellen) snarare Àn urvalsvillkor (som i relationsmodellen).
Liksom ArangoDB representeras kanter i OrientDB som separata dokument (Àven om en kant inte har sina egna egenskaper kan den göras , och det kommer inte att motsvara ett separat dokument).
RĂ„ data
I ett format nÀra OrientDB databas, data frÄn föregÄende exempel för ArangoDB skulle se ut ungefÀr sÄ hÀr:
[
{
"@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"
}
]Som vi kan se lagrar hörn ocksÄ information om inkommande och utgÄende kanter. PÄ Document API mÄste sjÀlv övervaka referensintegriteten, och Graph API tar pÄ sig detta arbete. Men lÄt oss se hur Ätkomst till OrientDB ser ut i "rena" frÄgesprÄk som inte Àr integrerade i programmeringssprÄk.
FrÄgor och resultat
En frÄga som till sin syfte liknar frÄgan frÄn exemplet för ArangoDB i OrientDB ser ut sÄ hÀr:
SELECT name AS person_name, OUT('likes').name AS cafe_name
FROM Person
UNWIND cafe_nameResultatet kommer att erhÄllas i följande form:
[
{ "person_name": "ĐлОŃа", "cafe_name": "ĐĐ¶ĐŸĐœ ĐĐŸĐœĐœ" },
{ "person_name": "ĐлОŃа", "cafe_name": "ĐĐ°Đœ-ĐаĐș" },
{ "person_name": "ĐĐŸĐ±", "cafe_name": "ĐĐ°Đœ-ĐаĐș" }
]Om resultatformatet igen verkar för "relationellt", mÄste du ta bort raden med :
[
{ "person_name": "ĐлОŃа", "cafe_name": [ "ĐĐ¶ĐŸĐœ ĐĐŸĐœĐœ", "ĐĐ°Đœ-ĐаĐș" ] },
{ "person_name": "ĐĐŸĐ±", "cafe_name": [ "ĐĐ°Đœ-ĐаĐș" ' }
]OrientDB:s frÄgesprÄk kan beskrivas som SQL med Gremlin-liknande inlÀgg. I version 2.2 dök ett Cypher-liknande begÀrandeformulÀr upp, :
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_nameResultatformatet kommer att vara detsamma som i föregÄende begÀran. TÀnk pÄ vad som behöver tas bort för att göra det mer "relationellt", som i den allra första frÄgan.
Azure CosmosDB
I mindre utstrÀckning gÀller det som sades ovan om ArangoDB och OrientDB för Azure CosmosDB. CosmosDB tillhandahÄller följande dataÄtkomst-API:er: SQL, MongoDB, Gremlin och Cassandra.
SQL API och MongoDB API anvÀnds för att komma Ät data i dokumentmodellen. Gremlin API och Cassandra API - för Ätkomst av data i graf- respektive kolumnformat. Data i alla modeller sparas i CosmosDBs interna modellformat: ("atom-rekord-sekvens"), som ocksÄ ligger nÀra dokumentet en.

Men datamodellen som valts av anvÀndaren och API:et som anvÀnds Àr fasta vid tidpunkten för att skapa ett konto i tjÀnsten. Det Àr inte möjligt att komma Ät data som laddats i en modell i en annan modells format, vilket illustreras av nÄgot i stil med detta:

SÄledes, multi-modell i Azure CosmosDB idag Àr bara möjligheten att anvÀnda flera databaser som stöder olika modeller frÄn en tillverkare, vilket inte löser alla problem med multi-variant lagring.
Multi-modell DBMS baserat pÄ en grafmodell?
AnmÀrkningsvÀrt Àr det faktum att det Ànnu inte finns nÄgra flermodells-DBMS pÄ marknaden som Àr baserade pÄ en grafmodell (förutom stöd för flera modeller för samtidigt tvÄ grafmodeller: RDF och LPG; se detta i ). De största svÄrigheterna orsakas av implementeringen av en dokumentmodell ovanpÄ en grafmodell, snarare Àn en relationsmodell.
FrÄgan om hur man implementerar en relationsmodell ovanpÄ grafmodellen övervÀgdes Àven under bildandet av den senare. Hur Till exempel, :
Det finns inget inneboende i grafmetoden som hindrar att skapa ett lager (t.ex. genom lÀmplig indexering) pÄ en grafdatabas som möjliggör en relationsvy med (1) ÄterhÀmtning av tupler frÄn de vanliga nyckelvÀrdesparen och (2) gruppering av tupler efter relationstyp.
NÀr du implementerar en dokumentmodell ovanpÄ en grafmodell mÄste du till exempel tÀnka pÄ följande:
- Element i en JSON-array anses vara ordnade, men de som kommer frÄn spetsen pÄ en kant av grafen Àr det inte;
- Data i dokumentmodellen denormaliseras vanligtvis; du vill fortfarande inte lagra flera kopior av samma inbÀddade dokument, och underdokument har vanligtvis inga identifierare;
- à andra sidan Àr ideologin med dokument-DBMS:er att dokument Àr fÀrdiga "aggregat" som inte behöver byggas pÄ nytt varje gÄng. Det krÀvs att grafmodellen har möjlighet att snabbt fÄ en subgraf som motsvarar det fÀrdiga dokumentet.
En del reklam
Författaren till artikeln Àr relaterad till utvecklingen av NitrosBase DBMS, vars interna modell Àr graf, och de externa modellerna - relationella och dokument - Àr dess representationer. Alla modeller Àr lika: nÀstan all data Àr tillgÀnglig i nÄgon av dem med ett frÄgesprÄk som Àr naturligt för det. Dessutom kan data Àndras i vilken vy som helst. FörÀndringar kommer att Äterspeglas i den interna modellen och följaktligen i andra synpunkter.
Jag kommer förhoppningsvis att beskriva hur modellmatchning ser ut i NitrosBase i nÄgon av följande artiklar.
Slutsats
Jag hoppas att de allmÀnna konturerna av det som kallas multimodellering har blivit mer eller mindre tydliga för lÀsaren. Multi-modell DBMS Àr ganska olika, och "multi-model support" kan se olika ut. För att förstÄ vad som kallas "multimodell" i varje specifikt fall Àr det anvÀndbart att svara pÄ följande frÄgor:
- Pratar vi om att stödja traditionella modeller eller nÄgon form av "hybrid" modell?
- Ăr modellerna "lika", eller Ă€r en av dem föremĂ„l för de andra?
- Ăr modellerna "likgiltiga" för varandra? Kan data skrivna i en modell lĂ€sas i en annan eller till och med skrivas över?
Jag tror att frÄgan om relevansen av multi-modell DBMS redan kan besvaras positivt, men den intressanta frÄgan Àr vilka typer av dem som kommer att vara mer efterfrÄgade inom en snar framtid. Det verkar som om DBMS med flera modeller som stöder traditionella modeller, i första hand relationsbaserade, kommer att ha större efterfrÄgan; Populariteten hos multi-modell DBMS, som erbjuder nya modeller som kombinerar fördelarna med olika traditionella, Àr en frÄga om en lÀngre framtid.
Endast registrerade anvÀndare kan delta i undersökningen. , SnÀlla du.
AnvÀnder du multi-model DBMS?
Vi anvÀnder det inte, vi lagrar allt i ett DBMS och i en modell
Vi anvÀnder flera modeller av traditionella DBMS:er
Vi övar polyglott uthÄllighet
Vi anvÀnder nya multi-modell DBMS (Arango, Orient, CosmosDB)
19 anvÀndare röstade. 4 anvÀndare avstod frÄn att rösta.
KĂ€lla: will.com
