Moderne Informationssysteme sind ziemlich komplex. Ihre KomplexitĂ€t ist nicht zuletzt durch die Vielfalt der verarbeiteten Daten bedingt. Die KomplexitĂ€t dieser Daten liegt hĂ€ufig in der Vielzahl der verwendeten Datenmodelle. So wird zum Beispiel, wenn Daten âgroĂâ werden, nicht nur ihr Umfang (âvolumeâ) als herausfordernd angesehen, sondern auch ihre Vielfalt (âvarietyâ).
Wenn Sie bisher keinen Fehler in den Ăberlegungen finden, lesen Sie weiter.

Inhalt
    Â
    Â
    Â
    Â
    Â
    Â
    Â
Polyglot Persistence
Das Obige fĂŒhrt dazu, dass in einem einzigen System manchmal mehrere verschiedene DBMS zur Speicherung von Daten und zur Lösung verschiedener Verarbeitungsaufgaben verwendet werden mĂŒssen, von denen jedes sein eigenes Datenmodell unterstĂŒtzt. Auf Anregung von M. Fowler, einer Reihe bekannter BĂŒcher und eines der des Agile Manifesto erhielt diese Situation den Namen polyglot persistence. Fowler wird auch mit folgendem Beispiel fĂŒr die Datenorganisation in einer voll funktionsfĂ€higen und hochbelasteten Anwendung im Bereich E-Commerce zitiert.
Dieses Beispiel ist zwar etwas ĂŒbertrieben, aber einige Ăberlegungen zur Wahl eines bestimmten DBMS fĂŒr einen bestimmten Zweck finden sich, zum Beispiel,

Es ist klar, dass es nicht einfach ist, in einem solchen Zoo zu arbeiten. .
Das Volumen des Codes, der Daten speichert, wÀchst proportional zur Anzahl der verwendeten DBMS; das Volumen des Codes, der Daten synchronisiert, wÀchst im besten Fall nicht proportional zum Quadrat dieser Anzahl.
- Die Kosten fĂŒr die GewĂ€hrleistung von Enterprise-Eigenschaften (Skalierbarkeit, Fehlertoleranz, hohe VerfĂŒgbarkeit) steigen in gleichem MaĂe wie die Anzahl der verwendeten DBMS.
- Es ist unmöglich, die Enterprise-Eigenschaften der Speichersubsysteme insgesamt zu gewĂ€hrleisten â besonders die TransaktionsfĂ€higkeit.
- Aus der Sicht des Zoo-Leiters sieht das so aus:
Das Kostensteigerung bei Lizenzen und technischem Support vom DBMS-Anbieter.
- Ein mehrfacher Anstieg der Lizenzkosten und des technischen Supports durch den DBMS-Hersteller.
- AufblÀhung des Staates und VerlÀngerung der Fristen.
- Direkte finanzielle Verluste oder Strafen aufgrund von Inkonsistenzen bei den Daten.
Es gibt einen signifikanten Anstieg der Gesamtkosten fĂŒr den Betrieb des Systems (TCO). Gibt es einen Ausweg aus der Situation des "multivariaten Speicherns"?
MultimodalitÀt
Der Begriff "multivariates Speichern" wurde 2011 populĂ€r. Das Bewusstsein fĂŒr die Probleme des Ansatzes und die Suche nach Lösungen dauerten mehrere Jahre, und bis 2015 wurde von den Analysten von Gartner die Antwort formuliert:
- Aus "»:
Die Zukunft der DBMS, ihrer Architekturen und Verwendungsweisen â MultimodalitĂ€t.
- Aus "»:
FĂŒhrende operationale DBMS werden mehrere Modelle anbieten â relationale und nicht-relationale â innerhalb einer einzigen Plattform.
Es scheint, dass die Analysten von Gartner diesmal mit ihrer Prognose recht hatten. Wenn man die Seite mit dem der DBMS auf DB-Engines aufruft, kann man sehen, dass dieomeisten ihrer FĂŒhrer sich tatsĂ€chlich als multimodale DBMS positionieren. Das gleiche lĂ€sst sich auch auf der Seite mit einem beliebigen Teilranking beobachten.
In der folgenden Tabelle sind die DBMS aufgefĂŒhrt, die in jedem der Teilrankings fĂŒhrend sind und ihre MultimodalitĂ€t beanspruchen. FĂŒr jedes DBMS sind das ursprĂŒnglich unterstĂŒtzte Modell (welches einmal das einzige war) sowie die Modelle, die jetzt unterstĂŒtzt werden, angegeben. AuĂerdem werden DBMS aufgefĂŒhrt, die sich als "von Anfang an multimodal" positionieren und nach Angaben der Hersteller kein ursprĂŒngliches ererbtes Modell haben.
| Datenbankmanagementsystem | UrsprĂŒngliches Modell | ZusĂ€tzliche Modelle |
|---|---|---|
| Oracle | Relational | Graph, Dokument |
| MS SQL | Relational | Graph, Dokument |
| PostgreSQL | Relational | Graph*, Dokument |
| MarkLogic | Dokument | Graph, relational |
| MongoDB | Dokument | Key-Value, Graph* |
| DataStax | Wide-Column | Dokument, Graph |
| Redis | Key-Value | Dokument, Graph* |
| ArangoDB | â | Graph, Dokument |
| OrientDB | â | Graph, Dokument, relational |
| Azure CosmosDB | â | Graph, Dokument, relational |
Anmerkungen zur Tabelle
Mit Sternchen in der Tabelle gekennzeichnete Aussagen erfordern Vorbehalte:
- DBMS PostgreSQL unterstĂŒtzt kein Graphdatenmodell, jedoch wird es von einem Produkt unterstĂŒtzt, , wie zum Beispiel AgensGraph.
- Hinsichtlich MongoDB ist es richtiger, eher von der VerfĂŒgbarkeit grafischer Operatoren in der Abfragesprache zu sprechen (, ), als von der UnterstĂŒtzung eines Graphmodells, obwohl deren EinfĂŒhrung natĂŒrlich einige Optimierungen auf der Ebene der physischen Speicherung in Richtung UnterstĂŒtzung des Graphmodells erforderte.
- Im Falle von Redis bezieht sich dies auf eine Erweiterung .
FĂŒr jede der Klassen werden wir zeigen, wie die UnterstĂŒtzung mehrerer Modelle in den DBMS dieser Klasse implementiert wird. Die wichtigsten Modelle sind das relationale, dokumentenorientierte und grafenbasierte Modell. Anhand konkreter DBMS-Beispiele werden wir erlĂ€utern, wie die 'fehlenden' Modelle umgesetzt werden.
Multimodale DBMS auf Basis des relationalen Modells
Die fĂŒhrenden DBMS sind derzeit relationale Systeme. Die Prognose von Gartner wĂŒrde sich nicht bewahrheiten, wenn RDBMS nicht in Richtung MultimodalitĂ€t tendieren wĂŒrden. Und genau das tun sie. Die Ăberlegungen, dass multimodale DBMS wie ein Schweizer Taschenmesser sind, mit dem man nichts richtig machen kann, können direkt an Larry Ellison gerichtet werden.
Der Autor bevorzugt jedoch die Umsetzung der MultimodalitĂ€t in Microsoft SQL Server, an dessen Beispiel die UnterstĂŒtzung der dokumentenorientierten und grafischen Modelle beschrieben werden soll.
Dokumentenmodell in MS SQL Server
Ăber die Implementierung der UnterstĂŒtzung des dokumentenorientierten Modells in MS SQL Server gab es bereits zwei ausgezeichnete Artikel auf HabrĂ©. Ich werde mich auf eine kurze Zusammenfassung und Anmerkung beschrĂ€nken:
Die Art und Weise, wie das dokumentenorientierte Modell in MS SQL Server unterstĂŒtzt wird, ist fĂŒr relationale DBMS typisch: JSON-Dokumente sollen in normalen Textfeldern gespeichert werden. Die UnterstĂŒtzung des dokumentenorientierten Modells besteht darin, spezielle Operatoren zur Analyse dieses JSON bereitzustellen:
- um skalare Werte von Attributen zu extrahieren,
- um Unterdokumente zu extrahieren.
Das zweite Argument beider Operatoren ist ein Ausdruck im JSONPath-Ă€hnlichen Syntax.
Abstrakt gesagt kann man sagen, dass Dokumente, die auf diese Weise gespeichert werden, in einem relationalen DBMS keine 'Entities erster Klasse' sind, im Gegensatz zu Tupeln. Konkret fehlen in MS SQL Server momentan Indizes fĂŒr die Felder von JSON-Dokumenten, was die Operationen von TabellenverknĂŒpfungen anhand der Werte dieser Felder und selbst die Abfrage von Dokumenten anhand dieser Werte erschwert. Es ist jedoch möglich, fĂŒr ein solches Feld eine berechnete Spalte und einen Index darauf zu erstellen.
ZusĂ€tzlich bietet MS SQL Server die Möglichkeit, JSON-Dokumente bequem aus den Inhalten von Tabellen mit dem Operator zu konstruieren â die Möglichkeit, in gewissem Sinne das Gegenteil der vorherigen, ĂŒblichen Speicherung. Es ist klar, dass, egal wie schnell ein DBMS ist, ein solcher Ansatz der Ideologie dokumentorientierter DBMS widerspricht, die im Grunde fertige Antworten auf populĂ€re Anfragen speichert, und er kann nur Entwicklungshöflichkeiten lösen, nicht jedoch die Geschwindigkeit.
SchlieĂlich ermöglicht MS SQL Server die Lösung der umgekehrten Aufgabe der Dokumentenkonstruktion: Man kann JSON mithilfe von in Tabellen aufteilen. Wenn das Dokument nicht ganz flach ist, muss man CROSS APPLY.
Graphmodell in MS SQL Server
verwenden. Die UnterstĂŒtzung des graphenorientierten (LPG) Modells ist in Microsoft SQL Server ebenfalls durchaus : Es wird vorgeschlagen, spezielle Tabellen fĂŒr die Speicherung von Knoten und fĂŒr die Speicherung der Kanten des Graphen zu verwenden. Solche Tabellen werden mit Hilfe von AusdrĂŒcken erstellt, CREATE TABLE AS NODE und CREATE TABLE AS EDGE entsprechend.
Tabellen der ersten Art Ă€hneln den gewöhnlichen Tabellen zur Speicherung von DatensĂ€tzen mit dem einzigen Ă€uĂeren Unterschied, dass in der Tabelle ein Systemfeld enthalten ist, $node_id â ein innerhalb der Datenbank eindeutiger Identifikator des Graphenknotens.
Analog dazu enthalten Tabellen der zweiten Art Systemfelder, $from_id und $to_id, wobei die EintrĂ€ge in solchen Tabellen verstĂ€ndlicherweise die Beziehungen zwischen den Knoten definieren. FĂŒr die Speicherung von Beziehungen jeder Art wird eine separate Tabelle verwendet.
Illustrieren wir das Gesagte anhand eines Beispiels. Angenommen, die graphischen Daten haben ein Schema wie in der Abbildung gezeigt. Um die entsprechende Struktur in der Datenbank zu schaffen, mĂŒssen die folgenden DDL-Abfragen ausgefĂŒhrt werden:
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);Die Hauptspezifik dieser Tabellen besteht darin, dass in Anfragen an sie graphenbasierte Muster mit Cypher-Ă€hnlicher Syntax verwendet werden können (ĂŒbrigens werden "*" und Ă€hnliche derzeit noch nicht unterstĂŒtzt). Auf Basis der Leistungskennzahlen lĂ€sst sich auch annehmen, dass die Art der Datenspeicherung in diesen Tabellen sich von dem Mechanismus der Datenspeicherung in herkömmlichen Tabellen unterscheidet und fĂŒr die AusfĂŒhrung solcher graphenbasierten Anfragen optimiert ist.
SELECT Cafe.name
FROM Person, likes, Cafe
WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
AND Person.name = 'John';Zudem ist es ziemlich schwierig, bei der Arbeit mit solchen Tabellen auf diese Graphmuster zu verzichten, da in normalen SQL-Abfragen fĂŒr die Lösung Ă€hnlicher Aufgaben zusĂ€tzliche Anstrengungen unternommen werden mĂŒssen, um die systeminternen "Graph"-Identifikatoren der Knoten zu erhalten ($node_id, $from_id, $to_id; aus diesem Grund sind die Datenbankanfragen zum EinfĂŒgen hier nicht aufgefĂŒhrt, da sie als ĂŒbermĂ€Ăig komplex gelten).
Zusammenfassend möchte ich bei der Beschreibung der Implementierungen des dokumenten- und graphbasierten Modells in MS SQL Server erwĂ€hnen, dass solche Implementierungen eines Modells ĂŒber einem anderen aus sprachgestalterischer Sicht zunĂ€chst unvorteilhaft erscheinen. Es ist erforderlich, eine Sprache mit einer anderen zu erweitern, die Sprachen sind nicht ganz "orthogonal", und die KompatibilitĂ€tsregeln können recht merkwĂŒrdig sein.
Multimodale DBMS auf Basis des Dokumentenmodells
In diesem Abschnitt möchte ich die Umsetzung der MultimodalitÀt in dokumentenbasierten DBMS am Beispiel einer der weniger populÀren Systeme, MongoDB, illustrieren (wie bereits erwÀhnt, hat es nur bedingt graphbasierte Operatoren, $lookup und $graphLookup, die nicht auf sharded Sammlungen funktionieren), sondern anhand eines reiferen und "unternehmensgerechten" DBMS. .
So sei gesagt, dass die Sammlung eine Menge XML-Dokumente des folgenden Typs enthĂ€lt (MarkLogic unterstĂŒtzt auch die Speicherung von JSON-Dokumenten):
John
SmithRelationales Modell in MarkLogic
Ein relationales Modell fĂŒr die Sammlung von Dokumenten kann mit Hilfe eines erzeugt werden (der Inhalt der Elemente value im folgenden Beispiel kann beliebiger XPath sein):
/Person
Person
SSN
@SSN
string
name
name
surname
surnameAuf die erstellte Ansicht kann eine SQL-Anfrage gerichtet werden (zum Beispiel ĂŒber ODBC):
SELECT name, surname FROM Person WHERE name="John"Leider ist die durch das Mapping-Template erstellte relationale Ansicht nur schreibgeschĂŒtzt verfĂŒgbar. Bei der Bearbeitung einer Anfrage an sie wird MarkLogic versuchen, die zu verwenden. Zuvor gab es in MarkLogic auch eingeschrĂ€nkte relationale Ansichten, die vollstĂ€ndig und schreibbar waren, aber heutzutage gelten sie als veraltet.
Graphmodell in MarkLogic
Mit der UnterstĂŒtzung des graphbasierten (RDF) Modells sieht es Ă€hnlich aus. Wiederum kann man mit Hilfe von eine RDF-Darstellung der im obigen Beispiel verwendeten Dokumentensammlung erstellen:
/Person
PREFIX
"http://example.org/example#"
sem:iri( $PREFIX || @SSN )
sem:iri( $PREFIX || surname )
sem:iri( $PREFIX || @SSN )
sem:iri( $PREFIX || name )
An das erhaltene RDF-Diagramm kann eine SPARQL-Abfrage gerichtet werden:
PREFIX :
SELECT ?name ?surname {
:631803299804 :name ?name ; :surname ?surname .
}Im Gegensatz zum relationalen Modell wird das graphbasierte Modell von MarkLogic auf zwei weitere Arten unterstĂŒtzt:
- Das DBMS kann ein vollstĂ€ndiges, separates Repository fĂŒr RDF-Daten sein (die Tripel werden dann als bezeichnet, im Gegensatz zu den oben beschriebenen ).
- RDF kann in einer speziellen Serialisierung einfach in XML- oder JSON-Dokumente eingefĂŒgt werden (und die Tripel werden dann als ). Wahrscheinlich ist dies eine Art Alternative zu den Mechanismen
idref.u. a.
Ein gutes VerstĂ€ndnis dafĂŒr, wie "es tatsĂ€chlich" in MarkLogic funktioniert, vermittelt , in diesem Sinne ist es niedrigschwellig, obwohl sein Zweck eher gegenteilig ist â zu versuchen, sich von dem verwendeten Datenmodell zu abstrahieren, einen konsistenten Umgang mit Daten in verschiedenen Modellen zu gewĂ€hrleisten, TransaktionsfĂ€higkeit usw.
Multimodale DBMS âohne Hauptmodellâ
Auf dem Markt gibt es auch DBMS, die sich ursprĂŒnglich als multimodale Systeme positionieren, ohne dass ein vererbtes Hauptmodell vorhanden ist. Dazu gehören , (seit 2018 gehört das Entwicklerunternehmen zu SAP) und (ein Service innerhalb der Cloud-Plattform Microsoft Azure).
TatsÀchlich gibt es "grundlegende" Modelle in ArangoDB und OrientDB. In beiden FÀllen handelt es sich um eigene Datenmodelle, die eine Verallgemeinerung des Dokumentenmodells darstellen. Die Verallgemeinerungen bestehen hauptsÀchlich darin, die Möglichkeit zu erleichtern, Anfragen graphischer und relationaler Art zu stellen.
Diese Modelle sind in den angegebenen DBMS die einzig verfĂŒgbaren zur Nutzung, und sie verwenden eigene Abfragesprachen. Zweifellos sind solche Modelle und DBMS zukunftstrĂ€chtig, jedoch macht das Fehlen der KompatibilitĂ€t mit Standardmodellen und -sprachen die Nutzung dieser DBMS in ererbten Systemen unmöglich â eine Ersetzung der dort bereits genutzten DBMS wĂ€re daher nicht möglich.
Ăber ArangoDB und OrientDB gab es bereits einen groĂartigen Artikel auf HabrĂ©: .
ArangoDB
ArangoDB gibt UnterstĂŒtzung fĂŒr das grafische Datenmodell an.
Die Knoten im Graph von ArangoDB sind gewöhnliche Dokumente, wĂ€hrend die Kanten spezielle Dokumente sind, die neben den normalen Systemfeldern (_key, _id, _rev) systemische Felder _from und _to. Dokumente in dokumentenbasierten DBMS sind traditionell in Sammlungen gruppiert. Die Sammlungen von Dokumenten, die Kanten darstellen, werden in ArangoDB als Kanten-Sammlungen bezeichnet. Ăbrigens sind die Dokumente der Kanten-Sammlungen ebenfalls Dokumente, sodass Kanten in ArangoDB auch als Knoten fungieren können.
Stammdaten
Angenommen, wir haben eine Sammlung persons, deren Dokumente folgendermaĂen aussehen:
[
{
"_id" : "people\/alice" ,
"_key" : "alice" ,
"name" : "Alice"
},
{
"_id" : "people\/bob" ,
"_key" : "bob" ,
"name" : "Bob"
}
]Angenommen, es gibt auch eine Sammlung cafes:
[
{
"_id" : "cafes\/jd" ,
"_key" : "jd" ,
"name" : "John Donne"
},
{
"_id" : "cafes\/jj" ,
"_key" : "jj" ,
"name" : "Jean-Jacques"
}
]Dann könnte die Sammlung likes folgendermaĂen aussehen:
[
{
"_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
}
]Abfragen und Ergebnisse
Eine Abfrage im grafischen Stil in der in ArangoDB verwendeten Sprache AQL, die in menschenlesbarer Form Informationen darĂŒber zurĂŒckgibt, wem welches CafĂ© gefĂ€llt, sieht so aus:
FOR p IN persons
FOR c IN OUTBOUND p likes
RETURN { person : p.name , likes : c.name }Im relationalen Stil, wenn wir eher die Beziehungen âberechnenâ, anstatt sie zu speichern, könnte diese Abfrage so umgeschrieben werden (ĂŒbrigens könnte auf die Sammlung likes verzichtet werden):
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 }Das Ergebnis wird in beiden FĂ€llen dasselbe sein:
[
{ "person" : "Alice" , likes : "Jean-Jacques" } ,
{ "person" : "Alice" , likes : "John Donne" } ,
{ "person" : "Bob" , likes : "John Donne" }
]Weitere Abfragen und Ergebnisse
Wenn es so aussieht, als wĂ€re das oben dargestellte Ergebnisformat mehr fĂŒr relationale Datenbanken typisch als fĂŒr dokumentenbasierte, könnte man diese Abfrage versuchen (oder ):
FĂR p IN personen
RĂCKGABE {
person : p.name,
likes : (
FĂR c IN OUTBOUND p likes
RĂCKGABE c.name
)
}Das Ergebnis hat folgendes Format:
[
{ "person" : "Alice" , likes : ["Jean-Jacques" , "John Donne"] } ,
{ "person" : "Bob" , likes : ["John Donne"] }
]OrientDB
Die Implementierung des grafischen Modells ĂŒber dem dokumentenbasierten in OrientDB basiert auf Dokumentenfeldern, die neben mehr oder weniger standardmĂ€Ăigen skalaren Werten auch Werte der Typen wie LINK, LINKLIST, LINKSET, LINKMAP und LINKBAG. Die Werte dieser Typen sind Links oder Sammlungen von Links zu Dokumenten.
Die vom System zugewiesene Dokumentenidentifikationsnummer hat eine âphysische Bedeutungâ, die die Position des Eintrags in der Datenbank angibt, und sieht ungefĂ€hr so aus: @rid : #3:16. Damit sind die Werte der Verweisattribute tatsĂ€chlich eher Zeiger (wie im grafischen Modell) und nicht Auswahlkriterien (wie in der relationalen Datenbank).
Wie auch in ArangoDB werden die Kanten in OrientDB als separate Dokumente dargestellt (obwohl, wenn eine Kante keine eigenen Attribute hat, sie auch , und es wird kein separates Dokument dafĂŒr geben).
Stammdaten
In einem Format, das dem von OrientDB Ă€hnelt, wĂŒrden die Daten aus dem vorherigen Beispiel fĂŒr ArangoDB etwa so aussehen:
[
{
"@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"
}
]Wie wir sehen, speichern die Knoten auch Informationen ĂŒber eingehende und ausgehende Kanten. Bei Bei der Dokumenten-API fĂŒr die Konsistenz von VerknĂŒpfungen muss man selbst darauf achten, wĂ€hrend die Graph-API diese Aufgabe ĂŒbernimmt. Lassen Sie uns jedoch ansehen, wie der Zugriff auf OrientDB in "reinen", nicht in Programmiersprachen integrierten Abfragesprachen aussieht.
Abfragen und Ergebnisse
Eine Anfrage, die dem Zweck der Anfrage im Beispiel fĂŒr ArangoDB entspricht, sieht in OrientDB so aus:
SELECT name AS person_name, OUT('likes').name AS cafe_name
FROM Person
UNWIND cafe_nameDas Ergebnis wird wie folgt aussehen:
[
{ "person_name": "Alice", "cafe_name": "John Donne" },
{ "person_name": "Alice", "cafe_name": "Jean-Jacques" },
{ "person_name": "Bob", "cafe_name": "Jean-Jacques" }
]Wenn das Format des Ergebnisses wieder zu "relational" erscheint, sollte die Zeile mit :
[
{ "person_name": "Alice", "cafe_name": [ "John Donne", "Jean-Jacques" ] },
{ "person_name": "Bob", "cafe_name": [ "Jean-Jacques" ] }
]Die Abfragesprache von OrientDB kann als SQL mit Gremlin-Ă€hnlichen EinfĂŒgungen charakterisiert werden. In der Version 2.2 wurde eine Cypher-Ă€hnliche Abfrageform eingefĂŒhrt, :
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_nameDas Format des Ergebnisses wird das gleiche sein wie in der vorherigen Anfrage. Ăberlegen Sie, was entfernt werden muss, um es relationaler zu gestalten, wie in der allerersten Anfrage.
Azure CosmosDB
Weniger stark trifft das oben Gesagte zu ArangoDB und OrientDB auf Azure CosmosDB zu. CosmosDB bietet folgende APIs fĂŒr den Datenzugriff: SQL, MongoDB, Gremlin und Cassandra.
Die SQL-API und die MongoDB-API werden fĂŒr den Zugang zu Daten im Dokumentenmodell verwendet. Die Gremlin-API und die Cassandra-API sind entsprechend fĂŒr den Zugang zu Daten im Graph- und Spaltenformat vorgesehen. Die Daten in allen Modellen werden im Format des internen Modells von CosmosDB gespeichert: (âatom-record-sequenceâ), das ebenfalls dem Dokumentenmodell nahe ist.

