Kodi ma DBMS amitundu yambiri ndiwo maziko a machitidwe amakono azidziwitso?

Njira zamakono zodziwitsira ndizovuta kwambiri. Osachepera pa zonse, zovuta zawo ndi chifukwa cha zovuta za deta kukonzedwa mwa iwo. Kuvuta kwa deta nthawi zambiri kumakhala mumitundu yosiyanasiyana ya data yomwe imagwiritsidwa ntchito. Kotero, mwachitsanzo, pamene deta ikukhala "yaikulu", chimodzi mwa zovuta zomwe zimakhala zovuta sizongowonjezera ("volume"), komanso zosiyanasiyana ("zosiyanasiyana").

Ngati simukupezabe cholakwika pakulingalira, pitilizani kuwerenga.

Kodi ma DBMS amitundu yambiri ndiwo maziko a machitidwe amakono azidziwitso?


Zamkatimu

Kulimbikira kwa Polyglot
Multi-model
DBMS yamitundu yambiri yotengera mtundu waubale
     Document model mu MS SQL Server
     Chithunzi chazithunzi mu MS SQL Server
Ma DBMS amitundu yambiri kutengera mtundu wa zolemba
     Chitsanzo chaubale mu MarkLogic
     Chitsanzo cha graph mu MarkLogic
Multi-model DBMS "popanda chitsanzo chachikulu"
     ArangoDB
     OrientDB
     Azure CosmosDB
DBMS yamitundu yambiri yotengera mtundu wa graph?
Pomaliza
Sewero

Kulimbikira kwa Polyglot

Zomwe zili pamwambazi zimatsogolera ku mfundo yakuti nthawi zina ngakhale mkati mwa dongosolo limodzi m'pofunika kugwiritsa ntchito ma DBMS angapo kuti asunge deta ndi kuthetsa mavuto osiyanasiyana powakonza, omwe amathandizira chitsanzo chake cha deta. Ndi dzanja lopepuka la M. Fowler, wolemba angapo mabuku otchuka ndi mmodzi wa olemba anzawo Agile Manifesto, izi zimatchedwa kusungirako kosiyanasiyana ("kulimbikira kwa polyglot").

Fowler alinso ndi chitsanzo chotsatira chokonzekera kusungirako deta muzochitika zonse komanso zolemetsa kwambiri pamalonda a e-commerce.

Kodi ma DBMS amitundu yambiri ndiwo maziko a machitidwe amakono azidziwitso?

Chitsanzo ichi, ndithudi, ndichokokomeza, koma malingaliro ena osankha DBMS imodzi kapena ina pazifukwa zofanana angapezeke, mwachitsanzo, apa.

N’zoonekeratu kuti kukhala wantchito m’malo osungira nyama zoterezi n’kovuta.

  • Kuchuluka kwa code yomwe imapanga kusungirako deta imakula molingana ndi chiwerengero cha ma DBMS omwe amagwiritsidwa ntchito; kuchuluka kwa ma code synchronizing data ndikwabwino ngati sikufanana ndi sikweya ya nambala iyi.
  • Monga kuchuluka kwa kuchuluka kwa ma DBMS omwe amagwiritsidwa ntchito, ndalama zoperekera mabizinesi (scalability, kulolerana kolakwa, kupezeka kwakukulu) za DBMS iliyonse zomwe zimagwiritsidwa ntchito zikuwonjezeka.
  • Ndikosatheka kuwonetsetsa mawonekedwe abizinesi a subsystem yonse yosungira - makamaka transaction.

Kuchokera pakuwona kwa wotsogolera zoo, zonse zikuwoneka motere:

  • Kuwonjezeka kangapo kwa mtengo wa zilolezo ndi chithandizo chaukadaulo kuchokera kwa wopanga DBMS.
  • Kuchulukirachulukira komanso kuchuluka kwa nthawi yomalizira.
  • Kuwonongeka kwachuma mwachindunji kapena zilango chifukwa cha kusagwirizana kwa data.

Pali chiwonjezeko chachikulu pamitengo yonse ya umwini (TCO). Kodi pali njira iliyonse yotulukira mumkhalidwe wa "zosungirako zingapo"?

Multi-model

Mawu akuti "multivariate storage" adayamba kugwiritsidwa ntchito mu 2011. Kuzindikira za zovuta za njirayo komanso kufunafuna yankho kunatenga zaka zingapo, ndipo pofika 2015, kudzera mkamwa mwa akatswiri a Gartner, yankho linapangidwa:

Zikuwoneka kuti nthawi ino akatswiri a Gartner anali olondola ndi zomwe amalosera. Ngati mupita patsamba ndi mlingo waukulu DBMS pa DB-Injini, mutha kuwona iziоAtsogoleri ake ambiri amadziyika okha ngati ma DBMS amitundu yambiri. Zomwezo zitha kuwoneka patsamba ndi mavoti achinsinsi.

Gome ili m'munsiyi likuwonetsa DBMS - atsogoleri muzowerengera zapadera, zomwe zimati ndizojambula zambiri. Pa DBMS iliyonse, chitsanzo choyambirira chothandizira (chomwe chinali chokha) komanso pamodzi ndi zitsanzo zomwe zikuthandizidwa panopa zikuwonetsedwa. Zinanso zolembedwa ndi ma DBMS omwe amadziyika okha ngati "poyamba amitundu yambiri" ndipo, malinga ndi omwe adalenga, alibe chitsanzo choyambirira chobadwa nacho.

DBMS Chitsanzo choyamba Zitsanzo zowonjezera
Oracle Zachibale graph, document
MS SQL Zachibale graph, document
PostgreSQL Zachibale Graph*, chikalata
Chithunzi cha MarkLogic Zolemba Graph, ubale
MongoDB Zolemba Mtengo wofunikira, graph*
Chiwerengero Mzere waukulu Zolemba, graph
Redis Mfungulo-mtengo Zolemba, graph*
ArangoDB - graph, document
OrientDB - Graph, chikalata, ubale
Azure CosmosDB - Graph, chikalata, ubale

Zolemba patebulo

Nyenyezi zomwe zili patebulo zimayika ziganizo zomwe zimafuna kusungitsa malo:

  • PostgreSQL DBMS sichigwirizana ndi mtundu wa data wa graph, koma izi zimathandizira potengera izo, monga AgensGraph.
  • Mogwirizana ndi MongoDB, ndikolondola kunena za kukhalapo kwa ogwiritsa ntchito ma graph muchilankhulo chofunsa ($lookup, $graphLookup) kusiyana ndi kuthandizira chitsanzo cha graph, ngakhale, ndithudi, kuyambika kwawo kunafuna kukhathamiritsa pamlingo wosungirako thupi kuti athandizire chitsanzo cha graph.
  • Pokhudzana ndi Redis, tikutanthauza kukulitsa RedisGraph.

Kenako, pamaphunziro aliwonse, tiwonetsa momwe kuthandizira kwamitundu ingapo kumagwiritsidwira ntchito mu DBMS kuchokera m'kalasili. Tidzawona zitsanzo zaubale, zolemba ndi ma graph kukhala zofunika kwambiri ndikugwiritsa ntchito zitsanzo za ma DBMS enieni kuti tiwonetse momwe "osowa" akugwiritsidwira ntchito.

DBMS yamitundu yambiri yotengera mtundu waubale

Ma DBMS otsogola pakali pano ndi achibale; Zoneneratu za Gartner sizingaganizidwe kuti ndizowona ngati ma RDBMS sanawonetse kusuntha kolowera kumitundu ingapo. Ndipo amawonetsa. Tsopano lingaliro lakuti DBMS yamitundu yambiri ili ngati mpeni wa Swiss, womwe sungathe kuchita chilichonse bwino, ukhoza kulunjika kwa Larry Ellison.

Wolembayo, komabe, amakonda kukhazikitsidwa kwamitundu ingapo mu Microsoft SQL Server, pa chitsanzo chomwe thandizo la RDBMS la zolemba ndi ma graph zidzafotokozedwa.

Document model mu MS SQL Server

Pakhala pali zolemba ziwiri zabwino kwambiri za Habré za momwe MS SQL Server imagwiritsidwira ntchito pothandizira chikalatacho; Ndingobwereza mwachidule ndi ndemanga:

Njira yothandizira mtundu wa chikalata mu MS SQL Server ndiyofanana ndi ma DBMS apaubale: Zolemba za JSON zikuyenera kusungidwa m'magawo wamba. Thandizo lachitsanzo cha chikalatachi ndikupereka othandizira apadera kuti afotokozere JSON iyi:

Mtsutso wachiwiri wa onse ogwira ntchito ndi mawu a JSONPath-ngati syntax.

Mwachidule, tinganene kuti zolemba zosungidwa motere si "magulu oyamba" mu DBMS yaubale, mosiyana ndi ma tuples. Makamaka, mu MS SQL Server pakali pano palibe ma index pamasamba a JSON, zomwe zimapangitsa kuti zikhale zovuta kujowina matebulo pogwiritsa ntchito zikhalidwe za magawowa komanso kusankha zikalata pogwiritsa ntchito izi. Komabe, ndizotheka kupanga gawo lowerengeka la gawo loterolo ndi index yake.

Kuphatikiza apo, MS SQL Server imapereka kuthekera kopanga chikalata cha JSON mosavuta kuchokera pamatebulo pogwiritsa ntchito wogwiritsa ntchito. FOR JSON PATH - kuthekera, mwanjira inayake, motsutsana ndi yapitayi, kusungirako wamba. Zikuwonekeratu kuti ngakhale RDBMS ili yofulumira bwanji, njirayi imatsutsana ndi malingaliro a zolemba za DBMS, zomwe zimasunga mayankho okonzeka ku mafunso otchuka, ndipo zimatha kuthetsa mavuto omasuka, koma osati mofulumira.

Pomaliza, MS SQL Server imakupatsani mwayi wothana ndi vuto lina lopanga zolemba: mutha kuwola JSON kukhala matebulo pogwiritsa ntchito OPENJSON. Ngati chikalatacho sichili chathyathyathya, muyenera kugwiritsa ntchito CROSS APPLY.

Chithunzi chazithunzi mu MS SQL Server

Thandizo lachitsanzo cha graph (LPG) likugwiritsidwanso ntchito mu Microsoft SQL Server zodziwikiratu: Akufuna kugwiritsa ntchito matebulo apadera kusunga ma node ndikusunga m'mphepete mwa ma graph. Matebulo oterowo amapangidwa pogwiritsa ntchito mawu CREATE TABLE AS NODE и CREATE TABLE AS EDGE motero.

Matebulo amtundu woyamba ndi ofanana ndi matebulo wamba osungiramo zolemba, kusiyana kokha kwakunja ndikuti tebulo lili ndi gawo ladongosolo. $node_id - chizindikiritso chapadera cha graph node mkati mwa database.

Mofananamo, matebulo a mtundu wachiwiri ali ndi minda ya machitidwe $from_id и $to_id, zolembedwa m’matebulo oterowo zimamveketsa bwino kugwirizana pakati pa mfundo. Gome lapadera limagwiritsidwa ntchito kusunga maubwenzi amtundu uliwonse.

Kodi ma DBMS amitundu yambiri ndiwo maziko a machitidwe amakono azidziwitso? Tiyeni tifotokoze zimenezi ndi chitsanzo. Lolani deta ya graph ikhale ndi masanjidwe ngati omwe akuwonetsedwa pachithunzichi. Kenako kuti mupange mawonekedwe ofananirako mu nkhokwe muyenera kuyendetsa mafunso otsatirawa a 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);

Chidziwitso chachikulu cha matebulo otere ndikuti pamafunso otsutsana nawo ndizotheka kugwiritsa ntchito ma graph ndi Cypher-like syntax (komabe, "*"ndi zina sizikuthandizidwabe). Kutengera muyeso wa magwiridwe antchito, titha kuganiziridwanso kuti momwe deta imasungidwira m'matebulowa ndi yosiyana ndi momwe deta imasungidwira m'matebulo okhazikika ndipo imakonzedwa kuti ikwaniritse mafunso a ma graph.

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

Komanso, zimakhala zovuta kuti musagwiritse ntchito ma graph awa pogwira ntchito ndi matebulo oterowo, chifukwa mu mafunso wamba a SQL kuti athetse mavuto omwewo padzakhala kofunikira kuyesetsa kuti mupeze zozindikiritsa za "graph" za system.$node_id, $from_id, $to_id; Pazifukwa zomwezo, mafunso oyika deta sakuwonetsedwa pano chifukwa ndi ovuta mosayenera).

Kufotokozera mwachidule za kukhazikitsidwa kwa zolemba ndi ma graph mu MS SQL Server, ndingazindikire kuti kukhazikitsidwa kotere kwa chitsanzo chimodzi pamwamba pa chimzake sichikuwoneka bwino, makamaka kuchokera pamalingaliro a chinenero. M'pofunika kuwonjezera chinenero chimodzi ndi china, zilankhulo si kwathunthu "orthogonal", malamulo ngakhale akhoza kukhala chodabwitsa kwambiri.

Ma DBMS amitundu yambiri kutengera mtundu wa zolemba

M'chigawo chino, ndikufuna kufotokozera kukhazikitsidwa kwa ma DBMS amitundu yambiri pogwiritsa ntchito chitsanzo cha omwe sanatchuke kwambiri, MongoDB (monga tanenera, ili ndi ogwiritsira ntchito ma graph okha). $lookup и $graphLookup, osagwira ntchito pazosonkhanitsira zogawidwa), koma pogwiritsa ntchito chitsanzo cha DBMS yokhwima komanso "bizinesi" Chithunzi cha MarkLogic.

Chifukwa chake, lolani zosonkhanitsazo zikhale ndi zolemba za XML zamtundu wotsatirawu (MarkLogic imakulolaninso kusunga zikalata za JSON):

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

Chitsanzo chaubale mu MarkLogic

Kuwona kwaubale kwa zolemba zolembedwa zitha kupangidwa pogwiritsa ntchito template yowonetsera (Zomwe zili mu element value mu chitsanzo pansipa pakhoza kukhala XPath yokhazikika):

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

Mutha kuthana ndi mawonekedwe opangidwa ndi funso la SQL (mwachitsanzo, kudzera pa ODBC):

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

Tsoka ilo, mawonedwe achibale omwe amapangidwa ndi template yowonetsera amawerengedwa-okha. Mukakonza pempho lake, MarkLogic ayesa kugwiritsa ntchito zolemba zolemba. M'mbuyomu, MarkLogic anali ndi malingaliro ochepa achibale, kwathunthu zochokera index ndi zolembedwa, koma tsopano zikuonedwa ngati zosafunika.

Chitsanzo cha graph mu MarkLogic

Ndi chithandizo cha chitsanzo cha graph (RDF), chirichonse chiri chofanana. Kachiwiri ndi chithandizo template yowonetsera mutha kupanga choyimira cha RDF chazolemba kuchokera pachitsanzo pamwambapa:

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

Mutha kuthana ndi graph ya RDF ndi funso la SPARQL:

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

Mosiyana ndi wachibale, MarkLogic imathandizira mtundu wa graph m'njira zina ziwiri:

  1. DBMS ikhoza kukhala yosungira kwathunthu ya data ya RDF (matatu m'menemo adzatchedwa anakwanitsa mosiyana ndi zomwe tafotokozazi yotulutsidwa).
  2. RDF mu serialization yapadera imatha kuyikidwa muzolemba za XML kapena JSON (ndipo atatu adzatchedwa osayang'aniridwa). Izi mwina ndi m'malo mwa njira idref ndi ena.

Lingaliro labwino la momwe zinthu "kwenikweni" zimagwirira ntchito ku MarkLogic zimaperekedwa ndi Optical API, m'lingaliro limeneli, ndilotsika, ngakhale kuti cholinga chake ndi chosiyana - kuyesa kufotokoza kuchokera ku chitsanzo cha deta chomwe chimagwiritsidwa ntchito, kuonetsetsa kuti ntchito yogwirizana ndi deta mumitundu yosiyanasiyana, kusinthana, ndi zina zotero.

Multi-model DBMS "popanda chitsanzo chachikulu"

Palinso ma DBMS pamsika omwe amadziyika okha ngati amitundu yambiri, opanda mtundu uliwonse wobadwa nawo. Izi zikuphatikizapo ArangoDB, OrientDB (kuyambira 2018 kampani yachitukuko ndi ya SAP) ndi CosmosDB (ntchito ngati gawo la nsanja yamtambo ya Microsoft Azure).

M'malo mwake, pali mitundu "yapakati" ku ArangoDB ndi OrientDB. Muzochitika zonsezi, awa ndi ma data awo, omwe ndi ma generalizations a chikalata chimodzi. Ma generalizations makamaka kuti athandizire kuthekera kochita mafunso a graph ndi maubale.

Mitundu iyi ndi yokhayo yomwe ingagwiritsidwe ntchito mu DBMS yotchulidwa; zilankhulo zawo zamafunso zidapangidwa kuti zizigwira nawo ntchito. Zoonadi, zitsanzo zoterezi ndi ma DBMS akulonjeza, koma kusowa kwa kugwirizana ndi zitsanzo ndi zilankhulo zomwe zimapangidwira kumapangitsa kuti zikhale zosatheka kugwiritsa ntchito ma DBMS mu machitidwe a cholowa-kusintha ma DBMS omwe amagwiritsidwa ntchito kale.

Panali kale nkhani yodabwitsa yokhudza ArangoDB ndi OrientDB pa Habré: LOWANI muzolemba za NoSQL.

ArangoDB

ArangoDB imati imathandizira mtundu wa data wa graph.

Ma node a graph mu ArangoDB ndi zolemba wamba, ndipo m'mphepete mwake ndi zolemba zamtundu wapadera zomwe, pamodzi ndi magawo anthawi zonse, ali ndi (_key, _id, _rev) magawo a dongosolo _from и _to. Zolemba m'makalata a DBMS mwachizolowezi zimaphatikizidwa kukhala zosonkhanitsira. Zotolera zolemba zoyimira m'mphepete zimatchedwa zotolera m'mphepete mwa ArangoDB. Mwa njira, zikalata zosonkhanitsira m'mphepete ndizolemba, kotero m'mphepete mwa ArangoDB amathanso kukhala ngati ma node.

Zambiri

Tiyeni tikhale ndi chopereka persons, omwe zolemba zawo zimawoneka motere:

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

Pakhalenso zosonkhanitsira cafes:

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

Kenako chopereka likes zitha kuwoneka motere:

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

Mafunso ndi zotsatira

Funso lofanana ndi ma graph muchilankhulo cha AQL chomwe chimagwiritsidwa ntchito ku ArangoDB, kubweza zomwe anthu angawerenge za yemwe amakonda cafe, zikuwoneka motere:

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

Mwanjira yachibale, pomwe "tikuwerengera" maubale m'malo mowasunga, funsoli litha kulembedwanso motere (mwa njira, popanda kusonkhanitsa. likes angachite popanda):

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 }

Zotsatira muzochitika zonsezi zidzakhala zofanana:

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

Mafunso ambiri ndi zotsatira

Ngati mawonekedwe omwe ali pamwambawa akuwoneka ngati ofanana kwambiri ndi DBMS yachibale kuposa chikalata cha DBMS, mutha kuyesa funso ili (kapena mutha kugwiritsa ntchito COLLECT):

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

Chotsatira chidzawoneka motere:

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

OrientDB

Maziko ogwiritsira ntchito chitsanzo cha graph pamwamba pa chikalata cha OrientDB ndi mwayi minda ya zikalata, kuphatikiza pamitengo yocheperako kapena yocheperako, ilinso ndi mitundu yamitundu monga LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Ubwino wamitundu iyi ndi maulalo kapena zosonkhanitsira zolumikizana nazo zozindikiritsa dongosolo zikalata.

Chizindikiritso cha chikalata chomwe chaperekedwa ndi dongosololi chimakhala ndi "tanthauzo lakuthupi", kuwonetsa malo a mbiriyo mu database, ndipo chikuwoneka motere: @rid : #3:16. Chifukwa chake, mayendedwe azinthu zolozera ndizolozera kwenikweni (monga momwe zilili mu graph) m'malo mwazosankha (monga momwe zilili pachibale).

Monga ArangoDB, m'mphepete mwa OrientDB amaimiridwa ngati zolemba zosiyana (ngakhale ngati m'mphepete mulibe katundu wake, ukhoza kupangidwa. opepuka, ndipo sichidzafanana ndi chikalata chosiyana).

Zambiri

Mumtundu wapafupi ndi mtundu wakuda OrientDB database, zomwe zachokera ku chitsanzo cham'mbuyo cha ArangoDB zitha kuwoneka motere:

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

Monga tikuonera, ma vertices amasunganso zambiri za m'mphepete zomwe zikubwera komanso zotuluka. Pa kugwiritsa Document API iyenera kuyang'anira kukhulupirika kwawokha, ndipo Graph API imagwira ntchitoyi. Koma tiyeni tiwone momwe mwayi wofikira ku OrientDB umawonekera mu zilankhulo "zoyera" zomwe sizinaphatikizidwe m'zilankhulo zamapulogalamu.

Mafunso ndi zotsatira

Funso lofanana ndi cholinga cha funso lachitsanzo la ArangoDB ku OrientDB likuwoneka motere:

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

Chotsatira chidzapezedwa mu fomu iyi:

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

Ngati zotsatira zake zikuwonekanso "zachibale", muyenera kuchotsa mzerewo ndi UNWIND():

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

Chilankhulo cha mafunso cha OrientDB chitha kufotokozedwa ngati SQL yokhala ndi zoyika ngati za Gremlin. Mu mtundu 2.2, fomu yofunsira ngati Cypher idawonekera, 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

Zotsatira zake zidzakhala zofanana ndi zomwe zapempha kale. Ganizirani zomwe ziyenera kuchotsedwa kuti zikhale "zachibale", monga funso loyamba.

Azure CosmosDB

Pamlingo wocheperako, zomwe zanenedwa pamwambapa za ArangoDB ndi OrientDB zikugwira ntchito ku Azure CosmosDB. CosmosDB imapereka ma API otsatirawa a data: SQL, MongoDB, Gremlin ndi Cassandra.

SQL API ndi MongoDB API amagwiritsidwa ntchito kupeza deta muzolemba zachitsanzo. Gremlin API ndi Cassandra API - kuti mupeze data mumitundu yama graph ndi magawo, motsatana. Deta mumitundu yonse imasungidwa mu mtundu wamkati wa CosmosDB: ana asukulu ("atom-record-sequence"), yomwe ilinso pafupi ndi chikalata chimodzi.

Kodi ma DBMS amitundu yambiri ndiwo maziko a machitidwe amakono azidziwitso?

Koma chitsanzo cha deta chomwe chimasankhidwa ndi wogwiritsa ntchito ndi API chomwe chimagwiritsidwa ntchito chimakhazikitsidwa panthawi yopanga akaunti muutumiki. Sizingatheke kupeza deta yonyamulidwa mumtundu umodzi mumtundu wina, monga momwe zikuwonetsera ndi izi:

Kodi ma DBMS amitundu yambiri ndiwo maziko a machitidwe amakono azidziwitso?

Chifukwa chake, mitundu yambiri ku Azure CosmosDB masiku ano ndikutha kugwiritsa ntchito ma database angapo othandizira mitundu yosiyanasiyana kuchokera kwa wopanga m'modzi, zomwe sizimathetsa mavuto onse osungiramo zinthu zambiri.

DBMS yamitundu yambiri yotengera mtundu wa graph?

Chochititsa chidwi n'chakuti palibe ma DBMS amitundu yambiri pamsika komabe omwe amachokera ku chitsanzo cha graph (kupatulapo chithandizo chamitundu yambiri chamitundu iwiri nthawi imodzi: RDF ndi LPG; onani izi mu chofalitsidwa cham'mbuyo). Zovuta zazikuluzikulu zimayambitsidwa ndi kukhazikitsidwa kwa chitsanzo cha zolemba pamwamba pa chithunzi cha graph, osati chiyanjano.

Funso la momwe angagwiritsire ntchito chitsanzo chaubale pamwamba pa chithunzi cha graph chinaganiziridwa ngakhale panthawi yopanga chomaliza. Bwanji Adateromwachitsanzo David McGovern:

Palibe chomwe chili munjira ya graph chomwe chimalepheretsa kupanga wosanjikiza (mwachitsanzo, polemba indexing) pa nkhokwe ya ma graph yomwe imathandizira kuwona ubale ndi (1) kubwezeretsanso ma tuples kuchokera pamagulu awiri amtengo wapatali komanso (2) gulu la tuples ndi mtundu wa ubale.

Mukamagwiritsa ntchito chikalata pamwamba pa chithunzi cha graph, muyenera kukumbukira, mwachitsanzo, zotsatirazi:

  • Zinthu za gulu la JSON zimaganiziridwa kuti zidakonzedwa, koma zomwe zimachokera kumapeto kwa graph si;
  • Deta mumtundu wa chikalata nthawi zambiri imasinthidwa; simukufunabe kusunga makope angapo a chikalata chophatikizidwa, ndipo ma subdocuments nthawi zambiri sakhala ndi zizindikiritso;
  • Kumbali inayi, malingaliro a chikalata cha DBMS ndi chakuti zolemba ndizokonzekera "zophatikiza" zomwe siziyenera kumangidwa mwatsopano nthawi iliyonse. Zimafunika kupereka chitsanzo cha graph kuti chizitha kupeza mwamsanga subgraph yofanana ndi chikalata chomalizidwa.

Kutsatsa pang'ono

Mlembi wa nkhaniyi akugwirizana ndi chitukuko cha NitrosBase DBMS, chitsanzo chamkati chomwe chiri graph, ndi zitsanzo zakunja - zachibale ndi zolemba - ndizowonetseratu. Zitsanzo zonse ndi zofanana: pafupifupi deta iliyonse imapezeka mwa aliyense wa iwo pogwiritsa ntchito chinenero chodziwika bwino. Komanso, mwanjira iliyonse, deta ikhoza kusinthidwa. Zosintha zidzawonetsedwa m'chitsanzo chamkati ndipo, molingana ndi malingaliro ena.

Ndikhulupirira ndikufotokozera momwe kufananitsa kwachitsanzo kumawonekera ku NitrosBase mu imodzi mwazolemba zotsatirazi.

Pomaliza

Ndikuyembekeza kuti zolemba zambiri zomwe zimatchedwa multi-model zakhala zomveka bwino kwa owerenga. Ma DBMS amitundu yambiri ndi osiyana kwambiri, ndipo "thandizo lamitundu yambiri" limatha kuwoneka mosiyana. Kuti mumvetse zomwe zimatchedwa "multi-model" pazochitika zilizonse, ndizothandiza kuyankha mafunso otsatirawa:

  1. Kodi tikukamba za kuthandizira zitsanzo zachikhalidwe kapena mtundu wina wa "hybrid"?
  2. Kodi zitsanzozo ndi "zofanana", kapena kodi imodzi mwa izo ndi nkhani ya ena?
  3. Kodi zitsanzozo ndi "zosasamala" kwa wina ndi mzake? Kodi deta yolembedwa mumtundu umodzi ingawerengedwe mumtundu wina kapena kulembedwanso?

Ndikuganiza kuti funso lokhudza kufunika kwa mitundu yambiri ya DBMS likhoza kuyankhidwa bwino, koma funso lochititsa chidwi ndiloti ndi mitundu iti yomwe idzafunikire posachedwapa. Zikuwoneka kuti ma DBMS amitundu yambiri omwe amathandizira zitsanzo zachikhalidwe, makamaka achibale, adzakhala ofunikira kwambiri; Kutchuka kwa ma DBMS amitundu yambiri, kupereka zitsanzo zatsopano zomwe zimagwirizanitsa ubwino wa miyambo yosiyanasiyana, ndi nkhani yamtsogolo kwambiri.

Ogwiritsa ntchito olembetsedwa okha ndi omwe angatenge nawo gawo pa kafukufukuyu. Lowani muakauntichonde.

Kodi mumagwiritsa ntchito ma DBMS amitundu yambiri?

  • Sitigwiritsa ntchito, timasunga zonse mu DBMS imodzi ndi chitsanzo chimodzi

  • Timagwiritsa ntchito mitundu ingapo yama DBMS achikhalidwe

  • Timachita polyglot kulimbikira

  • Timagwiritsa ntchito mitundu yambiri ya DBMS (Arango, Orient, CosmosDB)

Ogwiritsa ntchito 19 adavota. Ogwiritsa 4 adakana.

Source: www.habr.com

Kuwonjezera ndemanga