I sistemi di gestione multi-modali sono la base dei moderni sistemi informativi?

I sistemi informatici moderni sono piuttosto complessi. Non è solo la loro complessità a derivare dai dati che elaborano. La complessità dei dati può spesso risiedere nella varietà dei modelli di dati utilizzati. Ad esempio, quando i dati diventano "grandi", una delle caratteristiche che possono risultare scomode è non solo il loro volume, ma anche la loro varietà.

Se non trovi ancora difetti nei ragionamenti, continua a leggere.

I sistemi di gestione multi-modali sono la base dei moderni sistemi informativi?


Contenuto

Persistenza poliglotta
Multimodalità
DBMS multimodali basati su modello relazionale
     Modello documentale in MS SQL Server
     Modello grafico in MS SQL Server
DBMS multimodali basati su modello documentale
     Modello relazionale in MarkLogic
     Modello grafico in MarkLogic
DBMS multimodali "senza modello principale"
     ArangoDB
     OrientDB
     Azure CosmosDB
DBMS multimodali basati su modello grafico?
Conclusione
Survey

Persistenza poliglotta

Quanto detto sopra porta al fatto che, a volte, all'interno di un singolo sistema è necessario utilizzare più DBMS diversi per la memorizzazione dei dati e per affrontare diverse esigenze di elaborazione, ognuno dei quali supporta il proprio modello di dati. Su iniziativa di M. Fowler, autore una serie di libri noti e uno dei coautori Manifesto Agile, tale situazione è stata chiamata archiviazione multivariata ('polyglot persistence').

A Fowler appartiene anche il seguente esempio di organizzazione dell'archiviazione dei dati in un'applicazione completamente funzionale e ad alta capacità nel settore dell'e-commerce.

I sistemi di gestione multi-modali sono la base dei moderni sistemi informativi?

Questo esempio, ovviamente, è un po' esagerato, ma si possono trovare alcune considerazioni a favore della scelta di un determinato DBMS per uno scopo specifico, ad esempio, qui.

È chiaro che essere il custode di uno zoo del genere non è facile.

  • La quantità di codice che esegue la conservazione dei dati cresce proporzionalmente al numero di DBMS utilizzati; la quantità di codice che sincronizza i dati aumenta, bene che non sia proporzionale al quadrato di quel numero.
  • I costi per garantire le caratteristiche enterprise (scalabilità, resilienza, alta disponibilità) di ciascun DBMS utilizzato aumentano in modo esponenziale.
  • È impossibile garantire le caratteristiche enterprise della sottosistema di archiviazione nel suo complesso, specialmente la transazionalità.

Dal punto di vista del direttore dello zoo, tutto appare così:

  • Aumento significativo dei costi delle licenze e del supporto tecnico da parte del produttore del DBMS.
  • Espansione del personale e allungamento dei tempi.
  • Perdite finanziarie dirette o sanzioni a causa di incoerenze nei dati.

C'è un notevole aumento del costo totale di possesso del sistema (TCO). C'è una via d'uscita dalla situazione del "storage multivariato"?

Multimodalità

Il termine "storage multivariato" è entrato in uso nel 2011. La consapevolezza dei problemi dell'approccio e la ricerca di soluzioni hanno richiesto diversi anni, e nel 2015 gli analisti di Gartner hanno formulato la risposta:

Sembra che per questa volta gli analisti di Gartner non si siano sbagliati. Se si visita la pagina con il punteggio principale dei DBMS su DB-Engines, si può vedere che launmaggior parte dei leader si posiziona proprio come DBMS multimodale. Lo stesso si può osservare anche nella pagina di qualsiasi classifica specifica.

Nella tabella sottostante sono elencati i DBMS leader in ciascuna delle classifiche private, che dichiarano la loro multimodalità. Per ogni DBMS sono indicate la modellistica iniziale supportata (un tempo l'unica) e, accanto ad essa, i modelli attualmente supportati. Sono inclusi anche i DBMS che si posizionano come "originariamente multimodali", senza alcun modello ereditato iniziale secondo le dichiarazioni dei loro creatori.

DBMSModello inizialeModelli aggiuntivi
OracleRelazionaleGrafico, documentale
MS SQLRelazionaleGrafico, documentale
PostgreSQLRelazionaleGrafico*, documentale
MarkLogicDocumentaleGrafico, relazionale
MongoDBDocumentaleChiave-valore, grafico*
DataStaxWide-columnDocumentale, grafico
RedisChiave-valoreDocumentale, grafico*
ArangoDBGrafico, documentale
OrientDBGrafico, documentale, relazionale
Azure CosmosDBGrafico, documentale, relazionale

Note alla tabella

Le affermazioni contrassegnate con asterisco richiedono delle precisazioni:

  • Il DBMS PostgreSQL non supporta il modello di dati grafico, ma è supportato da un prodotto basato su di esso, come ad esempio AgensGraph.
  • In relazione a MongoDB, è più corretto parlare di operatori grafici nel linguaggio di query ($lookup, $graphLookup), e riguardo al supporto del modello grafico, sebbene, ovviamente, la loro introduzione abbia richiesto alcune ottimizzazioni a livello di memorizzazione fisica per supportare il modello grafico.
  • In riferimento a Redis si intende l'estensione RedisGraph.

Successivamente, per ciascuna delle classi mostreremo come viene implementato il supporto per più modelli nei DBMS di questa classe. Considereremo i modelli relazionale, documentale e grafico come i più importanti e mostreremo, attraverso esempi di specifici DBMS, come vengano implementati quelli "mancanti".

DBMS multimodali basati su modello relazionale

I principali DBMS attualmente sono relazionali, non si potrebbe considerare la previsione di Gartner avverata se i DBMS relazionali non dimostrassero progressi verso la multimodalità. E lo stanno dimostrando. Ora le considerazioni secondo cui un DBMS multimodale è simile a un coltellino svizzero, con cui non si può fare nulla di buono, possono essere subito dirette a Larry Ellison.

Tuttavia, all'autore piace di più l'implementazione della multimodalità in Microsoft SQL Server, il cui esempio descriverà il supporto dei DBMS relazionali per i modelli documentale e grafico.

Modello documentale in MS SQL Server

Come viene implementato il supporto per il modello documentale in MS SQL Server, ci sono già due ottimi articoli su Habr, quindi mi limiterò a un breve riassunto e commento:

Il modo in cui MS SQL Server supporta il modello documentale è piuttosto tipico per i database relazionali: i documenti JSON vengono proposti per essere memorizzati in normali campi di testo. Il supporto per il modello documentale consiste nella fornitura di operatori speciali per l'analisi di questo JSON:

Il secondo argomento di entrambi gli operatori è un'espressione in una sintassi simile a JSONPath.

In astratto, si può dire che i documenti memorizzati in questo modo non sono ‘entità di prima classe’ in un database relazionale, a differenza delle tuple. In particolare, in MS SQL Server attualmente non ci sono indici sui campi dei documenti JSON, il che rende difficoltose le operazioni di join delle tabelle basate sui valori di questi campi e persino l'estrazione dei documenti in base a questi valori. Tuttavia, è possibile creare una colonna calcolata su tale campo e un indice su di essa.

In aggiunta, MS SQL Server offre la possibilità di costruire comodamente un documento JSON dal contenuto delle tabelle utilizzando l'operatore FOR JSON PATH — una possibilità, in un certo senso opposta allo stoccaggio tradizionale. È chiaro che, per quanto possa essere veloce un DBMS, questo approccio contraddice l'ideologia dei DBMS documentali, che in sostanza memorizzano risposte pronte per richieste comuni, e può affrontare solo problemi di comodità nello sviluppo, ma non di prestazioni.

Infine, MS SQL Server consente di affrontare il problema opposto alla costruzione del documento: è possibile suddividere il JSON in tabelle utilizzando OPENJSON. Se il documento non è completamente piatto, sarà necessario utilizzare CROSS APPLY.

Modello grafico in MS SQL Server

Il supporto per il modello grafico (LPG) è implementato in Microsoft SQL Server in modo del tutto previsto: si propone di utilizzare tabelle speciali per memorizzare i nodi e per memorizzare gli archi del grafo. Tali tabelle vengono create utilizzando le espressioni CREATE TABLE AS NODE e CREATE TABLE AS EDGE rispettivamente.

Le tabelle del primo tipo sono simili alle normali tabelle per la memorizzazione di record, con la sola differenza esterna che nella tabella è presente un campo di sistema $node_id — identificatore univoco all'interno del database per il nodo del grafo.

Analogamente, le tabelle di secondo tipo hanno campi di sistema $from_id e $to_id, le righe in tali tabelle definiscono chiaramente le relazioni tra i nodi. Per memorizzare le relazioni di ciascun tipo si utilizza una tabella separata.

I sistemi di gestione multi-modali sono la base dei moderni sistemi informativi? Illustriamo quanto detto con un esempio. Supponiamo che i dati del grafo abbiano uno schema come quello mostrato nell'immagine. Quindi, per creare la struttura corrispondente nel database, è necessario eseguire le seguenti query DDL:

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

La principale specificità di tali tabelle è che nelle query ad esse è possibile utilizzare pattern grafici con una sintassi simile a Cypher (tuttavia, «*» e altre non sono ancora supportati). Sulla base delle misurazioni delle prestazioni, si può anche presumere che il modo in cui i dati sono memorizzati in queste tabelle sia diverso dal meccanismo di memorizzazione dei dati nelle tabelle normali e ottimizzato per l'esecuzione di tali query grafiche.

SELEZIONA Cafe.name
  DA Person, likes, Cafe
  DOVE MATCH (Person-(friendOf)-(likes)->Cafe)
  E Person.name = 'John';

Inoltre, è piuttosto difficile non utilizzare questi schemi grafici quando si lavora con tali tabelle, poiché nelle normali query SQL per risolvere compiti simili sarebbe necessario fare ulteriori sforzi per ottenere identificatori «grafici» sistemici dei nodi ($node_id, $from_id, $to_id; per lo stesso motivo le query per l'inserimento dei dati non sono incluse qui in quanto considerate superflue).

Riassumendo la descrizione delle realizzazioni dei modelli documentali e grafici in MS SQL Server, noterei che tali realizzazioni di un modello sopra l'altro non sembrano riuscite innanzitutto dal punto di vista del design linguistico. È necessario espandere un linguaggio con un altro, i linguaggi non sono del tutto «ortogonali», le regole di combinazione possono essere piuttosto bizzarre.

DBMS multimodali basati su modello documentale

In questa sezione desidero illustrare l'implementazione della multimodalità nei database documentali prendendo come esempio uno dei meno popolari, MongoDB (come detto, in essa ci sono solo operatori graficamente condizionati, $lookup e $graphLookupche non funzionano su collezioni sharded), ma su un sistema di database più maturo e «enterprise». MarkLogic.

Quindi, supponiamo che la collezione contenga un insieme di documenti XML del seguente tipo (MarkLogic consente anche di memorizzare documenti JSON):

John
  Smith

Modello relazionale in MarkLogic

È possibile creare una rappresentazione relazionale della collezione di documenti utilizzando un modello di visualizzazione (il contenuto degli elementi value nell'esempio seguente può contenere un XPath arbitrario):

/Person
  
    
      Person
      
        
          SSN
          @SSN
          string
        
        
          name
          name
        
        
          surname
          surname

È possibile indirizzare una query SQL alla rappresentazione creata (ad esempio, tramite ODBC):

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

Sfortunatamente, la rappresentazione relazionale creata tramite il modello di visualizzazione è accessibile solo in modalità di sola lettura. Quando si elabora una richiesta a essa, MarkLogic cercherà di utilizzare indici di documento. In precedenza, MarkLogic aveva anche rappresentazioni relazionali limitate, basate esclusivamente sugli indici. e disponibili per la registrazione, ma attualmente sono considerati obsoleti.

Modello grafico in MarkLogic

Per quanto riguarda il supporto per il modello grafico (RDF), la situazione è più o meno la stessa. Anche in questo caso, è possibile utilizzare un modello di visualizzazione per creare una rappresentazione RDF della collezione di documenti dell'esempio precedente:

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

Puoi inviare una query SPARQL al grafo RDF ottenuto:

PREFIX : 
SELECT ?name ?surname {
  :631803299804 :name ?name ; :surname ?surname .
}

Diversamente dal modello relazionale, il modello grafico di MarkLogic è supportato anche in due altri modi:

  1. Il DBMS può essere un archivio RDF completamente separato (i tripleti in esso saranno chiamati managed in contrapposizione a quanto descritto sopra extracted).
  2. L'RDF in una serializzazione speciale può essere semplicemente inserito in documenti XML o JSON (e le triplette verranno chiamate non gestiti). Probabilmente è un'alternativa a meccanismi idref e così via.

Una buona rappresentazione di come "in realtà" tutto funzioni in MarkLogic è fornita da Optic API, in questo senso è di basso livello, anche se la sua destinazione è piuttosto opposta: cercare di astrarsi dal modello di dati utilizzato, garantire coerenza nel lavoro con dati in diversi modelli, transazionalità e così via.

DBMS multimodali "senza modello principale"

Sono presenti sul mercato anche DBMS che si propongono come nativamente multimodali, senza alcun modello principale ereditato. Tra questi ci sono ArangoDB, OrientDB (dal 2018, la società di sviluppo appartiene a SAP) e CosmosDB (un servizio all'interno della piattaforma cloud Microsoft Azure).

In effetti, ci sono "modelli principali" in ArangoDB e OrientDB. In entrambi i casi si tratta di modelli di dati proprietari che sono generalizzazioni di quello documentale. Le generalizzazioni si riferiscono principalmente alla semplificazione della possibilità di effettuare query di natura grafica e relazionale.

Questi modelli sono gli unici disponibili per l'uso nei sistemi di gestione dei database specificati, e sono destinati a lavorare con linguaggi di query proprietari. Senza dubbio, questi modelli e i rispettivi database sono promettenti, ma l'assenza di compatibilità con i modelli e i linguaggi standard rende impossibile utilizzare questi database nei sistemi ereditati — per sostituire i database già in uso.

Su ArangoDB e OrientDB c'è già stato un articolo interessante su Habr: JOIN nelle basi di dati NoSQL.

ArangoDB

ArangoDB dichiara di supportare il modello di dati grafico.

I nodi del grafo in ArangoDB sono documenti ordinari, mentre i bordi sono documenti di tipo speciale, aventi insieme ai normali campi di sistema (_key, _id, _rev) campi di sistema _from e _to. I documenti nei database documentali sono tradizionalmente raggruppati in collezioni. Le collezioni di documenti che rappresentano i bordi in ArangoDB sono chiamate collezioni edge. Vale la pena notare che i documenti delle collezioni edge sono anch'essi documenti, quindi i bordi in ArangoDB possono anche fungere da nodi.

Dati di origine

Supponiamo di avere una collezione persons, i cui documenti appaiono così:

[
  {
    "_id"  : "people/alice" ,
    "_key" : "alice" ,
    "name" : "Alice"
  },
  {
    "_id"  : "people/bob" ,
    "_key" : "bob" ,
    "name" : "Bob"  
  }
]

Supponiamo inoltre di avere una collezione caffè:

[
  {
    "_id" : "cafes/jd" ,
    "_key" : "jd" ,
    "name" : "John Donne"  
  },
  {
    "_id" : "cafes/jj" ,
    "_key" : "jj" ,
    "name" : "Jean-Jacques"
  }
]

Quindi la collezione mi piace potrebbe apparire come segue:

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

Query e risultati

Una query in stile grafico nel linguaggio AQL usato in ArangoDB, che restituisce in modo leggibile per le persone le informazioni su chi piace quale caffè, appare così:

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

In stile relazionale, quando piuttosto calcoliamo le relazioni invece di memorizzarle, questa query può essere riscritta così (tra l'altro, senza la collezione mi piace si potrebbe fare a meno):

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 }

Il risultato in entrambi i casi sarà lo stesso:

[
  { "person" : "Alice" , likes : "Jean-Jacques" } ,
  { "person" : "Alice" , likes : "John Donne" } ,
  { "person" : "Bob" , likes : "John Donne" }
]

Altre query e risultati

Se sembra che il formato del risultato sopra sia più caratteristico per un DBMS relazionale piuttosto che per uno documentale, è possibile provare questa query (o utilizzare COLLECT):

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

Il risultato avrà il seguente aspetto:

[
  { "person" : "Alice" , likes : ["Jean-Jacques" , "John Donne"]  } ,
  { "person" : "Bob" , likes : ["John Donne"] }
]

OrientDB

Alla base dell'implementazione del modello grafico sopra il documento in OrientDB c'è possibilità campi dei documenti che hanno valori più o meno standard scalari, ma anche valori di tipi come LINK, LINKLIST, LINKSET, LINKMAP e LINKBAG. I valori di questi tipi sono riferimenti o collezioni di riferimenti a identificatori di sistema documenti.

L'identificatore del documento assegnato dal sistema ha un "senso fisico", indicando la posizione della registrazione nel database, e appare all'incirca così: @rid : #3:16. Pertanto, i valori delle proprietà di riferimento sono davvero piuttosto puntatori (come nel modello grafico), piuttosto che condizioni di selezione (come in quello relazionale).

Come in ArangoDB, in OrientDB gli archi sono rappresentati come documenti separati (anche se se un arco non ha le proprie proprietà, può essere reso leggero., e non sarà necessario un documento separato).

Dati di origine

In un formato simile a quello di dump di OrientDB, i dati del precedente esempio per ArangoDB apparirebbero così:

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

Come possiamo vedere, i vertici conservano anche informazioni sui bordi entranti e uscenti. Durante l'uso L'API Document per la coerenza dei riferimenti richiede di essere monitorata manualmente, mentre l'API Graph si occupa di tutto ciò. Vediamo come si presenta una chiamata a OrientDB in linguaggi di query "puramente" non integrati in linguaggi di programmazione.

Query e risultati

Una query equivalente a quella dell'esempio per ArangoDB in OrientDB appare così:

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

Il risultato sarà restituito nel seguente formato:

[
  { "person_name": "Alice", "cafe_name": "John Donne" },
  { "person_name": "Alice", "cafe_name": "Jean-Jacques" },
  { "person_name": "Bob",  "cafe_name": "Jean-Jacques" }
]

Se il formato del risultato sembra nuovamente eccessivamente "relazionale", è necessario rimuovere la riga con UNWIND():

[
  { "person_name": "Alice", "cafe_name": [ "John Donne", "Jean-Jacques" ] },
  { "person_name": "Bob",  "cafe_name": [ "Jean-Jacques" ] }
]

Il linguaggio delle query di OrientDB può essere caratterizzato come SQL con inserimenti simili a Gremlin. Nella versione 2.2 è stata introdotta una forma di query simile a Cypher, MATCH :

MATCH {CLASS: Person, AS: person}-likes->{CLASS: Cafe, AS: cafe}
RETURN person.name AS person_name, LIST(cafe.name) AS cafe_name
GROUP BY person_name

Il formato del risultato sarà lo stesso della query precedente. Pensate a cosa rimuovere per renderlo più "relazionale", proprio come nella prima query.

Azure CosmosDB

In misura minore, quanto detto sopra su ArangoDB e OrientDB si applica ad Azure CosmosDB. CosmosDB offre i seguenti API per l'accesso ai dati: SQL, MongoDB, Gremlin e Cassandra.

L'API SQL e l'API MongoDB vengono utilizzati per accedere ai dati nel modello documentale. L'API Gremlin e l'API Cassandra servono per accedere ai dati, rispettivamente, nel modello grafico e colonnare. I dati in tutti i modelli vengono mantenuti nel formato del modello interno di CosmosDB: ARS («atom-record-sequence»), che è anche simile a un documento.

I sistemi di gestione multi-modali sono la base dei moderni sistemi informativi?

Tuttavia, il modello di dati scelto dall'utente e l'API utilizzata vengono fissati al momento della creazione dell'account nel servizio. Non è possibile accedere ai dati caricati in un modello in un formato diverso, come sarebbe illustrato da un'immagine simile a questa:

I sistemi di gestione multi-modali sono la base dei moderni sistemi informativi?

Pertanto, la multimodalità in Azure CosmosDB attualmente rappresenta solo la possibilità di utilizzare più database che supportano diversi modelli, tutti dello stesso fornitore, il che non risolve tutte le problematiche dello storage multi-variante.

DBMS multimodali basati su modello grafico?

È interessante notare che attualmente non ci sono database multi-modello sul mercato che si basano su un modello grafico (salvo non considerare la multi-modellità come supporto simultaneo di due modelli grafici: RDF e LPG; vedere a riguardo in pubblicazione precedente). La maggiore difficoltà si presenta nell'implementazione di un modello documentale sopra a un modello grafico, piuttosto che relazionale.

La questione di come implementare un modello relazionale sopra un modello grafico è stata discussa già ai tempi della sua nascita. Come diceva, ad esempio, David McGovern:

Non c'è nulla di intrinseco nell'approccio grafico che impedisca di creare uno strato (ad esempio, tramite indicizzazione appropriata) su un database grafico che consenta una vista relazionale con (1) recupero di tuple dai soliti coppie chiave-valore e (2) raggruppamento di tuple per tipo di relazione.

Quando si implementa un modello documentale sopra a un modello grafico, bisogna tenere a mente, ad esempio, quanto segue:

  • Gli elementi dell'array JSON sono considerati ordinati, quelli provenienti dalla cima dell'arco del grafico no;
  • I dati nel modello documentale sono solitamente denormalizzati; non si desidera veramente memorizzare più copie dello stesso documento annidato e di solito non ci sono identificatori per i sotto-documenti.
  • D'altra parte, l'ideologia dei DBMS documentali sta nel fatto che i documenti sono 'aggregati' pronti che non devono essere ricostruiti ogni volta. È necessario garantire nella modelizzazione grafica la possibilità di ottenere rapidamente un sotto-grafico corrispondente al documento pronto.

Un po' di pubblicità

L'autore dell'articolo è coinvolto nello sviluppo del DBMS NitrosBase, il cui modello interno è grafico, mentre i modelli esterni — relazionale e documentale — ne sono le rappresentazioni. Tutti i modelli sono equivalenti: praticamente qualsiasi dato è accessibile in ciascuno di essi utilizzando il linguaggio di query naturale per ciascun modello. Inoltre, in qualsiasi rappresentazione, i dati possono essere modificati. Le modifiche si rifletteranno nel modello interno e, di conseguenza, nelle altre rappresentazioni.

Come appare la corrispondenza dei modelli in NitrosBase — spero di descriverlo in uno dei prossimi articoli.

Conclusione

Spero che le linee generali di ciò che si chiama multimodalità siano diventate più o meno chiare per il lettore. Si definiscono multimodali diversi sistemi di gestione dei database (SGBD), e il termine 'supporto di più modelli' può assumere forme diverse. Per comprendere cosa si intende per 'multimodalità' in ogni singolo caso, è utile rispondere alle seguenti domande:

  1. Si tratta di supportare modelli tradizionali o di una sorta di modello 'ibrido'?
  2. I modelli sono 'paritari' o uno di essi è subordinato agli altri?
  3. I modelli sono 'indifferenti' tra loro? I dati registrati in un modello possono essere letti in un altro o addirittura sovrascritti?

Credo che sulla rilevanza dei database multimodali si possa ormai dare una risposta positiva, ma resta da capire quali delle loro varianti saranno più richieste nel prossimo futuro. Sembra che i database multimodali che supportano modelli tradizionali, in particolare relazionali, saranno i più richiesti; la popolarità dei database multimodali che offrono nuovi modelli, combinando i vantaggi di vari tradizionali, è una questione di un futuro più lontano.

Solo gli utenti registrati possono partecipare al sondaggio. Accedi, per favore.

Utilizzate database multimodali?

  • Non li utilizziamo, conserviamo tutto in un unico database e in un unico modello.

  • Utilizziamo le funzionalità multimodali dei database tradizionali.

  • Pratichiamo la persistenza poliglota.

  • Utilizziamo nuovi database multimodali (Arango, Orient, CosmosDB).

Hanno votato 19 utenti. 4 utenti si sono astenuti.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster