MaDBMS akawanda-modhi ndiyo hwaro hwemazuva ano ruzivo masisitimu?

Zvirongwa zvemazuva ano zvemashoko zvakaoma kunzwisisa. Zvisiri zvishoma pane zvese, kuoma kwavo kunokonzerwa nekuoma kweiyo data inogadziriswa mavari. Iyo yakaoma yedata inowanzo rara mumhando dzakasiyana dze data dzinoshandiswa. Saka, semuenzaniso, kana data ikava "yakakura", chimwe chezvinetso zvinonetsa haisi iyo chete vhoriyamu ("volume"), asiwo zvakasiyana-siyana ("zvakasiyana").

Kana iwe usati wawana chikanganiso mukufunga, wobva waverenga.

MaDBMS akawanda-modhi ndiyo hwaro hwemazuva ano ruzivo masisitimu?


Zviri mukati

Polyglot kushingirira
Multi-modhi
Multi-model DBMS yakavakirwa pahukama modhi
     Gwaro modhi muMS SQL Server
     Girafu modhi muMS SQL Server
Multi-modhi DBMS yakavakirwa pagwaro modhi
     Yehukama modhi muMarkLogic
     Girafu modhi muMarkLogic
Multi-model DBMS "isina mhando huru"
     ArangoDB
     OrientDB
     Azure CosmosDB
Multi-model DBMS yakavakirwa pane girafu modhi?
mhedziso
Poll

Polyglot kushingirira

Izvo zviri pamusoro zvinotungamira kune chokwadi chekuti dzimwe nguva kunyangwe mukati mehurongwa hweimwe sisitimu zvakakosha kushandisa akati wandei akasiyana maDBMS kuchengetedza data uye kugadzirisa matambudziko akasiyana ekugadzirisa iwo, imwe neimwe inotsigira yayo yega data data. Neruoko rwakareruka rwaM. Fowler, munyori akati wandei emabhuku ane mukurumbira uye rimwe re co-vanyori Agile Manifesto, mamiriro ezvinhu aya anonzi Multi-variant storage ("polyglot persistence").

Fowler anewo muenzaniso unotevera wekuronga kuchengetedza data mune yakazara-yakazara uye yakakwirira-mutoro application mumunda we e-commerce.

MaDBMS akawanda-modhi ndiyo hwaro hwemazuva ano ruzivo masisitimu?

Uyu muenzaniso, hongu, wakawedzeredza, asi mamwe mafungiro ekusarudza imwe kana imwe DBMS yechinangwa chinoenderana inogona kuwanikwa, semuenzaniso, pano.

Zviri pachena kuti kuva muranda munzvimbo inochengeterwa mhuka hakusi nyore.

  • Nhamba yekodhi inoita kuchengetedza data inokura maererano nenhamba yeDBMS inoshandiswa; huwandu hwekodhi yekuwiriranisa data yakanaka kana isina kuenzana neskweya yenhamba iyi.
  • Sehuwandu hwehuwandu hweDBMS inoshandiswa, mari yekupa bhizinesi maitiro (scalability, kukanganisa kushivirira, kuwanikwa kwepamusoro) yeimwe neimwe yeDBMSs inoshandiswa inowedzera.
  • Izvo hazvigoneke kuve nechokwadi chebhizinesi maitiro eiyo yekuchengetedza subsystem yakazara - kunyanya transaction.

Kubva pakuona kwemukuru wezoo, zvese zvinotaridzika seizvi:

  • Kuwedzera kwakawanda mumutengo wemarezinesi uye rutsigiro rwehunyanzvi kubva kumugadziri weDBMS.
  • Kuwandisa kwevashandi uye kuwedzera kwemazuva ekupedzisira.
  • Yakananga kurasikirwa kwemari kana zvirango nekuda kwekusaenderana kwedata.

Pane kuwedzera kwakakosha mumutengo wese weiyo system (TCO). Pane imwe nzira yekubuda mumamiriro ezvinhu e "akawanda ekuchengetedza sarudzo"?

Multi-modhi

Izwi rokuti "multivariate storage" rakatanga kushandiswa muna 2011. Kuziva nezvematambudziko eiyo nzira uye kutsvaga mhinduro kwakatora makore akati wandei, uye muna 2015, kuburikidza nemiromo yevaGartner vaongorori, mhinduro yakagadziriswa:

Zvinoita sekuti panguva ino vaongorori veGartner vaive chokwadi nekufanotaura kwavo. Kana iwe uchienda kune peji ne main rating DBMS paDB-Injini, unogona kuona izvozvoоVazhinji vevatungamiriri vayo vanozviisa ivo pachavo seakawanda-modhi maDBMS. Izvo zvakafanana zvinogona kuoneka pane peji nechero yakavanzika rating.

Tafura iri pazasi inoratidza iyo DBMS - vatungamiriri mune yega yega ratings, iyo inoti ine akawanda-modhi. Kune yega yega DBMS, iyo yekutanga yakatsigirwa modhi (iyo yaimbove ndiyo yega) uye pamwe nayo iyo mhando inotsigirwa ikozvino inoratidzwa. Zvakare zvakanyorwa maDBMS anozvimisa se "pakutanga akawanda-modhi" uye, sekureva kwevagadziri, havana chero yekutanga nhaka yemuenzaniso.

DBMS Muenzaniso wekutanga Mamwe mamodheru
pangataura Relational Girafu, gwaro
MS SQL Relational Girafu, gwaro
PostgreSQL Relational Girafu*, gwaro
MarkLogic Documentary Girafu, hukama
MongoDB Documentary Kukosha-kukosha, girafu*
DataStax Wide-column Documentary, girafu
Redis Kiyi-kukosha Zvinyorwa, girafu*
ArangoDB - Girafu, gwaro
OrientDB - Girafu, gwaro, hukama
Azure CosmosDB - Girafu, gwaro, hukama

Zvinyorwa patafura

Asterisks mutafura inomaka zviteshi zvemashoko zvinoda kuchengetedzwa:

  • Iyo PostgreSQL DBMS haitsigire iyo graph data modhi, asi chigadzirwa ichi chinoitsigira zvichibva pazviri, zvakadai seAgensGraph.
  • Nechekuita neMongoDB, ndizvo chaizvo kutaura nezve kuvapo kwevashandisi vegirafu mumutauro wekubvunza ($lookup, $graphLookup) pane kutsigira girafu modhi, kunyangwe, chokwadi, sumo yavo yaida kumwe kugadziridzwa padanho rekuchengetedza remuviri munzira yekutsigira girafu modhi.
  • Nezve Redis, tinoreva kuwedzera RedisGraph.

Tevere, kune yega yega makirasi, isu ticharatidza kuti kutsigirwa kwemamodheru akati wandei kunoitwa sei muDBMS kubva mukirasi ino. Tichaona nezvehukama, zvinyorwa uye magirafu modhi kuva akanyanya kukosha uye tinoshandisa mienzaniso yeDBMS chaiyo kuratidza kuti "vakashaikwa" vanoitwa sei.

Multi-model DBMS yakavakirwa pahukama modhi

Iwo anotungamira maDBMS parizvino ane hukama; kufanotaura kwaGartner hakwaigona kutorwa sechokwadi kana RDBMS isina kuratidza kufamba munzira yekuenzanisira akawanda. Uye vanoratidza. Iye zvino pfungwa yokuti DBMS yakawanda yakafanana neSwiss banga, isingagoni kuita chero chinhu chakanaka, inogona kutungamirirwa zvakananga kuna Larry Ellison.

Munyori, zvisinei, anofarira kuitiswa kweakawanda-modhi muMicrosoft SQL Server, pamuenzaniso weiyo RDBMS rutsigiro rwegwaro uye magirafu modhi ichatsanangurwa.

Gwaro modhi muMS SQL Server

Pakatove nezvinyorwa zviviri zvakanakisa paHabré nezve mashandisiro anoita MS SQL Server tsigiro yegwaro modhi; Ini ndichazvigadzirisa pachangu kudzokorora uye tsinhiro:

Nzira yekutsigira modhi yegwaro muMS SQL Server yakajairika kune ehukama maDBMS: magwaro eJSON anofanirwa kuchengetwa mune zvakajairika zvinyorwa zvinyorwa. Tsigiro yegwaro modhi ndeyekupa yakakosha vanoshanda kuti vatarise iyi JSON:

Nharo yechipiri yevashandisi vese ishoko riri muJSONPath-se syntax.

Sezviri pachena, tinogona kutaura kuti magwaro akachengetwa nenzira iyi haasi "yekutanga-kirasi masangano" mune yehukama DBMS, kusiyana nematuples. Kunyanya, muMS SQL Server parizvino hapana ma indexes paminda yeJSON magwaro, izvo zvinoita kuti zviome kujoinha matafura uchishandisa kukosha kweiyi minda uye kunyange kusarudza magwaro uchishandisa aya maitiro. Zvisinei, zvinokwanisika kugadzira koramu yakaverengwa yendima yakadaro uye index pairi.

Pamusoro pezvo, MS SQL Server inopa kugona kugadzira zviri nyore gwaro reJSON kubva zviri mumatafura uchishandisa anoshanda. FOR JSON PATH - mukana, mune imwe pfungwa, yakatarisana neyakapfuura, yakajairwa kuchengetedza. Zviripachena kuti kunyangwe inokurumidza sei iyo RDBMS, nzira iyi inopesana nedzidziso yegwaro DBMSs, iyo inonyanya kuchengetedza mhinduro dzakagadzirirwa kumibvunzo yakakurumbira, uye inogona chete kugadzirisa matambudziko ekureruka kwekusimudzira, asi kwete kumhanya.

Pakupedzisira, MS SQL Server inokutendera kuti ugadzirise dambudziko rakatarisana nekuvaka kwegwaro: unogona kuparadza JSON mumatafura uchishandisa. OPENJSON. Kana gwaro racho risina kukwana zvakakwana, iwe uchada kushandisa CROSS APPLY.

Girafu modhi muMS SQL Server

Tsigiro yegirafu (LPG) modhi inoitwawo zvizere muMicrosoft SQL Server zvinofanotaurwa: Inokurudzirwa kushandisa matafura akakosha kuchengetedza node uye kuchengetedza mipendero yegirafu. Matafura akadaro anogadzirwa uchishandisa mataurirwo CREATE TABLE AS NODE и CREATE TABLE AS EDGE maererano.

Matafura emhando yekutanga akafanana nematafura akajairwa ekuchengetedza marekodhi, nemusiyano wega wekunze uri wekuti tafura ine system field. $node_id - yakasarudzika identifier yegirafu node mukati me database.

Saizvozvo, matafura emhando yechipiri ane masisitimu ehurongwa $from_id и $to_id, zvinyorwa mumatafura akadaro zvinonyatsotsanangura kubatanidzwa pakati pemanodhi. Tafura yakasiyana inoshandiswa kuchengetedza hukama hwemhando imwe neimwe.

MaDBMS akawanda-modhi ndiyo hwaro hwemazuva ano ruzivo masisitimu? Ngatienzanisirei izvi nemuenzaniso. Rega data regirafu rive nemagadzirirwo akafanana neakaratidzwa mumufananidzo. Wobva wagadzira chimiro chinoenderana mudhatabhesi iwe unofanirwa kumhanyisa inotevera DDL mibvunzo:

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

Chinhu chikuru chematafura akadaro ndechekuti mumibvunzo pamusoro pavo zvinokwanisika kushandisa magirafu mapatani neCypher-like syntax (zvisinei, "*"nezvimwe hazvisati zvatsigirwa). Zvichienderana nezviyero zvekuita, zvinogona zvakare kufungidzirwa kuti nzira inochengeterwa data mumatafura aya akasiyana nenzira iyo data inochengetwa mumatafura enguva dzose uye inokwenenzverwa kuti iite mibvunzo yegirafu yakadaro.

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

Zvakare, zvakanyanya kuoma kusashandisa aya mapatani egirafu paunenge uchishanda nematafura akadaro, sezvo mune yakajairwa SQL mibvunzo kugadzirisa matambudziko akafanana zvichave zvakafanira kuita kumwe kuedza kuwana system "graph" node identifiers ($node_id, $from_id, $to_id; Nechikonzero chimwe chete, mibvunzo yekuisa data haina kuratidzwa pano sezvo ichinetsa zvisina basa).

Kupfupisa tsananguro yekushandiswa kwegwaro uye magirafu mamodheru muMS SQL Server, ndingacherekedza kuti kuita kwakadaro kweimwe modhi pamusoro peimwe hakuratidzike kubudirira, kunyanya kubva pakuona kwekugadzira mutauro. Izvo zvinodiwa kuti uwedzere mutauro mumwe nemumwe, mitauro haisi "orthogonal" zvachose, iyo mitemo yekuenderana inogona kunge inoshamisa.

Multi-modhi DBMS yakavakirwa pagwaro modhi

Muchikamu chino ndinoda kuenzanisira kuitwa kwema-multi-model mugwaro DBMSs ndichishandisa muenzaniso weasinganyanyofarirwa nawo, MongoDB (sezvakataurwa, inongove neconditional graph operators. $lookup и $graphLookup, kusashanda pane zvakaunganidzwa zvakaunganidzwa), asi uchishandisa muenzaniso weakanyanya kukura uye "bhizinesi" DBMS MarkLogic.

Saka, rega kuunganidzwa kuve neseti yemagwaro eXML emhando inotevera (MarkLogic zvakare inobvumidza iwe kuchengeta magwaro eJSON):

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

Yehukama modhi muMarkLogic

Maonero ehukama ekuunganidzwa kwemagwaro anogona kugadzirwa uchishandisa kuratidza template (zviri mukati mezvinhu value mumuenzaniso pazasi panogona kuve nekupokana XPath):

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

Unogona kugadzirisa maonero akagadzirwa nemubvunzo weSQL (semuenzaniso, kuburikidza neODBC):

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

Nehurombo, iyo yehukama maonero akagadzirwa neanoratidza template inoverengwa-chete. Paunenge uchigadzirisa chikumbiro chayo, MarkLogic inoedza kushandisa zvinyorwa zvinyorwa. Pakutanga, MarkLogic yaive nemaonero mashoma ehukama, zvachose index based uye anonyorwa, asi iye zvino ave kunzi haana basa.

Girafu modhi muMarkLogic

Nerutsigiro rwegirafu (RDF) modhi, zvese zvakangofanana. Zvakare nerubatsiro kuratidza template unogona kugadzira iyo RDF inomiririra muunganidzwa wemagwaro kubva pamuenzaniso uri pamusoro:

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

Unogona kugadzirisa mhedzisiro yeRDF girafu nemubvunzo weSPARQL:

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

Kusiyana neiyo yehukama, MarkLogic inotsigira iyo girafu modhi mune dzimwe nzira mbiri:

  1. A DBMS inogona kuve yakazara-yakasiyana chengetedzo yeRDF data (matatu mairi achadaidzwa vakakwanisa mukupesana nedzarondedzerwa pamusoro apa rakabviswa).
  2. RDF mune yakakosha serialization inogona kungoiswa muXML kana JSON zvinyorwa (uye katatu achadaidzwa isingadzoreke) Iyi ingangove imwe nzira kune michina idref uye vamwe.

Pfungwa yakanaka yekuti zvinhu "chaizvo" zvinoshanda sei muMarkLogic inopiwa na Optical API, mupfungwa iyi, yakaderera-chikamu, kunyange chinangwa chayo chiri chakapesana - kuedza kubvisa kubva kumuenzaniso wedata unoshandiswa, kuve nechokwadi chekushanda kwakafanana nedata mumhando dzakasiyana, transactionality, nezvimwewo.

Multi-model DBMS "isina mhando huru"

Kune zvakare maDBMS pamusika anozviisa sepakutanga akawanda-modhi, pasina chero nhaka huru modhi. Izvi zvinosanganisira ArangoDB, OrientDB (sezvo 2018 kambani yekusimudzira ndeyeSAP) uye CosmosDB (sevhisi sechikamu cheMicrosoft Azure gore chikuva).

Muchokwadi, kune "musimboti" modhi muArangoDB uye OrientDB. Muzviitiko zvese izvi, aya ndiwo emhando yavo yedata, inova generalizations yegwaro rimwe. Iwo generalizations anonyanya kufambisa kugona kuita mibvunzo yegirafu uye hukama hwehukama.

Aya mamodheru ndiwo chete anowanikwa kuti ashandiswe mune yakatsanangurwa DBMS; yavo yemibvunzo mitauro yakagadzirirwa kushanda navo. Ehe, mhando dzakadai uye maDBMS ari kuvimbisa, asi kushaikwa kwekuenderana neakajairwa mamodheru nemitauro kunoita kuti zvisaite kushandisa maDBMS aya mumasisitimu enhaka-kutsiva maDBMS atoshandiswa ipapo.

Paive patove nechinyorwa chinoshamisa nezve ArangoDB uye OrientDB paHabré: JOIN muNoSQL dhatabhesi.

ArangoDB

ArangoDB inoti inotsigira graph data model.

Node dzegirafu muArangoDB magwaro akajairwa, uye mipendero magwaro emhando yakakosha iyo, pamwe chete neminda yenguva dzose, ine (_key, _id, _rev) system fields _from и _to. Zvinyorwa mugwaro DBMSs zvakajairwa kusanganiswa kuita muunganidzwa. Kuunganidzwa kwemagwaro anomiririra mipendero kunonzi kuunganidzwa kwemupendero muArangoDB. Nenzira, magwaro ekuunganidza emupendero zvakare magwaro, saka mipendero muArangoDB inogonawo kuita senge node.

Data yekutanga

Ngatitorei muunganidzwa persons, ane magwaro anoita seizvi:

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

Ngakuvewo nekuunganidza cafes:

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

Zvadaro kuunganidza likes ingaratidzika seichi:

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

Mibvunzo nemigumisiro

Mubvunzo wechimiro chegirafu mumutauro weAQL unoshandiswa muArangoDB, uchidzora mune inoverengwa nevanhu ruzivo rwekuti ndiani anoda cafe, inoita seizvi:

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

Muchimiro chehukama, patiri "computing" hukama pane kuzvichengeta, mubvunzo uyu unogona kunyorwazve seizvi (nenzira, pasina muunganidzwa. likes aigona kuita pasina):

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 }

Mhedzisiro mumakesi ese ari maviri ichave yakafanana:

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

Mimwe mibvunzo nemhinduro

Kana iyo mhedzisiro fomati iri pamusoro ichiita seyakajairika kune yehukama DBMS pane yegwaro DBMS, unogona kuedza uyu mubvunzo (kana unogona kushandisa COLLECT):

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

Mhedzisiro ichaita seizvi:

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

OrientDB

Hwaro hwekuita girafu modhi pamusoro pegwaro modhi muOrientDB ndeye mukana magwaro ezvinyorwa, kuwedzera kune akawanda kana mashoma akajairwa scalar kukosha, anewo kukosha kwemhando dzakadai LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Makoshero emhando idzi zvinongedzo kana kuunganidzwa kwezvinongedzo kune system identifiers magwaro.

Chiziviso chegwaro chakapihwa nehurongwa chine "chirevo chemuviri", chinoratidza nzvimbo yerekodhi mudhatabhesi, uye chinotaridzika seizvi: @rid : #3:16. Nekudaro, iwo makoshero ezvivakwa zvereferenzi anonongedzera (semumuenzaniso wegirafu) kwete mamiriro ekusarudza (semumuenzaniso wehukama).

Kufanana neArangoDB, mipendero muOrientDB inomiririrwa semagwaro akasiyana (kunyangwe kana mupendero usina zvivakwa zvawo, unogona kugadzirwa. lightweight, uye hazvienderane negwaro rakasiyana).

Data yekutanga

Muchimiro chiri pedyo ne dump format OrientDB dhatabhesi, iyo data kubva kumuenzaniso wekare weArangoDB yaizotaridzika seizvi:

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

Sezvatinoona, vertices zvakare inochengeta ruzivo nezve inopinda uye inobuda mipendero. At kushandisa Iyo Gwaro API inofanirwa kutarisa kutendeseka kwayo pachayo, uye Graph API inotora basa iri. Asi ngationei kuti kuwana kuOrientDB kunoratidzika sei mumitauro "yakachena" yemubvunzo iyo isina kubatanidzwa mumitauro yekuronga.

Mibvunzo nemigumisiro

Mubvunzo wakafanana nechinangwa kumubvunzo kubva kumuenzaniso weArangoDB muOrientDB inoita seizvi:

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

Mhedzisiro yacho ichawanikwa mune inotevera fomu:

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

Kana iyo mhedzisiro fomati zvakare ichiita seyakanyanya "hukama", unofanirwa kubvisa mutsara ne UNWIND():

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

Mutauro wemubvunzo weOrientDB unogona kutsanangurwa seSQL ine Gremlin-kunge inoisa. Mushanduro 2.2, fomu rekukumbira seCypher rakaonekwa, 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

Mhedzisiro yefomati ichave yakafanana neyakakumbira yapfuura. Funga nezve izvo zvinofanirwa kubviswa kuti zviwedzere "hukama", semubvunzo wekutanga.

Azure CosmosDB

Kusvika padiki, zvakataurwa pamusoro pamusoro peArangoDB uye OrientDB zvinoshanda kuAzure CosmosDB. CosmosDB inopa anotevera data APIs: SQL, MongoDB, Gremlin uye Cassandra.

SQL API uye MongoDB API inoshandiswa kuwana data mugwaro modhi. Gremlin API uye Cassandra API - yekuwana data mumagirafu uye makoramu mafomati, zvichiteerana. Dhata mumamodeli ese anochengetwa muCosmosDB yemukati modhi fomati: ARS ("atom-record-sequence"), iri padyo negwaro rimwe.

MaDBMS akawanda-modhi ndiyo hwaro hwemazuva ano ruzivo masisitimu?

Asi iyo data data yakasarudzwa nemushandisi uye API inoshandiswa inogadziriswa panguva yekugadzira account mubasa. Izvo hazvigoneke kuwana data yakatakurwa mune imwe modhi mune imwe modhi fomati, sezvinoratidzwa nechimwe chinhu chakadai:

MaDBMS akawanda-modhi ndiyo hwaro hwemazuva ano ruzivo masisitimu?

Nekudaro, akawanda-modhi muAzure CosmosDB nhasi ingori kugona kushandisa akati wandei dhatabhesi anotsigira akasiyana mamodheru kubva kune mumwe mugadziri, izvo zvisingagadzirise matambudziko ese eakawanda-siyana ekuchengetedza.

Multi-model DBMS yakavakirwa pane girafu modhi?

Chinocherechedzwa inyaya yekuti hapana akawanda-modhi maDBMS pamusika asi ayo akavakirwa pamuenzaniso wegirafu (kunze kwerutsigiro rwemhando dzakasiyana-siyana dzemhando mbiri dzemagirafu panguva imwe chete: RDF neLPG; ona izvi mu. kudhindwa kwekare) Matambudziko makuru anokonzerwa nekushandiswa kwemuenzaniso wegwaro pamusoro pemufananidzo wegirafu, pane yehukama.

Mubvunzo wekuti ungashandisa sei muenzaniso wehukama pamusoro peiyo girafu muenzaniso wakatariswa kunyange panguva yekuumbwa kwekupedzisira. Sei akataurasemuenzaniso David McGovern:

Hapana chinhu chinowanikwa munzira yegirafu chinodzivirira kugadzira dhizaini (semuenzaniso, nekukodzera indexing) pane dhatabhesi regirafu rinogonesa maonero ehukama ne (1) kudzoreredza matuples kubva kune akajairwa kiyi kukosha mapeya uye (2) mapoka e tuples nemhando yehukama.

Paunenge uchigadzira dhizaini modhi pamusoro peiyo girafu modhi, unofanirwa kuyeuka, semuenzaniso, zvinotevera:

  • Zvinhu zveJSON array zvinoonekwa zvakarongerwa, asi izvo zvinobuda kubva kumucheto wemupendero wegirafu hazvisi;
  • Dhata mugwaro modhi rinowanzoitwa denormalised; hausati wada kuchengeta akati wandei makopi egwaro rakadzimirirwa rimwe chete, uye subdocuments kazhinji haina zviziviso;
  • Nekune rumwe rutivi, pfungwa dzegwaro DBMSs ndedzekuti magwaro akagadzirira-akagadzirwa "aggregates" ayo asingade kuvakwa patsva nguva imwe neimwe. Zvinotarisirwa kupa mufananidzo wegirafu nekukwanisa kukurumidza kuwana subgraph inoenderana negwaro rakapedzwa.

Kushambadza zvishoma

Munyori wechinyorwa ane hukama nekuvandudzwa kweNitrosBase DBMS, iyo yemukati modhi ine girafu, uye ekunze mamodheru - ehukama uye gwaro - ndiwo anomiririra. Mamodheru ese akaenzana: rinenge chero data rinowanikwa mune chero ipi zvayo uchishandisa mutauro wemubvunzo wakasarudzika kwairi. Uyezve, mune chero maonero, iyo data inogona kuchinjwa. Shanduko dzicharatidzwa mune yemukati modhi uye, zvinoenderana, mune mamwe maonero.

Ini ndinovimba ndichatsanangura kuti sei modhi yekufananidza inotaridzika muNitrosBase mune chimwe chezvinyorwa zvinotevera.

mhedziso

Ndinovimba kuti maratidziro akazara ezvinonzi multi-modelling ave akawedzera kana kushoma kujeka kune muverengi. Multi-model DBMSs akasiyana zvakanyanya, uye "multi-model rutsigiro" inogona kutaridzika zvakasiyana. Kuti unzwisise izvo zvinonzi "multi-model" mune imwe neimwe nyaya, zvakakosha kupindura mibvunzo inotevera:

  1. Tiri kutaura nezve kutsigira echinyakare modhi kana imwe mhando ye "hybrid" modhi?
  2. Mienzaniso "yakaenzana", kana kuti imwe yacho inyaya yevamwe?
  3. Mienzaniso "haina hanya" kune mumwe nemumwe here? Ko data yakanyorwa mune imwe modhi inogona kuverengerwa mune imwe kana kutonyorwazve?

Ndinofunga kuti mubvunzo pamusoro pekukosha kwe-multi-model DBMS inogona kutopindurwa zvakanaka, asi mubvunzo unonakidza ndewekuti ndeapi marudzi avo achanyanya kudiwa munguva yemberi iri pedyo. Zvinoita sekuti akawanda-modhi maDBMS anotsigira echinyakare mamodheru, kunyanya hukama, achave ari mukudiwa kukuru; Kuzivikanwa kwema-multi-model DBMSs, kupa mhando itsva dzinobatanidza zvakanakira zvakasiyana-siyana zvechinyakare, inyaya yeramangwana riri kure.

Vashandisi vakanyoresa chete ndivo vanogona kutora chikamu muongororo. Nyorera mu, Munogamuchirwa.

Iwe unoshandisa akawanda-modhi DBMS?

  • Isu hatizvishandise, tinochengeta zvese mune imwe DBMS uye mune imwe modhi

  • Isu tinoshandisa akawanda-modhi maitiro echinyakare DBMSs

  • Isu tinodzidzira polyglot kushingirira

  • Isu tinoshandisa mitsva yakawanda-modhi DBMS (Arango, Orient, CosmosDB)

19 vashandisi vakavhota. 4 vashandisi vakaramba.

Source: www.habr.com

Voeg