Moderna informationssystem Àr ganska komplexa. Inte minst beror deras komplexitet pÄ den komplexitet av de data som behandlas i dem. Denna datakomplexitet beror ofta pÄ mÄngfalden av de datamodeller som anvÀnds. Till exempel, nÀr data blir "stora", anses en av de besvÀrliga egenskaperna för dem inte bara vara deras volym, utan ocksÄ deras variation.
Om du för nÀrvarande inte hittar nÄgot fel i resonemangen, fortsÀtt att lÀsa.

InnehÄll
    Â
    Â
    Â
    Â
    Â
    Â
    Â
Polyglot persistence
Det som sagts ovan leder till att det ibland inom Àven ett enda system Àr nödvÀndigt att anvÀnda flera olika databashanteringssystem för datalagring och behandling av olika uppgifter, var och en av dem stödjer sin egen datamodell. PÄ rekommendation av M. Fowler, ett antal kÀnda böcker och en av Agile Manifesto, fick denna situation namnet polyglot persistence. Fowler ger ocksÄ följande exempel pÄ datalagring i en fullt funktionsduglig och högbelastad applikation inom e-handel.
Detta exempel Àr givetvis nÄgot överdrivet, men det finns ÀndÄ vissa övervÀganden för att vÀlja ett eller annat databashanteringssystem för ett visst syfte, exempelvis,

Det Àr uppenbart att det inte Àr lÀtt att vara en förvaltare i en sÄdan djurpark. .
MÀngden kod som utför datalagring vÀxer proportionellt med antalet anvÀnda databashanteringssystem; mÀngden kod som synkroniserar data vÀxer, om Àn inte proportionellt med kvadraten av detta antal.
- Kostnaderna för att sÀkerstÀlla företagsfunktioner (skalanvÀndbarhet, redundans, hög tillgÀnglighet) ökar med antalet anvÀnda databashanteringssystem.
- Det Ă€r omöjligt att sĂ€kerstĂ€lla företagsfunktioner för lagringssystemet som helhet â sĂ€rskilt transaktionalitet.
- Ur djurparkens direktörs perspektiv ser allt ut som följande:
Kraftig ökning av kostnaderna för licenser och support frÄn databashanteringssystemets tillverkare.
- Ăkad kostnad för licenser och stöd frĂ„n databashanterarens tillverkare.
- Expansion of staff and increased timelines.
- Direct financial losses or penalties due to data inconsistency.
There is a significant increase in the total cost of ownership of the system (TCO). Is there any way out of the 'multi-model storage' situation?
Multimodellighet
The term 'multi-model storage' came into use in 2011. It took several years to recognize the problems with the approach and find a solution, and by 2015 analysts at Gartner formulated the answer:
- From '»:
The future of DBMS, their architectures, and usage methods â multi-modality.
- From '»:
Leading operational DBMS will offer several models â relational and non-relational â as part of a single platform.
It seems that this time the analysts at Gartner were not mistaken in their forecast. If you go to the page with the of DBMS on DB-Engines, you can see that thebÀsta resultatet (subjektiv Äsikt).majority of its leaders position themselves specifically as multi-model DBMS. The same can be seen on the page with any specific rating.
The table below lists DBMS leaders in each specific rating that claim their multi-modality. For each DBMS, the originally supported model (once the only one) is indicated along with the models currently supported. There are also DBMS that position themselves as 'originally multi-model', stating that they have no initial inherited model according to their creators.
| DBMS | Original Model | Additional Models |
|---|---|---|
| Oracle | Relational | Graph, Document |
| MS SQL | Relational | Graph, Document |
| PostgreSQL | Relational | Graph*, Document |
| MarkLogic | Document | Graph, Relational |
| MongoDB | Document | Key-Value, Graph* |
| DataStax | Wide-Column | Document, Graph |
| Redis | Key-Value | Document, Graph* |
| ArangoDB | â | Graph, Document |
| OrientDB | â | Graph, Document, Relational |
| Azure CosmosDB | â | Graph, Document, Relational |
Notes to the table
Stars in the table denote statements that require clarification:
- The PostgreSQL DBMS does not support graph data model, however, a product , such as AgensGraph, does support it.
- In relation to MongoDB, it is more accurate to speak of the presence of graph operators in the query language (, ), rather than support for the graph model, although, of course, their introduction required certain optimizations at the physical storage level in the direction of supporting the graph model.
- BetrÀffande Redis syftar detta pÄ en utvidgning .
För varje av klasserna kommer vi att visa hur stöd för flera modeller implementeras i databashanteringssystem (DBMS) av denna klass. Vi kommer att anse att de mest betydelsefulla modellerna Àr relations-, dokument- och grafmodeller, och vi kommer att visa genom exempel frÄn specifika DBMS hur "de saknade" implementeras.
Multimodella databashanteringssystem baserade pÄ relationsmodellen
De ledande DBMS i dag Àr för nÀrvarande relationsdatabaser, Gartner-prognosen skulle inte fÄ anses ha infriats om relationsdatabaserna inte visade tecken pÄ rörelse mot multimodularitet. Och de visar det. Nu kan tankar om att multimodala DBMS Àr som en schweizisk armékniv, dÀr inget kan göras bra, riktas direkt mot Larry Ellison.
Författaren föredrar emellertid implementeringen av multimodularitet i Microsoft SQL Server, pÄ vilket exempel stöd för dokument- och grafmodellerna i relationsdatabaserna kommer att beskrivas.
Dokumentmodellen i MS SQL Server
Om hur dokumentmodellsstödet Àr implementerat i MS SQL Server har det redan funnits tvÄ utmÀrkta artiklar pÄ Habré, jag ska nöja mig med en kort sammanfattning och kommentar:
Stödet för dokumentmodellen i MS SQL Server Àr ganska typiskt för relationsdatabaser: JSON-dokument föreslÄs lagras i vanliga textfÀlt. Stödet för dokumentmodellen bestÄr av att tillhandahÄlla speciella operatorer för att analysera dessa JSON:
- för att extrahera skalÀra vÀrden av attribut,
- för att extrahera underdokument.
Det andra argumentet för bÄda operatorerna Àr ett uttryck i JSONPath-liknande syntax.
Kopplat kan man sÀga att dokument som lagras pÄ detta sÀtt inte Àr "första klassens entiteter" i en relationsdatabas, i motsats till tupler. Specifikt finns det i nulÀget inga index över fÀlten i JSON-dokument i MS SQL Server, vilket gör operationer för att förena tabeller baserat pÄ vÀrden i dessa fÀlt och Àven urval av dokument baserat pÄ dessa vÀrden problematiska. Det Àr dock möjligt att skapa en berÀknad kolumn baserat pÄ ett sÄdant fÀlt och ett index för det.
Dessutom erbjuder MS SQL Server möjligheten att enkelt konstruera ett JSON-dokument frĂ„n innehĂ„llet i tabellerna med hjĂ€lp av operatorn â möjlighet, pĂ„ ett sĂ€tt motsatt den tidigare, vanliga lagringen. Det Ă€r klart att hur snabb RDBMS Ă€n mĂ„ vara, sĂ„ strider ett sĂ„dant tillvĂ€gagĂ„ngssĂ€tt mot ideologin hos dokumentdatabaser, som i princip lagrar fĂ€rdiga svar pĂ„ populĂ€ra frĂ„gor, och kan endast lösa problem med utvecklingsvĂ€nlighet, men inte hastighet.
Slutligen tillÄter MS SQL Server att lösa uppgiften som Àr motsatt dokumentkonstruktion: man kan bryta ner JSON i tabeller med hjÀlp av . Om dokumentet inte Àr helt platt, kommer det att krÀva anvÀndning av CROSS APPLY.
Grafmodellen i MS SQL Server
Stödet för grafmodellen (LPG) realiseras i Microsoft SQL Server ocksÄ ganska : det föreslÄs att anvÀnda speciella tabeller för att lagra noder och för att lagra grafens kanter. SÄdana tabeller skapas med hjÀlp av uttryck CREATE TABLE AS NODE och CREATE TABLE AS EDGE respektive.
Tabeller av den första typen liknar vanliga tabeller för att lagra poster med den enda yttre skillnaden att tabellen innehĂ„ller ett systemfĂ€lt $node_id â en unik identifierare för grafens nod inom databasen.
PÄ liknande sÀtt har tabeller av den andra typen systemfÀlt $from_id och $to_id, poster i sÄdana tabeller anger dÀrmed pÄ ett förstÄeligt sÀtt relationer mellan noder. För att lagra relationer av varje typ anvÀnds en separat tabell.
LÄt oss illustrera det sagda med ett exempel. Anta att grafdata har en struktur som i den angivna bilden. DÄ för att skapa den motsvarande strukturen i databasen mÄste följande DDL-frÄgor utföras:
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 speciella funktionen hos sÄdana tabeller Àr att grafmönster med Cypher-liknande syntax kan anvÀndas i förfrÄgningar mot dem (dock stöds "*" och sÄ vidare fortfarande inte). UtifrÄn prestandamÀtningar kan man ocksÄ anta att sÀttet att lagra data i dessa tabeller skiljer sig frÄn mekanismen för datalagring 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 arbeta med sÄdana tabeller utan att anvÀnda dessa grafmönster, eftersom vanliga SQL-frÄgor för att lösa liknande uppgifter krÀver ytterligare anstrÀngningar för att fÄ systemade "graf"-identifierare för noderna ($node_id, $from_id, $to_id; av samma anledning finns det inga indatafrÄgor hÀr, dÄ de skulle vara för omstÀndliga).
Sammanfattande angÄende beskrivningen av implementeringen av dokument- och grafmodeller i MS SQL Server, skulle jag vilja pÄpeka att sÄdana implementeringar av en modell ovanpÄ en annan inte verkar lyckade frÀmst ur sprÄklig design. Det krÀvs att ett sprÄk expanderar ett annat, sprÄken Àr inte riktigt "ortogonala", sammansÀttningsreglerna kan vara ganska mÀrkliga.
Multimodella databashanteringssystem baserade pÄ dokumentmodellen
I detta avsnitt vill jag illustrera implementeringen av multimodularitet i dokumentdatabaser med ett exempel pÄ en av de mindre populÀra av dem, MongoDB (som nÀmnts, har den endast villkorligt grafiska operatörer $lookup och $graphLookup, som inte fungerar med sharderade kollektioner), utan med ett exempel pÄ en mer mogen och "enterprise"-databas, .
LÄt oss sÀga att kollektionen innehÄller en uppsÀttning XML-dokument av följande slag (MarkLogic tillÄter ocksÄ lagring av JSON-dokument):
John
SmithRelationsmodellen i MarkLogic
Ett relationsmÀssigt representativ av dokumentkollektionen kan skapas med hjÀlp av (innehÄllet i elementen value i exemplet nedan kan vara valfri XPath):
/Person
Person
SSN
@SSN
string
name
name
surname
surnameDet skapade representationen kan adresseras av en SQL-frÄga (till exempel via ODBC):
SELECT name, surname FROM Person WHERE name="John"TyvÀrr Àr den relationsmÀssiga representationen som skapats med hjÀlp av avbildningsmallen endast skrivskyddad. NÀr en förfrÄgan bearbetas försöker MarkLogic att anvÀnda . Tidigare fanns det och begrÀnsade relationsrepresentationer i MarkLogic som helt baserades pÄ index, och tillgÀngliga för inspelning, men de betraktas nu som deprecated.
Grafmodellen i MarkLogic
Med stöd för grafmodellen (RDF) fungerar det ungefÀr pÄ samma sÀtt. à terigen kan man med hjÀlp av skapa en RDF-representation av dokumentkollektionen frÄn exemplet ovan:
/Person
PREFIX
"http://example.org/example#"
sem:iri( $PREFIX || @SSN )
sem:iri( $PREFIX || surname )
sem:iri( $PREFIX || @SSN )
sem:iri( $PREFIX || name )
En SPARQL-frÄga kan adresseras till den resulterande RDF-grafen:
PREFIX :
SELECT ?name ?surname {
:631803299804 :name ?name ; :surname ?surname .
}Till skillnad frÄn relationsmodellen stödjer MarkLogic grafmodellen pÄ ytterligare tvÄ sÀtt:
- DBMS kan vara ett fullstÀndigt separat lagringssystem för RDF-data (tripplar i det kommer att kallas i motsats till de som beskrivits ovan ).
- RDF i en speciell serialisering kan helt enkelt infogas i XML- eller JSON-dokument (och tripplarna kommer dÄ att kallas ). Troligtvis Àr detta ett alternativ till mekanismerna
idrefoch sÄ vidare.
En bra bild av hur "det verkligen" fungerar i MarkLogic ges av , i den meningen Ă€r det lĂ„g nivĂ„, Ă€ven om syftet snarare Ă€r det motsatta â att försöka abstrahera frĂ„n den anvĂ€nda datamodellen, sĂ€kerstĂ€lla en konsekvent hantering av data i olika modeller, transaktionsprocesser och sĂ„ vidare.
Multimodella databashanteringssystem "utan en huvudmodell"
Det finns ocksÄ DBMS pÄ marknaden som positionerar sig som ursprungligen multimodala, utan nÄgon Àrvd grundmodell. NÄgra av dem inkluderar , (frÄn och med 2018 Àgs av SAP) och (tjÀnst inom Microsoft Azures molnplattform).
I sjÀlva verket finns det "grundlÀggande" modeller i ArangoDB och OrientDB. I bÄda fallen Àr det egna datamodeller som Àr generaliseringar av dokumentmodellen. Generaliseringarna handlar frÀmst om att underlÀtta möjligheten att göra graf- och relationsfrÄgor.
Dessa modeller Ă€r de enda som Ă€r tillgĂ€ngliga för anvĂ€ndning i de angivna DBMS, och det finns specifika frĂ„gesprĂ„k avsedda för att arbeta med dem. SjĂ€lvklart Ă€r sĂ„dana modeller och DBMS lovande, men avsaknaden av kompatibilitet med standardmodeller och sprĂ„k gör det omöjligt att anvĂ€nda dessa DBMS i Ă€rvda system â att ersĂ€tta dem med redan anvĂ€nda DBMS dĂ€r.
Om ArangoDB och OrientDB har det redan skrivits en fantastisk artikel pÄ Habr: .
ArangoDB
ArangoDB deklarerar stöd för grafdata modellen.
Grafens noder i ArangoDB Àr vanliga dokument, medan kanterna Àr dokument av en speciell typ, som har vanliga systemfÀlt som (_key, _id, _rev) systemfÀlt _from och _to. Dokument i dokumentbaserade DBMS grupperas traditionellt i samlingar. Samlingar av dokument som representerar kanter i ArangoDB kallas edge-samlingar. För att nÀmna nÄgot, Àr dokument i edge-samlingar ocksÄ dokument, sÄ kanter i ArangoDB kan ocksÄ fungera som noder.
Ursprungliga data
LÄt oss ha en samling persons, vars dokument ser ut sÄ hÀr:
[
{
"_id" : "people/alice" ,
"_key" : "alice" ,
"name" : "Alice"
},
{
"_id" : "people/bob" ,
"_key" : "bob" ,
"name" : "Bob"
}
]LÄt oss ocksÄ ha en samling cafes:
[
{
"_id" : "cafes/jd" ,
"_key" : "jd" ,
"name" : "John Donne"
},
{
"_id" : "cafes/jj" ,
"_key" : "jj" ,
"name" : "Jean-Jacques"
}
]DÄ kan samlingen likes 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
FrÄgan i grafstil pÄ det sprÄk som anvÀnds i ArangoDB, som returnerar information om vilket café varje person gillar i ett lÀsbart format, ser ut sÄ hÀr:
FOR p IN persons
FOR c IN OUTBOUND p likes
RETURN { person : p.name , likes : c.name }I relationell stil, nÀr vi snarare "berÀknar" relationer Àn lagrar dem, kan denna frÄga skrivas om sÄ hÀr (för att nÀmna, skulle det kunna göras utan samlingen likes man skulle kunna 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" : "Alice" , likes : "Jean-Jacques" } ,
{ "person" : "Alice" , likes : "John Donne" } ,
{ "person" : "Bob" , likes : "John Donne" }
]Fler frÄgor och resultat
Om det verkar som att resultatformatet ovan Àr mer karaktÀristiskt för en relationsdatabas Àn för en dokumentdatabas, kan du prova en sÄdan frÄga (eller du kan 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" : "Alice" , likes : ["Jean-Jacques" , "John Donne"] } ,
{ "person" : "Bob" , likes : ["John Donne"] }
]OrientDB
Grunden för implementeringen av en grafmodell ovanpÄ dokumentmodellen i OrientDB ligger i dokumentfÀlten kan ha, förutom mer eller mindre standardiserade skalÀra vÀrden, Àven vÀrden av typer som LINK, LINKLIST, LINKSET, LINKMAP och LINKBAG. VÀrden av dessa typer Àr referenser eller samlingar av referenser till dokument.
Den systemgenererade dokumentidentifieraren har en "fysisk betydelse", som anger positionen för posten i databasen och ser ungefÀr ut sÄ hÀr: @rid : #3:16. PÄ sÄ sÀtt Àr vÀrdena för referensens egenskaper faktiskt mer som pekare (som i grafmodellen) snarare Àn urvalsvillkor (som i relationsmodellen).
Som i ArangoDB representeras kanterna i OrientDB som separata dokument (Àven om en kant utan egna egenskaper kan göras , och det kommer inte att finnas nÄgot separat dokument för den).
Ursprungliga data
I ett format som ligger nÀra för OrientDB skulle data frÄn det tidigare exemplet för ArangoDB se ut ungefÀr sÄ hÀr:
[
{
"@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"
}
]Som vi ser, lagrar Àven noderna information om inkommande och utgÄende kanter. Vid Document API för referensintegritet mÄste man följa sjÀlv, medan Graph API tar hand om det arbetet. Men lÄt oss se hur förfrÄgningar till OrientDB ser ut pÄ "rena", icke-integrerade frÄgesprÄk.
FrÄgor och resultat
FörfrÄgan, som Àr analog med exemplet för ArangoDB, ser ut sÄ hÀr i OrientDB:
SELECT name AS person_name, OUT('likes').name AS cafe_name
FROM Person
UNWIND cafe_nameResultatet kommer att erhÄllas i följande format:
[
{ "person_name": "Alice", "cafe_name": "John Donne" },
{ "person_name": "Alice", "cafe_name": "Jean-Jacques" },
{ "person_name": "Bob", "cafe_name": "Jean-Jacques" }
]Om resultatformatet Äterigen verkar alltför "relationsbaserat", bör man ta bort raden med :
[
{ "person_name": "Alice", "cafe_name": [ "John Donne", "Jean-Jacques" ] },
{ "person_name": "Bob", "cafe_name": [ "Jean-Jacques" ] }
]FrÄgesprÄket för OrientDB kan karaktÀriseras som SQL med Gremlin-liknande inslag. I version 2.2 introducerades en Cypher-liknande frÄgeform. :
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 den tidigare frÄgan. TÀnk pÄ vad som behöver tas bort för att göra det mer "relationsbaserat", som i den allra första frÄgan.
Azure CosmosDB
I mindre grad gÀller det som ovan om ArangoDB och OrientDB Azure CosmosDB. CosmosDB erbjuder följande API:er för datatillgÄng: SQL, MongoDB, Gremlin och Cassandra.
SQL API och MongoDB API anvÀnds för att fÄ tillgÄng till data i dokumentmodellen. Gremlin API och Cassandra API Àr för att fÄ tillgÄng till data i graf- respektive kolonnmodellen. Data i alla modeller lagras i formatet för den interna modellen CosmosDB: ("atom-record-sequence"), som ocksÄ Àr nÀra dokumentmodellen.

Men den datamodell som anvÀndaren vÀljer och det anvÀndargrÀnssnitt som anvÀnds faststÀlls vid skapandet av kontot för tjÀnsten. Det gÄr inte att fÄ tillgÄng till data som laddades upp i en modell i formatet för en annan modell, vilket skulle illustreras av en bild ungefÀr som denna:

PÄ sÄ sÀtt Àr multimodellfunktionsförmÄgan i Azure CosmosDB för nÀrvarande endast en möjlighet att anvÀnda flera databaser som stödjer olika modeller, frÄn en och samma leverantör, vilket inte löser alla problem med varierande lagring.
Multimodella databashanteringssystem baserade pÄ grafmodellen?
Det Àr anmÀrkningsvÀrt att det Àn sÄ lÀnge inte finns nÄgra multimodell-Databashanterare pÄ marknaden som har grafmodellen som grund (om man inte rÀknar multimodell som stöd för tvÄ grafmodeller samtidigt: RDF och LPG; se mer om detta i ). De största svÄrigheterna uppstÄr vid implementeringen av den dokumentÀra modellen ovanpÄ en grafmodell snarare Àn en relationsmodell.
FrÄgan om hur man implementerar en relationsmodell ovanpÄ en grafmodell har diskuterats sedan relationsmodellens tidiga dagar. Som , sa :
Det finns inget inneboende i grafmetoden som hindrar skapandet av ett lager (t.ex. genom lÀmplig indexering) pÄ en grafdatabas som möjliggör en relationell vy med (1) ÄterhÀmtning av tupler frÄn de vanliga nyckel-vÀrde-paren och (2) gruppering av tupler efter relationstyp.
Vid implementeringen av den dokumentÀra modellen ovanpÄ grafen mÄste man ha i Ätanke, till exempel, följande:
- JSON-arrayelement anses vara ordnade, vilket inte Àr fallet för topparna pÄ grafens kanter;
- Data i den dokumentÀra modellen Àr vanligtvis denormaliserade; man vill trots allt inte lagra flera kopior av samma inbÀddade dokument, och underdokumenten har vanligtvis inga identifierare;
- à andra sidan handlar ideologin för dokumentdatabaser om att dokumenten Àr fÀrdiga "aggregat" som inte behöver byggas om frÄn grunden varje gÄng. Det krÀvs en möjlighet i grafmodellen att snabbt fÄ fram en undergraf som motsvarar det fÀrdiga dokumentet.
Lite reklam
Författaren av artikeln Ă€r involverad i utvecklingen av databasen NitrosBase, vars interna modell Ă€r grafisk och externa modeller â relations- och dokumentmodeller â Ă€r dess representationer. Alla modeller Ă€r likvĂ€rdiga: praktiskt taget alla data Ă€r tillgĂ€ngliga i vilken som helst av dem med hjĂ€lp av dess naturliga frĂ„gesprĂ„k. Dessutom kan data Ă€ndras i vilken som helst av representationerna. Ăndringar Ă„terspeglas i den interna modellen och dĂ€rmed i de andra representationerna.
Hur överensstĂ€mmelsen mellan modellerna i NitrosBase ser ut â hoppas jag kunna beskriva i en av de kommande artiklarna.
Slutsats
Jag hoppas att de allmÀnna konturerna av det som kallas multimodularitet har blivit nÄgot klarare för lÀsaren. Multimodularitet kallas för olika databaser, och "stödet för flera modeller" kan se olika ut. För att förstÄ vad som menas med "multimodularitet" i varje enskilt fall Àr det vÀrdefullt att svara pÄ följande frÄgor:
- Handlar det om stöd för traditionella modeller eller för en viss "hybrid"-modell?
- "Ăr modellerna likvĂ€rdiga, eller Ă€r en av dem understĂ€lld de andra?
- Ăr modellerna "likgiltiga" inför varandra? Kan data som skrivits in i en modell lĂ€sas av en annan eller till och med skrivas över?
Jag tror att vi nu kan ge ett positivt svar pÄ frÄgan om relevansen av multimodella DBMS, men det Àr intressant att frÄga sig vilka specifika typer som kommer att vara mest efterfrÄgade under den nÀrmaste tiden. Det verkar som att multimodella DBMS som stöder traditionella modeller, framför allt relationsmodeller, kommer att vara mer efterfrÄgade; populariteten hos multimodella DBMS som erbjuder nya modeller, som kombinerar fördelarna med olika traditionella, Àr en frÄga för mer avlÀgset framtid.
Endast registrerade anvÀndare kan delta i omröstningen. , tack.
AnvÀnder ni multimodella DBMS?
Vi anvÀnder inte det, vi lagrar all data i en och samma DBMS och modell
Vi anvÀnder de multimodala möjligheterna hos traditionella DBMS
Vi praktiserar polyglot persistence
Vi anvÀnder nya multimodella DBMS (Arango, Orient, CosmosDB)
19 anvÀndare röstade. 4 anvÀndare avstod.
KĂ€lla: habr.com
