Multimodala databaser - grunden för moderna informationssystem?

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.

Multimodala databaser - grunden för moderna informationssystem?


InnehÄll

Polyglot persistence
Multimodellighet
Multimodella databashanteringssystem baserade pÄ relationsmodellen
     Dokumentmodellen i MS SQL Server
     Grafmodellen i MS SQL Server
Multimodella databashanteringssystem baserade pÄ dokumentmodellen
     Relationsmodellen i MarkLogic
     Grafmodellen i MarkLogic
Multimodella databashanteringssystem "utan en huvudmodell"
     ArangoDB
     OrientDB
     Azure CosmosDB
Multimodella databashanteringssystem baserade pÄ grafmodellen?
Slutsats
EnkÀt

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, författare ett antal kÀnda böcker och en av medförfattarna 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,

Multimodala databaser - grunden för moderna informationssystem?

Det Àr uppenbart att det inte Àr lÀtt att vara en förvaltare i en sÄdan djurpark. hÀr.

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:

It seems that this time the analysts at Gartner were not mistaken in their forecast. If you go to the page with the main rating 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.

DBMSOriginal ModelAdditional Models
OracleRelationalGraph, Document
MS SQLRelationalGraph, Document
PostgreSQLRelationalGraph*, Document
MarkLogicDocumentGraph, Relational
MongoDBDocumentKey-Value, Graph*
DataStaxWide-ColumnDocument, Graph
RedisKey-ValueDocument, 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 based on it, 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 ($lookup, $graphLookup), 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 RedisGraph.

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:

  • JSON_VALUE för att extrahera skalĂ€ra vĂ€rden av attribut,
  • JSON_QUERY 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 FOR JSON PATH — 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 OPENJSON. 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 förutsÀgbart: 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.

Multimodala databaser - grunden för moderna informationssystem? 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, MarkLogic.

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
  Smith

Relationsmodellen i MarkLogic

Ett relationsmÀssigt representativ av dokumentkollektionen kan skapas med hjÀlp av en avbildningsmall (innehÄllet i elementen value i exemplet nedan kan vara valfri XPath):

/Person
  
    
      Person
      
        
          SSN
          @SSN
          string
        
        
          name
          name
        
        
          surname
          surname

Det 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 dokumentindex. Tidigare fanns det och begrÀnsade relationsrepresentationer i MarkLogic som helt baserades pÄ index, och var skrivbara, men nu anses de vara förÄldrade. 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 en avbildningsmall skapa en RDF-representation av dokumentkollektionen frĂ„n exemplet ovan:

/Person
    
      
        PREFIX
        "http://example.org/example#"
      
    
  
    
      sem:iri( $PREFIX || @SSN )
      sem:iri( $PREFIX || surname )
      xs:string( surname )
    
    
      sem:iri( $PREFIX || @SSN )
      sem:iri( $PREFIX || name )
      xs:string( name )

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:

  1. DBMS kan vara ett fullstÀndigt separat lagringssystem för RDF-data (tripplar i det kommer att kallas managed i motsats till de som beskrivits ovan extracted).
  2. RDF i en speciell serialisering kan helt enkelt infogas i XML- eller JSON-dokument (och tripplarna kommer dÄ att kallas unmanaged). Troligtvis Àr detta ett alternativ till mekanismerna idref och sÄ vidare.

En bra bild av hur "det verkligen" fungerar i MarkLogic ges av Optic API, 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 ArangoDB, OrientDB (frÄn och med 2018 Àgs av SAP) och CosmosDB (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: JOIN i NoSQL-databaser.

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 COLLECT):

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 att 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 systemidentifierare 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 lÀttviktig, och det kommer inte att finnas nÄgot separat dokument för den).

Ursprungliga data

I ett format som ligger nÀra dumpformatet 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 anvÀndning 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_name

Resultatet 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 UNWIND():

[
  { "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 :

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

Resultatformatet 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: ARS ("atom-record-sequence"), som ocksÄ Àr nÀra dokumentmodellen.

Multimodala databaser - grunden för moderna informationssystem?

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:

Multimodala databaser - grunden för moderna informationssystem?

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 tidigare publicering). 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 till exempel, sa David McGovern:

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:

  1. Handlar det om stöd för traditionella modeller eller för en viss "hybrid"-modell?
  2. "Är modellerna likvĂ€rdiga, eller Ă€r en av dem understĂ€lld de andra?
  3. Ä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. Logga in, 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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster