Èske DBMS milti-modèl yo baz sistèm enfòmasyon modèn yo?

Sistèm enfòmasyon modèn yo byen konplèks. Pa pi piti nan tout, konpleksite yo se akòz konpleksite nan done yo trete nan yo. Konpleksite done souvan se nan varyete modèl done yo itilize. Se konsa, pou egzanp, lè done vin "gwo", youn nan karakteristik sa yo pwoblèm se pa sèlman volim li yo ("volim"), men tou, varyete li yo ("varyete").

Si ou poko jwenn yon defo nan rezònman an, li kontinye.

Èske DBMS milti-modèl yo baz sistèm enfòmasyon modèn yo?


Content

Pèsistans poliglot
Multi-modèl
DBMS milti-modèl ki baze sou modèl relasyon an
     Modèl dokiman nan MS SQL sèvè
     Modèl graf nan MS SQL sèvè
DBMS milti-modèl ki baze sou modèl dokiman an
     Modèl relasyon nan MarkLogic
     Modèl graf nan MarkLogic
DBMS milti-modèl "san yon modèl prensipal"
     ArangoDB
     OrientDB
     Azure CosmosDB
DBMS milti-modèl ki baze sou yon modèl graf?
Konklizyon
Опрос

Pèsistans poliglot

Pi wo a mennen nan lefèt ke pafwa menm nan kad yon sèl sistèm li nesesè yo sèvi ak plizyè DBMS diferan nan magazen done ak rezoud pwoblèm divès kalite nan trete yo, chak nan yo ki sipòte pwòp modèl done li yo. Avèk men limyè M. Fowler, otè a yon kantite liv pi popilè ak youn nan ko-otè Agile Manifès, sitiyasyon sa a rele depo milti-variante ("pèsistans poliglot").

Fowler tou gen egzanp sa a nan òganize depo done nan yon aplikasyon plen prezante ak gwo chaj nan domèn e-commerce.

Èske DBMS milti-modèl yo baz sistèm enfòmasyon modèn yo?

Egzanp sa a, nan kou, se yon ti jan ekzajere, men kèk konsiderasyon an favè chwazi youn oswa yon lòt DBMS pou objektif ki koresponn lan ka jwenn, pou egzanp, isit la.

Li klè ke se yon sèvitè nan yon zou konsa se pa fasil.

  • Kantite kòd ki fè depo done ap grandi an pwopòsyon ak kantite DBMS yo itilize; kantite done kòd senkronize bon si se pa pwopòsyonèl ak kare nimewo sa a.
  • Kòm yon miltip nan kantite DBMS yo itilize, depans pou bay karakteristik antrepriz (évolutivité, tolerans fay, disponiblite segondè) nan chak nan DBMS yo itilize ogmante.
  • Li enposib asire karakteristik sa yo antrepriz nan subsistèm nan depo kòm yon antye - espesyalman tranzaksyon.

Soti nan pwen de vi direktè zou a, tout bagay sanble sa a:

  • Yon ogmantasyon miltip nan pri a nan lisans ak sipò teknik nan men manifakti a DBMS.
  • Overstaffing ak ogmante dat limit yo.
  • Pèt finansye dirèk oswa penalite akòz enkonsistans done yo.

Gen yon ogmantasyon siyifikatif nan total cost of ownership (TCO) sistèm nan. Èske gen nenpòt fason soti nan sitiyasyon an nan "opsyon depo miltip"?

Multi-modèl

An 2011, tèm "depo divès kalite" te vin itilize. Konsyantizasyon pwoblèm yo nan apwòch la ak rechèch la pou yon solisyon te pran plizyè ane, ak pa 2015, nan bouch yo nan analis Gartner, repons lan te formul:

Li sanble ke fwa sa a analis Gartner te gen rezon ak pwevwa yo. Si ou ale nan paj la ak evalyasyon prensipal la DBMS sou DB-Engines, ou ka wè saоPifò nan lidè li yo pozisyone tèt yo espesyalman kòm milti-modèl DBMSs. Menm bagay la tou ka wè sou paj la ak nenpòt evalyasyon prive.