Doch die vom Benutzer gewÀhlte Datenmodell und die verwendete API werden zum Zeitpunkt der Erstellung des Kontos im Dienst festgelegt. Es ist unmöglich, auf Daten, die in einem Modell hochgeladen wurden, im Format eines anderen Modells zuzugreifen, was etwa durch das folgende Bild veranschaulicht werden könnte:

Somit stellt die MultimodalitĂ€t in Azure CosmosDB derzeit nur die Möglichkeit dar, mehrere Datenbanken zu nutzen, die verschiedene Modelle von einem Anbieter unterstĂŒtzen, was nicht alle Herausforderungen der variantenreichen Speicherung löst.
Multimodale DBMS auf Basis des Graphmodells?
Es ist bemerkenswert, dass es auf dem Markt derzeit keine multimodalen DBMS gibt, die auf dem Graphmodell basieren (es sei denn, man zĂ€hlt die gleichzeitige UnterstĂŒtzung zweier Graphmodelle: RDF und LPG zur MultimodalitĂ€t; siehe dazu ). Die gröĂte Herausforderung besteht darin, ein Dokumentenmodell auf einer Graphdatenbank umzusetzen und nicht auf einem relationalen.
Die Frage, wie ein relatives Modell auf einer Graphdatenbank umgesetzt werden kann, wurde bereits zu Zeiten diskutiert, als das relationale Modell entstand. Wie , zum Beispiel, :
Es gibt nichts, was dem graphbasierten Ansatz inhĂ€rent ist und die Erstellung einer Schicht (z. B. durch geeignete Indizierung) auf einer Graphdatenbank verhindert, die eine relationale Sicht ermöglicht mit (1) der Wiederherstellung von Tupeln aus den ĂŒblichen SchlĂŒssel-Wert-Paaren und (2) der Gruppierung von Tupeln nach Beziehungstyp.
Bei der Umsetzung eines Dokumentenmodells auf einer Graphdatenbank muss man unter anderem Folgendes berĂŒcksichtigen:
- JSON-Arrays sind geordnet, die von einer Kante des Graphen ausgehen â nicht;
- Daten im Dokumentenmodell sind normalerweise denormalisiert, es ist nicht wĂŒnschenswert, mehrere Kopien desselben verschachtelten Dokuments zu speichern, und Unterdokumente haben normalerweise keine Identifikatoren;
- Andererseits ist das Ideologie von dokumentenorientierten DBMS, dass Dokumente vollstĂ€ndige âAggregateâ sind, die nicht jedes Mal neu aufgebaut werden mĂŒssen. Es muss sichergestellt werden, dass in der Graphdatenbank die Möglichkeit besteht, schnell einen Teilgraphen entsprechend einem fertigen Dokument abzurufen.
Ein wenig Werbung
Der Autor des Artikels ist an der Entwicklung der Datenbank NitrosBase beteiligt, deren internes Modell graphbasiert ist, wĂ€hrend die externen Modelle relational und dokumentenorientiert dargestellt werden. Alle Modelle sind gleichberechtigt: praktisch alle Daten sind in jedem von ihnen mit der fĂŒr sie typischen Abfragesprache zugĂ€nglich. DarĂŒber hinaus können die Daten in jeder Darstellung geĂ€ndert werden. Die Ănderungen spiegeln sich im internen Modell wider und somit in anderen Darstellungen.
Wie die Modelle in NitrosBase ĂŒbereinstimmen â ich hoffe, dass ich dies in einem der nĂ€chsten Artikel beschreiben kann.
Fazit
Ich hoffe, dass die allgemeinen Umrisse dessen, was als MultimodalitĂ€t bezeichnet wird, dem Leser mehr oder weniger klar geworden sind. Als multimodal werden ganz unterschiedliche DBMS bezeichnet, und âUnterstĂŒtzung mehrerer Modelleâ kann unterschiedlich aussehen. Um zu verstehen, was in jedem konkreten Fall als âMultimodalitĂ€tâ bezeichnet wird, ist es nĂŒtzlich, die folgenden Fragen zu beantworten:
- Geht es um die UnterstĂŒtzung traditioneller Modelle oder um eine bestimmte âhybrideâ Modell?
- Sind die Modelle âgleichberechtigtâ oder ist eines von ihnen untergeordneten fĂŒr andere?
- Sind Modelle einander gegenĂŒber gleichgĂŒltig? Können Daten, die in einem Modell gespeichert sind, in einem anderen gelesen oder sogar ĂŒberschrieben werden?
Ich denke, die Frage nach der Relevanz multimodaler DBMS kann bereits positiv beantwortet werden, aber interessant ist die Frage, welche spezifischen Arten in naher Zukunft gefragter sein werden. Es scheint, dass multimodale DBMS, die traditionelle Modelle unterstĂŒtzen, insbesondere relationale, stĂ€rker nachgefragt werden; die PopularitĂ€t multimodaler DBMS, die neue Modelle anbieten, die die VorzĂŒge verschiedener traditioneller Kombinationen vereinen, ist jedoch eher eine Angelegenheit der ferneren Zukunft.
Nur registrierte Benutzer können an der Umfrage teilnehmen. .
Verwenden Sie multimodale DBMS?
Wir verwenden keine, alle Daten werden in einem DBMS und einem Modell gespeichert.
Wir nutzen die multimodalen Möglichkeiten traditioneller DBMS.
Wir praktizieren polyglotte Persistenz.
Wir verwenden neue multimodale DBMS (Arango, Orient, CosmosDB).
19 Benutzer haben abgestimmt. 4 Benutzer haben sich enthalten.
Quelle: habr.com
