O DBMS e tele-faʻataʻitaʻiga o le faʻavae o faiga faʻamatalaga faʻaonaponei?

O faiga fa'amatalaga fa'aonaponei e fai si lavelave. E le itiiti ifo i mea uma, o latou lavelave e mafua mai i le lavelave o faʻamaumauga o loʻo faʻagasolo i totonu. O le lavelave o faʻamaumauga e masani ona taoto i le tele o faʻataʻitaʻiga faʻamatalaga faʻaaogaina. O lea la, mo se faʻataʻitaʻiga, pe a oʻo ina "tele" faʻamaumauga, o se tasi o faʻafitauli faʻafitauli e le gata o lona voluma ("volume"), ae faʻapea foʻi lona ituaiga ("eseesega").

Afai e te leʻi mauaina se faʻaletonu i le faʻamatalaga, ona faitau lea.

O DBMS e tele-faʻataʻitaʻiga o le faʻavae o faiga faʻamatalaga faʻaonaponei?


Mataupu

Fa'atosina o le Polyglot
Fa'ata'ita'iga tele
Fa'ata'ita'iga tele DBMS fa'avae i luga o le fa'ata'ita'iga feso'ota'iga
     Fa'ata'ita'iga pepa ile MS SQL Server
     Fa'ata'ita'iga kalafi ile MS SQL Server
Fa'ata'ita'iga tele DBMS fa'avae ile fa'ata'ita'iga pepa
     Faʻataʻitaʻiga fesoʻotaʻiga i MarkLogic
     Fa'ata'ita'iga kalafi i MarkLogic
Fa'ata'ita'iga tele DBMS "e aunoa ma se fa'ata'ita'iga autu"
     ArangoDB
     OrientDB
     Azure CosmosDB
Tele-fa'ata'ita'iga DBMS fa'avae ile fa'ata'ita'iga kalafi?
iʻuga
talanoaga

Fa'atosina o le Polyglot

O mea o loʻo i luga e taʻitaʻia ai le mea moni o nisi taimi i totonu o le tasi faiga e manaʻomia ai le faʻaaogaina o le tele o DBMS eseese, o ia mea taʻitasi e lagolagoina lana lava faʻataʻitaʻiga faʻamaumauga, e teu ai faʻamatalaga ma foia faafitauli eseese o le gaosiga. Faatasi ai ma le lima mama o M. Fowler, tusitala se numera o tusi ta'uta'ua ma le tasi o tusitala faatasi Agile Manifesto, ua ta'ua lea tulaga fa'aputuga eseese (“tausi polyglotte”).

O loʻo i ai foʻi i Fowler le faʻataʻitaʻiga o loʻo i lalo o le faʻatulagaina o le teuina o faʻamaumauga i totonu o se faʻaoga atoatoa ma maualuga le utaina i le matata o le e-commerce.

O DBMS e tele-faʻataʻitaʻiga o le faʻavae o faiga faʻamatalaga faʻaonaponei?

O lenei faʻataʻitaʻiga, ioe, e fai si faʻateleina, ae o nisi o iloiloga e fiafia i le filifilia o se tasi poʻo se isi DBMS mo le faʻamoemoe tutusa e mafai ona maua, mo se faʻataʻitaʻiga, iinei.

E manino lava e le faigofie le avea ma se auauna i totonu o se pa manu.

  • O le aofaʻi o faʻailoga e faʻatino ai le teuina o faʻamaumauga e tupu faʻatusatusa i le numera o DBMS faʻaaogaina; e lelei le aofa'i o fa'amaumauga fa'amaopoopo code pe a le fa'atatau i le sikuea o lenei numera.
  • E pei o le tele o numera o DBMS na faʻaaogaina, o tau o le tuʻuina atu o uiga tau atinaʻe (faʻaogaina, faʻapalepale faʻaletonu, maualuga le avanoa) o DBMS taʻitasi na faʻaaogaina.
  • E le mafai ona faʻamautinoa uiga tau atinaʻe o le subsystem teuina atoa - aemaise lava transactionality.

Mai le vaaiga a le faatonu o manu, o mea uma e pei o lenei:

  • O se siitaga tele i le tau o laisene ma lagolago faʻapitoa mai le kamupani gaosi oloa DBMS.
  • Ova le aufaigaluega ma fa'ateleina taimi e gata ai.
  • Tu'u sa'o tupe gau po'o fa'asalaga ona o fa'amaumauga e le tutusa.

O lo'o iai se si'itaga tele i le tau atoa o le umiaina (TCO). E i ai se auala e alu ese ai mai le tulaga o le "tele o filifiliga teuina"?

Fa'ata'ita'iga tele

O le faaupuga "faʻapipiʻi tele" na faʻaaogaina i le 2011. O le faʻalauiloaina o faʻafitauli o le auala ma le sailiga mo se fofo na alu i ni nai tausaga, ma e oʻo atu i le 2015, e ala i fofoga o le au suʻesuʻe a Gartner, na faʻatulagaina le tali:

E foliga mai o le taimi lea na sa'o ai le au su'esu'e a Gartner i le latou va'aiga. Afai e te alu i le itulau ma fa'ailoga autu DBMS i luga ole DB-Engines, e mafai ona e vaʻaia lena meaоO le tele o ona taʻitaʻi latou te faʻatulagaina i latou lava e pei o DBMS faʻataʻitaʻiga tele. E mafai ona va'aia le tutusa i luga o le itulau ma so'o se fa'ailoga tumaoti.

O le laulau o loʻo i lalo o loʻo faʻaalia ai le DBMS - o taʻitaʻi i totonu o faʻasalalauga tumaoti taʻitasi, lea e fai mai e tele-faʻataʻitaʻiga. Mo DBMS ta'itasi, o le ulua'i fa'ata'ita'iga lagolago (lea sa na'o le tasi) ma fa'atasi ai ma fa'ata'ita'iga o lo'o lagolagoina nei o lo'o fa'aalia. O lo'o lisiina fo'i DBMS o lo'o fa'atulagaina i latou lava o le "ulua'i tele-fa'ata'ita'iga" ma, e tusa ai ma i latou na faia, e leai se fa'ata'ita'iga fa'atosina muamua.

DBMS Fa'ata'ita'iga muamua Fa'ata'ita'iga fa'aopoopo
Oracle Fegalegaleaiga Kalafi, pepa
MS SQL Fegalegaleaiga Kalafi, pepa
PostgreSQL Fegalegaleaiga Kalafi*, pepa
MarkLogic Fa'amaumauga Kalafi, sootaga
MongoDB Fa'amaumauga Tau-taua, kalafi*
Faʻamatalaga Lautele-koluma Fa'amaumauga, kalafi
Redis Tau-taua Fa'amaumauga, kalafi*
ArangoDB - Kalafi, pepa
OrientDB - Kalafi, pepa, sootaga
Azure CosmosDB - Kalafi, pepa, sootaga

Fa'amatalaga i luga o le laulau

Asterisk i le laulau fa'ailoga fa'amatalaga e mana'omia ai le fa'aagaga:

  • E le lagolagoina e le PostgreSQL DBMS le faʻataʻitaʻiga o faʻamaumauga o kalafi, ae o loʻo lagolagoina e lenei oloa faavae ai, pei ole AgensGraph.
  • E tusa ai ma MongoDB, e sili atu ona saʻo le talanoa e uiga i le i ai o tagata faʻatautaia kalafi i le gagana fesili ($lookup, $graphLookup) nai lo le lagolagoina o le faʻataʻitaʻiga o le kalafi, e ui lava, o le mea moni, o latou faʻafeiloaʻiga e manaʻomia ai ni faʻataʻitaʻiga i le tulaga o le teuina o le tino i le itu e lagolagoina ai le faʻataʻitaʻiga kalafi.
  • E tusa ai ma Redis, o lona uiga o le faʻaopoopoga RedisGraph.

Le isi, mo vasega taʻitasi, o le a matou faʻaalia pe faʻapefea ona faʻatinoina le lagolago mo le tele o faʻataʻitaʻiga i le DBMS mai lenei vasega. O le a matou mafaufau i faʻataʻitaʻiga fesoʻotaʻiga, pepa ma kalafi e sili ona taua ma faʻaoga faʻataʻitaʻiga o DBMS faʻapitoa e faʻaalia ai pe faʻapefea ona faʻatinoina "mea misi".

Fa'ata'ita'iga tele DBMS fa'avae i luga o le fa'ata'ita'iga feso'ota'iga

O ta'ita'i DBMS i le taimi nei o lo'o feso'ota'i; E le mafai ona fa'amaonia le fa'aaliga a Gartner pe a fai e le fa'aalia e RDBMS le gaioiga i le itu o le tele-fa'ata'ita'iga. Ma latou faʻaalia. O le taimi nei o le manatu o le tele-model DBMS e pei o se naifi Suiselani, e le mafai ona faia se mea lelei, e mafai ona faʻasino saʻo ia Larry Ellison.

Ae ui i lea, o le tusitala, e sili ona fiafia i le faʻatinoina o le tele-modeling i le Microsoft SQL Server, i luga o le faʻataʻitaʻiga o le a faʻamatalaina le lagolago a le RDBMS mo faʻataʻitaʻiga pepa ma kalafi.

Fa'ata'ita'iga pepa ile MS SQL Server

Ua uma ona i ai ni tala lelei se lua i luga o Habré e uiga i le faʻaogaina e le MS SQL Server le lagolago mo le faʻataʻitaʻiga pepa; O le a ou faʻatapulaʻaina aʻu lava i se toe faʻamatalaga puupuu ma faʻamatalaga:

O le auala e lagolago ai le faʻataʻitaʻiga o pepa i le MS SQL Server e masani lava mo DBMS faʻafesoʻotaʻi: O pepa JSON e faʻamoemoe e teu i totonu o tusitusiga masani. Lagolago mo le faʻataʻitaʻiga pepa o le tuʻuina atu lea o tagata faʻapitoa e faʻasalalau lenei JSON:

  • JSON_VALUE e fa'asolo mai ai fa'atauga uiga fa'apitoa,
  • JSON_QUERY e fa'apipi'i mai fa'amaumauga laiti.

O le finauga lona lua a le au faʻatautaia e lua o se faʻaaliga i le JSONPath-like syntax.

I se faʻamatalaga, e mafai ona tatou fai atu o pepa o loʻo teuina i lenei auala e le o "faʻalapotopotoga muamua-vasega" i se DBMS faʻafesoʻotaʻi, e le pei o tuples. Aemaise lava, i le MS SQL Server o loʻo i ai i le taimi nei e leai ni faʻamatalaga i luga o fanua o pepa JSON, lea e faigata ai ona tuʻufaʻatasia laulau e faʻaaoga ai tau o nei fanua ma e oʻo lava i le filifilia o pepa e faʻaaoga ai nei tau. Ae ui i lea, e mafai ona faia se koluma fuafuaina mo sea fanua ma se faasino igoa i luga.

E le gata i lea, o le MS SQL Server e maua ai le gafatia e fausia ai se pepa JSON mai mea o loʻo i totonu o laulau e faʻaaoga ai le tagata faʻaoga. FOR JSON PATH - se avanoa, i se tulaga patino, faʻafeagai ma le muamua, teuina masani. E manino lava e tusa lava po o le a le saoasaoa o se RDBMS, o lenei faiga e feteenai ma le talitonuga o pepa DBMSs, lea e teuina ai tali saunia i fesili lauiloa, ma e mafai ona foia faafitauli o le faigofie o le atinaʻe, ae le o le saoasaoa.

Ma le mea mulimuli, MS SQL Server e faʻatagaina oe e foia le faʻafitauli faʻalavelave o le fausiaina o pepa: e mafai ona e faʻaumatia JSON i laulau e faʻaaoga ai. OPENJSON. Afai e le'i fa'amafola atoatoa le pepa, e mana'omia lou fa'aogaina CROSS APPLY.

Fa'ata'ita'iga kalafi ile MS SQL Server

Lagolago mo le kalafi (LPG) faʻataʻitaʻiga o loʻo faʻatinoina atoatoa i le Microsoft SQL Server taumatemate: Ua fautuaina e fa'aoga laulau fa'apitoa e teu ai nodes ma teu ai pito o kalafi. O ia laulau e faia e fa'aaoga ai fa'amatalaga CREATE TABLE AS NODE и CREATE TABLE AS EDGE faasologa.

O laulau o le ituaiga muamua e talitutusa ma laulau masani mo le teuina o faʻamaumauga, ma na o le pau le eseesega i fafo o le laulau o loʻo i ai se fanua faʻaoga. $node_id - fa'ailoga tulaga ese o se node kalafi i totonu o fa'amaumauga.

E fa'apena fo'i, o laulau o le ituaiga lona lua o lo'o i ai fanua fa'aoga $from_id и $to_id, o fa'amaumauga i totonu o ia laulau e fa'amalamalama manino ai feso'ota'iga i le va o nodes. E fa'aoga se laulau ese'ese e teu ai so'otaga o ituaiga ta'itasi.

O DBMS e tele-faʻataʻitaʻiga o le faʻavae o faiga faʻamatalaga faʻaonaponei? Seʻi o tatou faataʻitaʻia lenei mea i se faaaʻoaʻoga. Tuu le fa'amaumauga o kalafi e iai se fa'atulagaga e pei ona fa'aalia i le ata. Ona fai lea o le fausaga tutusa i totonu o faʻamaumauga e te manaʻomia e faʻatautaia ai fesili DDL nei:

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

O le fa'apitoa autu o ia laulau o le i fesili e faasaga ia i latou e mafai ona faʻaogaina mamanu kalafi ma Cypher-pei o le syntax (peitaʻi, "*"e le'i lagolagoina ma isi mea). Fa'avae i fua fa'atinoga, e mafai fo'i ona fa'apea o le auala e teu ai fa'amaumauga i totonu o nei laulau e ese mai le auala e teu ai fa'amaumauga i laulau masani ma e sili ona lelei mo le fa'atinoina o ia fa'amatalaga kalafi.

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

E le gata i lea, e faigata tele ona le faʻaogaina nei kalafi pe a galue i ia laulau, talu ai i fesili masani a le SQL e foia ai faʻafitauli faʻapena o le a manaʻomia le faia o taumafaiga faʻaopoopo e maua ai faʻamatalaga faʻailoga "kalafa" ($node_id, $from_id, $to_id; Mo le mafuaaga lava e tasi, o fesili mo le faʻaofiina o faʻamatalaga e le o faʻaalia iinei ona e le talafeagai.

I le aotelega o le faʻamatalaga o faʻatinoga o le pepa ma faʻataʻitaʻiga kalafi i le MS SQL Server, ou te matauina o ia faʻatinoga o le tasi faʻataʻitaʻiga i luga o le isi e foliga mai e le manuia, aemaise lava mai le manatu o le gagana mamanu. E manaʻomia le faʻalauteleina o le tasi gagana ma le isi, o gagana e leʻo atoatoa le "orthogonal", o tulafono o fesoʻotaʻiga e mafai ona matua ese lava.

Fa'ata'ita'iga tele DBMS fa'avae ile fa'ata'ita'iga pepa

I lenei vaega, ou te manaʻo e faʻaalia le faʻatinoina o le tele-faʻataʻitaʻiga i pepa DBMS e faʻaaoga ai le faʻataʻitaʻiga o le le sili ona lauiloa o latou, MongoDB (pei ona fai mai, e naʻo le faʻaogaina o kalafi faʻapitoa. $lookup и $graphLookup, e le o galue i luga o faʻaputuga faʻapipiʻi), ae faʻaaoga le faʻataʻitaʻiga o se DBMS sili atu ona matua ma "faʻapisinisi" MarkLogic.

O lea la, ia tuʻu i le aoina o loʻo i ai se seti o pepa XML o le ituaiga o loʻo i lalo (MarkLogic e faʻatagaina oe e teuina pepa JSON):

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

Faʻataʻitaʻiga fesoʻotaʻiga i MarkLogic

O se va'aiga feso'ota'iga o se aofa'iga o pepa e mafai ona fa'atūina e fa'aoga fa'aali ata (i totonu o elemene value i le faʻataʻitaʻiga o loʻo i lalo e mafai ona i ai se XPath faʻamaonia):

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

E mafai ona e faʻafesoʻotaʻi le vaʻaiga na faia i se fesili SQL (mo se faʻataʻitaʻiga, e ala ile ODBC):

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

Ae paga lea, o le va'aiga feso'ota'iga na faia e le fa'ata'ita'iga fa'aaliga e na'o le faitau. Pe a faʻagasolo se talosaga, MarkLogic o le a taumafai e faʻaoga faasino igoa o pepa. I le taimi muamua, o MarkLogic na faʻatapulaʻaina manatu faʻapitoa, atoa fa'avae fa'asino ma e mafai ona tusitusi, a o lea ua manatu ua le toe faaaogaina.

Fa'ata'ita'iga kalafi i MarkLogic

Faatasi ai ma le lagolago mo le kalafa (RDF) faʻataʻitaʻiga, e tutusa mea uma. Toe fa'atasi ma le fesoasoani fa'aali ata e mafai ona e fatuina se ata RDF o se aoina o pepa mai le faʻataʻitaʻiga i luga:

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

E mafai ona e faʻafesoʻotaʻi le kalafi RDF e maua i se fesili SPARQL:

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

E le pei o le sootaga, e lagolagoina e MarkLogic le ata faʻataʻitaʻiga i isi auala e lua:

  1. O le DBMS e mafai ona avea ma se teuina atoatoa o faʻamaumauga RDF (taatolu i totonu o le a taʻua pulea e ese mai i mea ua faamatalaina i luga aveese).
  2. RDF i faʻasalalauga faʻapitoa e mafai ona faʻaofiina i totonu o pepa XML poʻo JSON (ma o le a taʻua tolu tolu lē pulea). Masalo o se mea e suitulaga i masini idref ma isi.

O se manatu lelei pe faʻafefea ona galue mea "moni" i MarkLogic e tuʻuina mai e Optical API, i lenei tulaga, e maualalo-tulaga, e ui lava o lona faamoemoega o le faafeagai - ia taumafai e vaʻavaʻai mai le faʻataʻitaʻiga faʻamatalaga faʻaaogaina, ia mautinoa le galulue faʻatasi ma faʻamatalaga i faʻataʻitaʻiga eseese, transactionality, ma isi.

Fa'ata'ita'iga tele DBMS "e aunoa ma se fa'ata'ita'iga autu"

O lo'o iai fo'i DBMS i luga o le maketi e fa'atūina i latou e pei o le tele-fa'ata'ita'iga muamua, e aunoa ma se fa'ata'ita'iga autu fa'atosina. E aofia ai ArangoDB, OrientDB (talu mai le 2018 o le kamupani atinae o le SAP) ma Cosmosdb (auaunaga o se vaega o le Microsoft Azure cloud platform).

O le mea moni, o loʻo i ai faʻataʻitaʻiga "autu" i ArangoDB ma OrientDB. I tulaga uma e lua, o latou lava faʻataʻitaʻiga faʻamatalaga, o faʻasalalauga lautele o le pepa tasi. O fa'asalalauga fa'apitoa e fa'afaigofie ai le mafai ona fa'atino fesili o le kalafi ma le natura fa'afeso'ota'i.

O nei faʻataʻitaʻiga e naʻo ia e avanoa mo le faʻaogaina i le DBMS faʻamaonia; o latou lava gagana fesili ua fuafuaina e galulue ma i latou. O le mea moni, o ia faʻataʻitaʻiga ma DBMS e faʻamoemoeina, ae o le leai o se fetaui ma faʻataʻitaʻiga masani ma gagana e le mafai ai ona faʻaogaina nei DBMS i faiga faʻaleaganuʻu-e sui ai DBMS ua uma ona faʻaaogaina iina.

Ua uma ona i ai se tala matagofie e uiga ia ArangoDB ma OrientDB i Habré: AUAI i NoSQL databases.

ArangoDB

ArangoDB fai mai le lagolago mo se faʻataʻitaʻiga faʻamaumauga o kalafi.

O nodes o se kalafi i ArangoDB o pepa masani, ma o pito o pepa o se ituaiga faʻapitoa lea, faʻatasi ai ma faʻalapotopotoga masani, e iai (_key, _id, _rev) fanua faiga _from и _to. O fa'amaumauga i pepa DBMS e masani ona tu'ufa'atasia i le aoina. O fa'aputuga o pepa fa'atusa e ta'ua o fa'aputuga pito i ArangoDB. I le auala, o pepa aoina o pito o ni pepa foi, o le mea lea o pito i ArangoDB e mafai foi ona avea ma nodes.

Fa'amatalaga muamua

Se'i tatou maua se aoina persons, o ana pepa e pei o lenei:

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

Ia i ai foi se faaputuga cafes:

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

Ona sosoo ai lea ma le aoina likes ono pei o lenei:

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

Fesili ma i'uga

O se fesili fa'akalafa i le gagana AQL o lo'o fa'aogaina i ArangoDB, toe fa'afo'i mai i fa'amatalaga e mafai ona faitau e tagata e uiga i ai e fiafia i le cafe, e pei o lenei:

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

I se sitaili faʻafesoʻotaʻi, lea o loʻo tatou "faʻaogaina" sootaga nai lo le teuina, e mafai ona toe tusia lenei fesili e pei o lenei (i le ala, e aunoa ma le aoina likes mafai ona faia e aunoa ma le):

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 }

O le taunuuga i tulaga uma e lua o le a tutusa:

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

E tele fesili ma i'uga

Afai e foliga mai e sili atu le masani mo se DBMS sootaga nai lo se pepa DBMS, e mafai ona e faʻataʻitaʻiina lenei fesili (pe mafai ona e faʻaogaina COLLECT):

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

O le taunuuga o le a pei o lenei:

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

OrientDB

O le faʻavae mo le faʻatinoina o se faʻataʻitaʻiga kalafi i luga o se faʻataʻitaʻiga pepa i OrientDB o avanoa fanua pepa, faʻaopoopo i le sili atu pe itiiti ifo tulaga faʻatatau scalar, e iai foʻi tulaga taua o ituaiga e pei o LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. O tau o nei ituaiga o so'oga po'o fa'aputuga o so'oga i fa'ailoga faiga pepa.

O le faʻamatalaga faʻamaumauga e tuʻuina atu e le faiga o loʻo i ai se "uiga faʻaletino", e faʻaalia ai le tulaga o faʻamaumauga i totonu o faʻamaumauga, ma e foliga mai e pei o lenei: @rid : #3:16. O le mea lea, o tau o meatotino faʻasino o ni faʻailoga moni (pei o le kalafi faʻataʻitaʻiga) nai lo tulaga filifilia (pei o le faʻataʻitaʻiga sootaga).

E pei o ArangoDB, pito i le OrientDB o loʻo faʻatusalia o ni pepa eseese (e ui lava e leai ni mea totino a le pito, e mafai ona faia. māmā, ma o le a le fetaui ma se isi pepa).

Fa'amatalaga muamua

I se faatulagaga latalata i fa'asologa o le lafoa'i OrientDB database, o faʻamatalaga mai le faʻataʻitaʻiga muamua mo ArangoDB o le a foliga pei o lenei:

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

E pei ona mafai ona tatou vaʻai, o loʻo teuina foi e vertices faʻamatalaga e uiga i pito o loʻo sau ma fafo. I faʻaaogaina E tatau i le Document API ona mata'ituina le sa'o fa'asino tonu lava, ma fa'atino e le Graph API lenei galuega. Ae sei o tatou vaʻai pe faʻapefea le avanoa i le OrientDB e foliga mai i gagana fesili "mama" e leʻo tuʻufaʻatasia i gagana polokalame.

Fesili ma i'uga

O se fesili e tutusa ma le faʻamoemoe i le fesili mai le faʻataʻitaʻiga mo ArangoDB i OrientDB e pei o lenei:

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

Ole taunuuga ole a maua ile fomu nei:

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

Afai o le faʻasologa o le taunuuga e foliga mai e "fesoʻotaʻi", e tatau ona e aveese le laina ma UNWIND():

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

Ole gagana ole fesili ole OrientDB e mafai ona fa'amatalaina ole SQL fa'atasi ma fa'aulu fa'atusa Gremlin. I le version 2.2, na aliali mai ai se pepa talosaga e pei o Cypher, MATCH :

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

Ole fa'asologa ole iuga ole a tutusa ma le talosaga muamua. Mafaufau i mea e tatau ona aveese ina ia sili atu le "fesootaʻiga", pei o le fesili muamua lava.

Azure CosmosDB

I se tulaga laʻititi, o le mea na taʻua i luga e uiga ia ArangoDB ma OrientDB e faʻaoga i Azure CosmosDB. CosmosDB o loʻo tuʻuina atu faʻamatalaga faʻamatalaga APIs: SQL, MongoDB, Gremlin ma Cassandra.

SQL API ma MongoDB API e faʻaaogaina e maua ai faʻamatalaga i le faʻataʻitaʻiga o pepa. Gremlin API ma Cassandra API - mo le mauaina o faʻamatalaga i kalafi ma koluma faʻasologa, faʻasologa. O fa'amaumauga i fa'ata'ita'iga uma o lo'o fa'asaoina ile fa'ata'ita'iga i totonu ole CosmosDB: ARS (“atom-record-sequence”), lea e latalata foi i le pepa muamua.

O DBMS e tele-faʻataʻitaʻiga o le faʻavae o faiga faʻamatalaga faʻaonaponei?

Ae o le faʻataʻitaʻiga faʻamatalaga filifilia e le tagata faʻaoga ma le API faʻaaogaina e faʻamautu i le taimi o le fatuina o se teugatupe i le tautua. E le mafai ona maua faʻamatalaga o loʻo utaina i se tasi faʻataʻitaʻiga i se isi faʻataʻitaʻiga, e pei ona faʻaalia i se mea faapenei:

O DBMS e tele-faʻataʻitaʻiga o le faʻavae o faiga faʻamatalaga faʻaonaponei?

O le mea lea, tele-faʻataʻitaʻiga i Azure CosmosDB i aso nei ua naʻo le mafai ona faʻaogaina le tele o faʻamaumauga e lagolagoina ai faʻataʻitaʻiga eseese mai le tasi tagata gaosi oloa, lea e le foia uma ai faʻafitauli o le tele-variant storage.

Tele-fa'ata'ita'iga DBMS fa'avae ile fa'ata'ita'iga kalafi?

Matauina le mea moni e leai ni DBMS tele-faʻataʻitaʻiga i luga o le maketi ae o loʻo faʻavae i luga o se faʻataʻitaʻiga kalafi (sei vagana ai le tele-faʻataʻitaʻiga lagolago mo faʻataʻitaʻiga lua kalafi i le taimi e tasi: RDF ma LPG; vaʻai i le lomiga talu ai). O fa'afitauli sili e mafua mai i le fa'atinoina o se fa'ata'ita'iga pepa i luga o se fa'ata'ita'iga kalafi, nai lo se feso'ota'iga.

O le fesili pe faʻapefea ona faʻatinoina se faʻataʻitaʻiga sootaga i luga o le faʻataʻitaʻiga o le kalafa na mafaufauina e oʻo lava i le taimi o le faʻavaeina o le mulimuli. E faapefea tautalamo se faʻataʻitaʻiga Tavita McGovern:

E leai se mea i totonu o le kalafi auala e taofia ai le fatuina o se laulau (faʻataʻitaʻiga, e ala i le faasinoupuina talafeagai) i luga o se kalafi faʻamaumauga e mafai ai ona maua se vaʻaiga faʻatasi ma le (1) toe faʻaleleia o tuples mai paʻu taua masani ma (2) faʻavasegaina o tuple i ituaiga sootaga.

Pe a faʻatinoina se faʻataʻitaʻiga pepa i luga o le ata o le kalafi, e tatau ona e manatua, mo se faʻataʻitaʻiga, mea nei:

  • O elemene o le JSON array e manatu e faʻatonuina, ae o mea e sau mai le tumutumu o se pito o le kalafi e le;
  • O faʻamatalaga i le faʻataʻitaʻiga o pepa e masani lava ona faʻaleagaina, e te le manaʻo e teu ni kopi o le pepa faʻapipiʻi tutusa, ma subdocuments e masani lava e leai ni faʻamatalaga;
  • I le isi itu, o le talitonuga o pepa DBMS o pepa o loʻo saunia-faʻapipiʻi "faʻapipiʻi" e le manaʻomia ona toe fausia i taimi uma. E manaʻomia le tuʻuina atu o le faʻataʻitaʻiga o le kalafi ma le gafatia e vave maua ai se subkalafa e fetaui ma le pepa maeʻa.

O sina fa'asalalauga

O le tusitala o le tusiga e fesoʻotaʻi ma le atinaʻeina o le NitrosBase DBMS, o le faʻataʻitaʻiga i totonu o le kalafi, ma faʻataʻitaʻiga fafo - sootaga ma pepa - o ona faʻatusa. O faʻataʻitaʻiga uma e tutusa: toetoe lava o faʻamatalaga e maua i soʻo se tasi o latou faʻaaogaina se gagana faʻafesili e masani ai. E le gata i lea, i soʻo se vaaiga, e mafai ona suia faʻamatalaga. O suiga o le a atagia i totonu o le faʻataʻitaʻiga i totonu ma, e tusa ai, i isi manatu.

O le a ou faʻamoemoe e faʻamatalaina pe o le a le faʻatusa faʻatusa e foliga mai i NitrosBase i se tasi o tala o loʻo mulimuli mai.

iʻuga

Ou te faʻamoemoe o faʻamatalaga lautele o le mea e taʻua o le tele-modeling ua sili atu pe itiiti foi le manino i le tagata faitau. O DBMS faʻataʻitaʻiga e fai si eseʻese, ma e mafai ona ese foliga o le "tele-model support". Ina ia malamalama i le mea ua taʻua o le "multi-model" i tulaga patino taitasi, e aoga le taliina o fesili nei:

  1. O tatou talanoa e uiga i le lagolagoina o faʻataʻitaʻiga masani poʻo se ituaiga o faʻataʻitaʻiga "hybrid"?
  2. O faʻataʻitaʻiga "tutusa", pe o se tasi oi latou o le autu o isi?
  3. O faʻataʻitaʻiga "e le ese" le tasi i le isi? E mafai ona faitau fa'amaumauga i totonu o se tasi fa'ata'ita'iga i se isi po'o toe fa'asolo?

Ou te manatu o le fesili e uiga i le taua o le tele-model DBMS e mafai ona tali lelei, ae o le fesili manaia o le a le ituaiga o latou o le a sili atu ona manaʻomia i se taimi lata mai. E foliga mai o le tele-model DBMSs o loʻo lagolagoina faʻataʻitaʻiga faʻaleaganuʻu, aemaise lava sootaga, o le a sili atu le manaʻomia; O le taʻutaʻua o le tele-model DBMSs, o loʻo ofoina atu faʻataʻitaʻiga fou e tuʻufaʻatasia le lelei o tu ma aga masani, o se mataupu o le lumanaʻi mamao.

Na'o tagata fa'aigoaina e mafai ona auai i le su'esu'ega. Saini ese j, faʻamolemole.

E te fa'aogaina le tele-fa'ata'ita'iga DBMS?

  • Matou te le faʻaaogaina, matou te teuina mea uma i le tasi DBMS ma i le tasi faʻataʻitaʻiga

  • Matou te faʻaogaina le tele o faʻataʻitaʻiga gafatia o DBMS masani

  • Matou te faʻataʻitaʻiina le faʻamaoni polyglot

  • Matou te fa'aogaina DBMS fou tele-fa'ata'ita'iga (Arango, Orient, CosmosDB)

19 tagata fa'aoga na palota. 4 tagata fa'aoga na fa'amama.

puna: www.habr.com

Faaopoopo i ai se faamatalaga