Tablo ki anba a montre DBMS yo - lidè yo nan chak nan evalyasyon prive yo, ki reklame yo se milti-modèl. Pou chak DBMS, modèl orijinal sipòte (ki te yon fwa sèl la) ak ansanm ak li modèl yo sipòte kounye a yo endike. Epitou ki nan lis DBMS yo ki pozisyone tèt yo kòm "orijinèlman milti-modèl" epi, dapre kreyatè yo, pa gen okenn modèl inisyal eritye.

DBMS Premye modèl Modèl adisyonèl
Oracle Relasyonèl Grafik, dokiman
MS SQL Relasyonèl Grafik, dokiman
Postgrèskl Relasyonèl Graph*, dokiman
MarkLogic Dokimantè Grafik, relasyon
MongoDB Dokimantè Valè kle, graf*
DataStax Lajè-kolòn Dokimantè, graf
Redis Kle-valè Dokimantè, graf*
ArangoDB - Grafik, dokiman
OrientDB - Grafik, dokiman, relasyon
Azure CosmosDB - Grafik, dokiman, relasyon

Nòt sou tab la

Asterisk nan tablo a make deklarasyon ki mande rezèvasyon:

  • DBMS PostgreSQL la pa sipòte modèl done graf la, men pwodui sa a sipòte li baze sou li, tankou AgensGraph.
  • An relasyon ak MongoDB, li pi kòrèk pou pale sou prezans operatè graf nan lang rechèch la ($lookup, $graphLookup) pase sou sipòte modèl graf la, byenke, nan kou, entwodiksyon yo te mande kèk optimize nan nivo depo fizik nan direksyon sipòte modèl graf la.
  • An relasyon ak Redis, nou vle di ekstansyon an RedisGraph.

Apre sa, pou chak nan klas yo, nou pral montre kouman sipò pou plizyè modèl aplike nan DBMS nan klas sa a. Nou pral konsidere modèl relasyon, dokiman ak graf yo pi enpòtan an epi nou pral sèvi ak egzanp DBMS espesifik pou montre kouman "sa ki manke yo" yo aplike.

DBMS milti-modèl ki baze sou modèl relasyon an

DBMS dirijan yo kounye a se relasyon; previzyon Gartner pa ta ka konsidere kòm vre si RDBMS yo pa t montre mouvman nan direksyon milti-modelizasyon. Epi yo demontre. Koulye a, lide ke yon DBMS milti-modèl se tankou yon kouto Swis, ki pa ka fè anyen byen, ka dirije dirèkteman nan Larry Ellison.

Otè a, sepandan, pwefere aplikasyon an nan milti-modèl nan Microsoft SQL sèvè, sou egzanp lan nan ki sipò RDBMS pou modèl dokiman ak graf yo pral dekri.

Modèl dokiman nan MS SQL sèvè

Te deja gen de atik ekselan sou Habré sou fason MS SQL sèvè aplike sipò pou modèl dokiman an; Mwen pral limite tèt mwen nan yon ti rakonte ak kòmantè tou kout:

Fason pou sipòte modèl dokiman an nan MS SQL sèvè se byen tipik pou DBMS relasyon yo: Yo pwopoze dokiman JSON yo dwe estoke nan jaden tèks òdinè. Sipò pou modèl dokiman an se bay operatè espesyal pou analize JSON sa a:

Dezyèm agiman tou de operatè yo se yon ekspresyon nan sentaks ki tankou JSONPath.

Abstract, nou ka di ke dokiman ki estoke nan fason sa a se pa "antite premye klas" nan yon DBMS relasyon, kontrèman ak tuples. Espesyalman, nan MS SQL sèvè kounye a pa gen okenn endèks sou jaden yo nan dokiman JSON, ki fè li difisil pou rantre nan tab lè l sèvi avèk valè yo nan jaden sa yo e menm chwazi dokiman lè l sèvi avèk valè sa yo. Sepandan, li posib pou kreye yon kolòn kalkile pou yon jaden konsa ak yon endèks sou li.

Anplis de sa, MS SQL sèvè bay kapasite pou konstwi yon dokiman JSON apati sa ki nan tab lè l sèvi avèk operatè a. FOR JSON PATH - yon posibilite, nan yon sèten sans, opoze a anvan an, depo konvansyonèl yo. Li klè ke kèlkeswa jan vit yon RDBMS ye, apwòch sa a kontredi ideoloji dokiman DBMS yo, ki esansyèlman estoke repons pare yo nan demann popilè, epi li ka sèlman rezoud pwoblèm nan fasilite nan devlopman, men se pa vitès.

Finalman, MS SQL sèvè pèmèt ou rezoud pwoblèm opoze a nan konstriksyon dokiman: ou ka dekonpoze JSON nan tab lè l sèvi avèk OPENJSON. Si dokiman an pa konplètman plat, w ap bezwen itilize CROSS APPLY.

Modèl graf nan MS SQL sèvè

Sipò pou modèl graf la (LPG) tou konplètman aplike nan Microsoft SQL Server previzib: Yo pwopoze pou itilize tab espesyal pou estoke nœuds ak pou sere bor graf yo. Tablo sa yo kreye lè l sèvi avèk ekspresyon CREATE TABLE AS NODE и CREATE TABLE AS EDGE respektivman.

Tablo nan premye kalite yo sanble ak tab òdinè pou estoke dosye, ak sèl diferans ekstèn se ke tab la gen yon jaden sistèm. $node_id — idantifyan inik nan yon ne graf nan baz done a.

Menm jan an tou, tab nan dezyèm kalite a gen jaden sistèm $from_id и $to_id, antre nan tablo sa yo klèman defini koneksyon ki genyen ant nœuds. Yo itilize yon tab separe pou sere relasyon chak kalite.

Èske DBMS milti-modèl yo baz sistèm enfòmasyon modèn yo? Ann ilistre sa ak yon egzanp. Kite done graf yo gen yon layout tankou sa ki montre nan figi a. Lè sa a, pou kreye estrikti ki koresponn lan nan baz done a ou bezwen kouri demann DDL sa yo:

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

Espesifik prensipal tab sa yo se ke nan demann kont yo li posib yo sèvi ak modèl graf ak sentaks ki tankou Cypher (sepandan, "*"ets. yo poko sipòte). Dapre mezi pèfòmans yo, li ka sipoze tou fason done yo estoke nan tab sa yo diferan de fason done yo estoke nan tab regilye yo epi li optimize pou egzekite demann graf sa yo.

SELECT Cafe.name
  FROM Person, likes, Cafe
  WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
  AND Person.name = 'John';

Anplis, li trè difisil pou pa sèvi ak modèl graf sa yo lè w ap travay ak tab sa yo, paske nan demann SQL òdinè pou rezoud pwoblèm menm jan an li pral nesesè pou fè efò adisyonèl pou jwenn idantifyan ne "graf" sistèm yo ($node_id, $from_id, $to_id; Pou menm rezon an, demann pou mete done yo pa montre isit la paske yo san nesesite ankonbran).

Pou rezime deskripsyon aplikasyon yo nan dokiman an ak modèl graf nan MS SQL sèvè, mwen ta sonje ke aplikasyon sa yo nan yon modèl sou tèt yon lòt pa sanble siksè, prensipalman nan pwen de vi nan konsepsyon langaj. Li nesesè pou pwolonje yon lang ak yon lòt, lang yo pa konplètman "òtogonal", règ konpatibilite yo ka byen ra.

DBMS milti-modèl ki baze sou modèl dokiman an

Nan seksyon sa a, mwen ta renmen ilistre aplikasyon milti-modèl nan dokiman DBMSs lè l sèvi avèk egzanp lan nan pa pi popilè nan yo, MongoDB (jan yo te di, li sèlman gen operatè graf kondisyonèl. $lookup и $graphLookup, pa travay sou koleksyon sharded), men w ap itilize egzanp yon DBMS ki pi matirite ak "antrepriz". MarkLogic.

Se konsa, kite koleksyon an genyen yon seri dokiman XML nan kalite sa a (MarkLogic pèmèt ou tou sere dokiman JSON):

<Person INN="631803299804">
  <name>John</name>
  <surname>Smith</surname>
</Person>

Modèl relasyon nan MarkLogic

Ou ka kreye yon gade relasyon nan yon koleksyon dokiman lè l sèvi avèk modèl ekspozisyon (kontni eleman yo value nan egzanp ki anba a ka gen yon XPath abitrè):

<template >
  <context>/Person</context>
  <rows>
    <row>
      <view-name>Person</view-name>
      <columns>
        <column>
          <name>SSN</name>
          <value>@SSN</value>
          <type>string</type>
        </column>
        <column>
          <name>name</name>
          <value>name</value>
        </column>
        <column>
          <name>surname</name>
          <value>surname</value>
        </column>
      </columns>
    </row>
  <rows>
</template>

Ou ka adrese View kreye a ak yon rechèch SQL (pa egzanp, atravè ODBC):

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

Malerezman, gade relasyon ki kreye pa modèl ekspozisyon an se lekti sèlman. Lè w ap trete yon demann pou li, MarkLogic pral eseye itilize endèks dokiman yo. Précédemment, MarkLogic te gen limit relasyon relasyon, antyèman baze sou endèks ak ekri, men kounye a yo konsidere kòm obsolèt.

Modèl graf nan MarkLogic

Avèk sipò pou modèl graf (RDF), tout bagay se sou menm bagay la. Ankò ak èd la modèl ekspozisyon ou ka kreye yon reprezantasyon RDF nan yon koleksyon dokiman nan egzanp ki anwo a:

<template >
  <context>/Person</context>
    <vars>
      <var>
        <name>PREFIX</name>
        <val>"http://example.org/example#"</val>
      </var>
    </vars>
  <triples>
    <triple>
      <subject><value>sem:iri( $PREFIX || @SSN )</value></subject>
      <predicate><value>sem:iri( $PREFIX || surname )</value></predicate>
      <object><value>xs:string( surname )</value></object>
    </triple>
    <triple>
      <subject><value>sem:iri( $PREFIX || @SSN )</value></subject>
      <predicate><value>sem:iri( $PREFIX || name )</value></predicate>
      <object><value>xs:string( name )</value></object>
    </triple>
  </triples>
  </template>

Ou ka adrese graf RDF ki kapab lakòz ak yon rechèch SPARQL:

PREFIX : <http://example.org/example#>
SELECT ?name ?surname {
  :631803299804 :name ?name ; :surname ?surname .
}

Kontrèman ak relasyon relasyon an, MarkLogic sipòte modèl graf la nan de lòt fason:

  1. Yon DBMS kapab yon depo totalman separe done RDF (yo pral rele triplet ki ladan l jere Kontrèman ak sa yo dekri pi wo a extrait).
  2. RDF nan seri espesyal ka tou senpleman mete nan dokiman XML oswa JSON (epi yo pral rele triple yo san jere). Sa a se pwobableman yon altènativ a mekanis idref elatriye

Yon bon lide sou ki jan bagay sa yo "vrèman" travay nan MarkLogic bay pa API optik, nan sans sa a, li se nivo ki ba, byenke objektif li se pito opoze a - eseye abstrè soti nan modèl la done yo itilize, asire travay ki konsistan avèk done nan diferan modèl, tranzaksyon, elatriye.

DBMS milti-modèl "san yon modèl prensipal"

Genyen tou DBMS sou mache a ki pozisyone tèt yo kòm okòmansman milti-modèl, san okenn modèl prensipal eritye. Men sa yo enkli ArangoDB, OrientDB (depi 2018 konpayi devlopman an fè pati SAP) ak CosmosDB (sèvis kòm yon pati nan platfòm nwaj Microsoft Azure).

An reyalite, gen modèl "debaz" nan ArangoDB ak OrientDB. Nan de ka yo, sa yo se pwòp modèl done yo, ki se jeneralizasyon nan yon sèl dokiman an. Jeneralizasyon yo se sitou fasilite kapasite nan fè demann nan yon graf ak nati relasyon.

Modèl sa yo se sèlman ki disponib pou itilize nan DBMS espesifye yo; pwòp lang rechèch yo fèt pou travay avèk yo. Natirèlman, modèl sa yo ak DBMS yo pwomèt, men mank de konpatibilite ak modèl estanda ak lang fè li enposib pou itilize DBMS sa yo nan sistèm eritaj - pou ranplase DBMS yo deja itilize la.

Te gen deja yon bèl atik sou ArangoDB ak OrientDB sou Habré: JOIN nan baz done NoSQL.

ArangoDB

ArangoDB reklame sipò pou yon modèl done graf.

Nœuds yo nan yon graf nan ArangoDB yo se dokiman òdinè, ak bor yo se dokiman nan yon kalite espesyal ki, ansanm ak jaden sistèm regilye yo, gen (_key, _id, _rev) jaden sistèm yo _from и _to. Dokiman nan DBMS dokiman yo tradisyonèlman konbine nan koleksyon. Koleksyon dokiman ki reprezante bor yo rele koleksyon kwen nan ArangoDB. By wout la, dokiman koleksyon kwen yo tou dokiman, kidonk bor nan ArangoDB ka aji tou kòm nœuds.

Done kri

Se pou nou gen yon koleksyon persons, ki gen dokiman yo sanble sa a:

[
  {
    "_id"  : "people/alice" ,
    "_key" : "alice" ,
    "name" : "Алиса"
  },
  {
    "_id"  : "people/bob" ,
    "_key" : "bob" ,
    "name" : "Боб"  
  }
]

Se pou genyen tou yon koleksyon cafes:

[
  {
    "_id" : "cafes/jd" ,
    "_key" : "jd" ,
    "name" : "Джон Донн"  
  },
  {
    "_id" : "cafes/jj" ,
    "_key" : "jj" ,
    "name" : "Жан-Жак"
  }
]

Lè sa a, koleksyon an likes ta ka sanble tankou sa a:

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

Rekèt ak rezilta yo

Yon rekèt graf-style nan lang AQL yo itilize nan ArangoDB, retounen nan fòm moun lizib enfòmasyon sou ki moun ki renmen ki kafe, sanble sa a:

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

Nan yon style relasyon, kote nou ap "konpute" relasyon olye ke estoke yo, rechèch sa a ka reekri tankou sa a (nan chemen an, san koleksyon an. likes ka fè san yo pa):

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 }

Rezilta a nan tou de ka yo pral menm:

[
  { "person" : "Алиса" , likes : "Жан-Жак" } ,
  { "person" : "Алиса" , likes : "Джон Донн" } ,
  { "person" : "Боб" , likes : "Джон Донн" }
]

Plis demann ak rezilta

Si fòma rezilta ki anwo a sanble pi tipik pou yon DBMS relasyon pase pou yon DBMS dokiman, ou ka eseye rechèch sa a (oswa ou ka itilize COLLECT):

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

Rezilta a pral sanble tankou sa a:

[
  { "person" : "Алиса" , likes : ["Жан-Жак" , "Джон Донн"]  } ,
  { "person" : "Боб" , likes : ["Джон Донн"] }
]

OrientDB

Baz pou aplike yon modèl graf sou tèt yon modèl dokiman nan OrientDB se opòtinite jaden dokiman yo, anplis valè eskalè estanda plis oswa mwens, gen tou valè kalite tankou LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Valè yo nan kalite sa yo se lyen oswa koleksyon lyen ki mennen nan idantifyan sistèm yo dokiman yo.

Idantifyan dokiman an bay sistèm lan gen yon "siyifikasyon fizik", ki endike pozisyon dosye a nan baz done a, epi li sanble yon bagay tankou sa a: @rid : #3:16. Kidonk, valè pwopriyete referans yo se reyèlman endikasyon (tankou nan modèl graf la) olye ke kondisyon seleksyon (tankou nan modèl relasyon an).

Menm jan ak ArangoDB, kwen nan OrientDB reprezante kòm dokiman separe (byenke si yon kwen pa gen pwopriyete pwòp li yo, li ka fè lejè, epi li pa pral koresponn ak yon dokiman separe).

Done kri

Nan yon fòma tou pre fòma pil fatra Baz done OrientDB, done ki soti nan egzanp anvan an pou ArangoDB ta sanble yon bagay tankou sa a:

[
     {
      "@type": "document",
      "@rid": "#11:0",
      "@class": "Person",
      "name": "Алиса",
      "out_likes": [
        "#30:1",
        "#30:2"
      ],
      "@fieldTypes": "out_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#12:0",
      "@class": "Person",
      "name": "Боб",
      "out_likes": [
        "#30:3"
      ],
      "@fieldTypes": "out_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#21:0",
      "@class": "Cafe",
      "name": "Жан-Жак",
      "in_likes": [
        "#30:2",
        "#30:3"
      ],
      "@fieldTypes": "in_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#22:0",
      "@class": "Cafe",
      "name": "Джон Донн",
      "in_likes": [
        "#30:1"
      ],
      "@fieldTypes": "in_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#30:1",
      "@class": "likes",
      "in": "#22:0",
      "out": "#11:0",
      "since": 1262286000000,
      "@fieldTypes": "in=LINK,out=LINK,since=date"
    },
    {
      "@type": "document",
      "@rid": "#30:2",
      "@class": "likes",
      "in": "#21:0",
      "out": "#11:0",
      "since": 1293822000000,
      "@fieldTypes": "in=LINK,out=LINK,since=date"
    },
    {
      "@type": "document",
      "@rid": "#30:3",
      "@class": "likes",
      "in": "#21:0",
      "out": "#12:0",
      "since": 1325354400000,
      "@fieldTypes": "in=LINK,out=LINK,since=date"
    }
  ]

Kòm nou ka wè, somè tou estoke enfòmasyon sou bor fèk ap rantre ak sòtan. Nan lè l sèvi avèk Dokiman API a gen pou kontwole entegrite referans tèt li, epi Graph API a pran travay sa a. Men, ann wè kisa aksè a OrientDB sanble nan lang rechèch "pi" ki pa entegre nan lang pwogramasyon.

Rekèt ak rezilta yo

Yon rechèch ki sanble nan objektif ak rechèch la nan egzanp lan pou ArangoDB nan OrientDB sanble sa a:

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

Rezilta a pral jwenn nan fòm sa a:

[
  { "person_name": "Алиса", "cafe_name": "Джон Донн" },
  { "person_name": "Алиса", "cafe_name": "Жан-Жак" },
  { "person_name": "Боб",  "cafe_name": "Жан-Жак" }
]

Si fòma rezilta a ankò sanble twò "relasyonèl", ou bezwen retire liy lan ak UNWIND():

[
  { "person_name": "Алиса", "cafe_name": [ "Джон Донн", "Жан-Жак" ] },
  { "person_name": "Боб",  "cafe_name": [ "Жан-Жак" ' }
]

Lang rechèch OrientDB a ka dekri kòm SQL ak foure ki sanble ak Gremlin. Nan vèsyon 2.2, yon fòm demann ki sanble ak Cypher parèt, 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

Fòma rezilta a pral menm jan ak demann anvan an. Reflechi sou sa ki bezwen retire pou fè li plis "relasyonèl", tankou nan premye rechèch la.

Azure CosmosDB

Nan yon pi piti limit, sa ki te di pi wo a sou ArangoDB ak OrientDB aplike nan Azure CosmosDB. CosmosDB bay API aksè done sa yo: SQL, MongoDB, Gremlin ak Cassandra.

SQL API ak MongoDB API yo itilize pou jwenn aksè nan done nan modèl dokiman an. Gremlin API ak Cassandra API - pou jwenn aksè nan done nan fòma graf ak kolòn, respektivman. Done nan tout modèl yo sove nan fòma modèl entèn CosmosDB: ARS ("atòm-dosye-sekans"), ki tou pre dokiman an.

Èske DBMS milti-modèl yo baz sistèm enfòmasyon modèn yo?

Men, modèl done itilizatè a chwazi ak API yo itilize yo fiks nan moman an nan kreye yon kont nan sèvis la. Li pa posib jwenn aksè nan done ki chaje nan yon modèl nan fòma yon lòt modèl, jan sa montre nan yon bagay tankou sa a:

Èske DBMS milti-modèl yo baz sistèm enfòmasyon modèn yo?

Kidonk, milti-modèl nan Azure CosmosDB jodi a se sèlman kapasite nan sèvi ak plizyè baz done sipòte modèl diferan nan yon sèl manifakti, ki pa rezoud tout pwoblèm yo nan depo milti-variante.

DBMS milti-modèl ki baze sou yon modèl graf?

Enpòtan se lefèt ke pa gen okenn DBMS milti-modèl sou mache a ankò ki baze sou yon modèl graf (eksepte pou sipò milti-modèl pou ansanm de modèl graf: RDF ak LPG; gade sa a nan piblikasyon anvan). Pi gwo difikilte yo koze pa aplikasyon yon modèl dokiman anlè yon modèl graf, olye ke yon modèl relasyon.

Kesyon an sou kijan pou aplike yon modèl relasyon sou tèt modèl graf la te konsidere menm pandan fòmasyon nan lèt la. Ki jan palepou egzanp David McGovern:

Pa gen anyen nannan nan apwòch la graf ki anpeche kreye yon kouch (egzanp, pa endeks apwopriye) sou yon baz done graf ki pèmèt yon View relasyon ak (1) rekiperasyon nan tuple soti nan pè yo abityèl valè kle ak (2) gwoupman nan. tuple pa kalite relasyon.

Lè w ap aplike yon modèl dokiman anlè yon modèl graf, ou bezwen sonje, pa egzanp, sa ki annapre yo:

  • Eleman yon etalaj JSON yo konsidere kòm kòmande, men sa ki soti nan somè yon kwen nan graf la pa;
  • Done ki nan modèl dokiman an anjeneral denormalize; ou toujou pa vle sere plizyè kopi menm dokiman an entegre, ak sous-dokiman anjeneral pa gen idantifyan;
  • Nan lòt men an, ideoloji dokiman DBMS yo se ke dokiman yo pare-fè "agrégation" ki pa bezwen bati yon nouvo chak fwa. Li oblije bay modèl graf la ak kapasite pou jwenn byen vit yon subgraf ki koresponn ak dokiman fini an.

Yon ti piblisite

Otè atik la gen rapò ak devlopman NitrosBase DBMS, modèl entèn ki se graf, ak modèl ekstèn - relasyon ak dokiman - se reprezantasyon li yo. Tout modèl yo egal: prèske nenpòt done ki disponib nan nenpòt nan yo lè l sèvi avèk yon lang rechèch ki natirèl li. Anplis, nan nenpòt View, done yo ka chanje. Chanjman yo pral reflete nan modèl entèn la ak, kòmsadwa, nan lòt opinyon.

Mwen èspere ke mwen pral dekri ki matche modèl sanble nan NitrosBase nan youn nan atik sa yo.

Konklizyon

Mwen espere ke deskripsyon jeneral yo nan sa yo rele milti-model te vin plis oswa mwens klè pou lektè a. DBMS milti-modèl yo byen diferan, ak "sipò milti-modèl" ka gade diferan. Pou konprann sa yo rele "milti-modèl" nan chak ka espesifik, li itil pou reponn kesyon sa yo:

  1. Èske nou pale sou sipòte modèl tradisyonèl oswa kèk kalite "ibrid" modèl?
  2. Èske modèl yo "egal", oswa se youn nan yo sijè a lòt yo?
  3. Èske modèl yo "endiferan" youn ak lòt? Èske done ki ekri nan yon modèl ka li nan yon lòt oswa menm ranplase?

Mwen panse ke kesyon an sou enpòtans nan milti-modèl DBMS ka deja reponn pozitivman, men kesyon an enteresan an se ki kalite yo pral plis nan demann nan fiti prè. Li sanble ke DBMS milti-modèl ki sipòte modèl tradisyonèl yo, prensipalman relasyon, yo pral nan pi gwo demann; Popilarite milti-modèl DBMS yo, ki ofri nouvo modèl ki konbine avantaj ki genyen nan divès kalite tradisyonèl yo, se yon kesyon de tan kap vini an pi lwen.

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Èske w itilize DBMS milti-modèl?

  • Nou pa sèvi ak li, nou estoke tout bagay nan yon sèl DBMS ak nan yon sèl modèl

  • Nou itilize kapasite milti-modèl nan DBMS tradisyonèl yo

  • Nou pratike pèsistans poliglot

  • Nou itilize nouvo DBMS milti-modèl (Arango, Orient, CosmosDB)

19 itilizatè yo te vote. 4 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè