Shin DBMSs masu yawa ne tushen tsarin bayanai na zamani?

Tsarin bayanai na zamani suna da wuyar gaske. Ba ko kadan ba, sarkakiyarsu ta samo asali ne saboda sarkakkiyar bayanan da aka sarrafa a cikinsu. Rikicin bayanai galibi yana ta'allaka ne a cikin nau'ikan nau'ikan bayanan da aka yi amfani da su. Don haka, alal misali, lokacin da bayanai suka zama "babban", ɗaya daga cikin halayen matsala ba kawai ƙarar sa ("girman") ba, har ma da iri-iri ("iri").

Idan har yanzu ba ku sami aibi a cikin tunanin ba, to ku ci gaba.

Shin DBMSs masu yawa ne tushen tsarin bayanai na zamani?


Abubuwa

Dagewar Polyglot
Multi-samfurin
Multi-samfurin DBMS dangane da ƙirar alaƙa
     Samfurin daftarin aiki a MS SQL Server
     Samfurin zane a cikin MS SQL Server
Multi-model DBMS dangane da samfurin daftarin aiki
     Samfurin alaƙa a cikin MarkLogic
     Samfurin zane a cikin MarkLogic
Multi-model DBMS "ba tare da babban samfuri"
     ArangoDB
     OrientDB
     Azure CosmosDB
Multi-samfurin DBMS dangane da samfurin jadawali?
ƙarshe
Kasa

Dagewar Polyglot

Abubuwan da ke sama suna haifar da gaskiyar cewa wani lokacin har ma a cikin tsarin tsarin ɗaya ya zama dole a yi amfani da DBMS daban-daban don adana bayanai da warware matsaloli daban-daban na sarrafa su, wanda kowannensu yana goyan bayan ƙirar bayanansa. Da hannun haske na M. Fowler, marubuci litattafai da dama da kuma daya daga cikin mawallafa Agile Manifesto, ana kiran wannan yanayin Multi-bambance-bambancen ajiya ("ciwon polyglot").

Har ila yau, Fowler yana da misali mai zuwa na tsara ma'ajiyar bayanai a cikin cikakken fasali da aikace-aikacen daɗaɗɗen kaya a fagen kasuwancin e-commerce.

Shin DBMSs masu yawa ne tushen tsarin bayanai na zamani?

Wannan misali, ba shakka, yana ɗan ƙaranci, amma ana iya samun wasu la'akari don zaɓar ɗaya ko wata DBMS don maƙasudin madaidaicin, misali, a nan.

A bayyane yake cewa zama bawa a irin wannan gidan namun daji ba shi da sauƙi.

  • Adadin lambar da ke yin ajiyar bayanai yana girma daidai da adadin DBMS da aka yi amfani da su; Adadin bayanan daidaita lambobin yana da kyau idan bai dace da murabba'in wannan lambar ba.
  • A matsayin yawan adadin DBMSs da aka yi amfani da su, farashin samar da halayen masana'antu (daidaitacce, haƙurin kuskure, babban samuwa) na kowane DBMS ɗin da aka yi amfani da shi yana ƙaruwa.
  • Ba shi yiwuwa a tabbatar da halayen kasuwanci na tsarin tsarin ajiya gaba ɗaya - musamman ma'amala.

Daga ra'ayin darektan gidan zoo, komai yayi kama da haka:

  • Haɓakawa da yawa a farashin lasisi da goyan bayan fasaha daga masana'anta na DBMS.
  • Yawan ma'aikata da ƙarin lokacin ƙarshe.
  • Asarar kudi kai tsaye ko hukunci saboda rashin daidaiton bayanai.

Akwai gagarumin ƙaruwa a cikin jimillar kuɗin mallakar tsarin (TCO). Shin akwai wata hanya ta fita daga halin da ake ciki na "zaɓuɓɓukan ajiya da yawa"?

Multi-samfurin

An fara amfani da kalmar "majiya mai yawa" a cikin 2011. Sanin matsalolin tsarin da kuma neman mafita ya ɗauki shekaru da yawa, kuma a shekara ta 2015, ta bakin manazarta Gartner, an tsara amsar:

Da alama a wannan lokacin manazarta Gartner sun yi daidai da hasashensu. Idan kun je shafin da babban rating DBMS akan DB-Injina, zaku iya ganin hakanоYawancin shugabanninta suna sanya kansu musamman azaman DBMSs masu yawa. Ana iya ganin iri ɗaya akan shafi tare da kowane ƙimar sirri.

Teburin da ke ƙasa yana nuna DBMS - shugabanni a cikin kowane ƙima mai zaman kansa, waɗanda ke da'awar zama samfuri da yawa. Ga kowane DBMS, ainihin samfurin goyan bayan (wanda ya kasance sau ɗaya kaɗai) kuma tare da shi ana nuna samfuran da ake goyan baya a halin yanzu. Hakanan an jera su DBMSs waɗanda ke sanya kansu a matsayin “samfurin asali da yawa” kuma, bisa ga masu ƙirƙira, ba su da wani ƙirar gado na farko.

DBMS Samfurin farko Ƙarin samfura
Oracle Dangantaka Graph, daftarin aiki
Bayanan MSSQL Dangantaka Graph, daftarin aiki
PostgreSQL Dangantaka Graph*, daftarin aiki
MarkLogic Takardun shaida Graph, na dangantaka
MongoDB Takardun shaida Maɓalli-darajar, jadawali*
DataStax Fadin ginshiƙi Takardun bayanai, jadawali
Redis Maɓalli-darajar Documentary, jadawali*
ArangoDB - Graph, daftarin aiki
OrientDB - Graph, takarda, alaƙa
Azure CosmosDB - Graph, takarda, alaƙa

Bayanan kula akan tebur

Asterisks a cikin tebur alamar kalamai masu buƙatar ajiyar wuri:

  • PostgreSQL DBMS baya goyan bayan ƙirar bayanan jadawali, amma wannan samfurin yana goyan bayan sa bisa shi, kamar AgensGraph.
  • Dangane da MongoDB, yana da kyau a yi magana game da kasancewar masu sarrafa hoto a cikin yaren tambaya ($lookup, $graphLookup) fiye da game da goyan bayan samfurin jadawali, ko da yake, ba shakka, gabatarwar su ya buƙaci wasu ingantawa a matakin ajiya na jiki a cikin hanyar tallafawa samfurin zane.
  • Dangane da Redis, muna nufin tsawo RedisGraph.

Na gaba, ga kowane ɗayan azuzuwan, za mu nuna yadda ake aiwatar da tallafi ga ƙira da yawa a cikin DBMS daga wannan ajin. Za mu yi la'akari da alaƙa, daftarin aiki da ƙirar jadawali don zama mafi mahimmanci kuma muyi amfani da misalan takamaiman DBMS don nuna yadda ake aiwatar da "waɗanda suka ɓace".

Multi-samfurin DBMS dangane da ƙirar alaƙa

Manyan DBMSs a halin yanzu suna da alaƙa; Ba za a iya la'akari da hasashen Gartner gaskiya ba idan RDBMSs ba su nuna motsi a cikin hanyar ƙirar ƙira da yawa ba. Kuma suna nunawa. Yanzu ra'ayin cewa DBMS mai nau'i-nau'i da yawa yana kama da wuka na Swiss, wanda ba zai iya yin wani abu da kyau ba, za a iya kai tsaye zuwa Larry Ellison.

Marubucin, duk da haka, ya fi son aiwatar da samfura da yawa a cikin Microsoft SQL Server, akan misalin wanda RDBMS goyon bayan takaddun da kuma ƙirar zane za a bayyana.

Samfurin daftarin aiki a MS SQL Server

An riga an sami ingantattun labarai guda biyu akan Habré game da yadda MS SQL Server ke aiwatar da goyan baya ga ƙirar daftarin aiki; Zan taƙaita kaina ga taƙaitaccen bayani da sharhi:

Hanyar da za a goyi bayan ƙirar daftarin aiki a cikin MS SQL Server abu ne na yau da kullun don DBMSs na dangantaka: Ana ba da shawarar adana takaddun JSON a cikin filayen rubutu na yau da kullun. Taimako ga samfurin takaddun shine don samar da masu aiki na musamman don tantance wannan JSON:

Hujja ta biyu na dukkan masu aiki da ita magana ce a cikin JSONPath-kamar syntax.

A zahiri, zamu iya cewa takaddun da aka adana ta wannan hanyar ba “halayen aji na farko bane” a cikin DBMS na alaƙa, sabanin tuples. Musamman, a cikin MS SQL Server a halin yanzu babu alamomi akan filayen takaddun JSON, wanda ke da wahala a haɗa tebur ta amfani da ƙimar waɗannan filayen har ma da zaɓi takaddun ta amfani da waɗannan ƙimar. Duk da haka, yana yiwuwa a ƙirƙiri ginshiƙan ƙididdiga don irin wannan filin da fihirisa akansa.

Bugu da ƙari, MS SQL Server yana ba da damar da za a dace don gina daftarin aiki JSON daga abubuwan da ke cikin tebur ta amfani da mai aiki. FOR JSON PATH - yuwuwar, a cikin wata ma'ana, akasin na baya, ajiyar al'ada. A bayyane yake cewa komai saurin RDBMS, wannan tsarin ya saba wa akidar daftarin aiki DBMSs, wanda a zahiri adana shirye-shiryen amsoshi ga shahararrun tambayoyin, kuma kawai zai iya magance matsalolin sauƙi na ci gaba, amma ba sauri ba.

A ƙarshe, MS SQL Server yana ba ku damar magance sabanin matsalar ginin daftarin aiki: zaku iya lalata JSON cikin tebur ta amfani da OPENJSON. Idan takardar ba ta cika lebur ba, kuna buƙatar amfani CROSS APPLY.

Samfurin zane a cikin MS SQL Server

Hakanan ana aiwatar da goyan bayan ƙirar jadawali (LPG) a cikin Microsoft SQL Server wanda ake iya faɗi: An ba da shawarar yin amfani da tebur na musamman don adana nodes da kuma adana gefuna jadawali. Ana ƙirƙira irin waɗannan teburin ta amfani da maganganu CREATE TABLE AS NODE и CREATE TABLE AS EDGE daidai da.

Tables na nau'in farko sun yi kama da tebur na yau da kullun don adana bayanan, tare da kawai bambancin waje shine cewa tebur ya ƙunshi filin tsarin. $node_id - mai gano musamman na kullin jadawali a cikin bayanan.

Hakazalika, allunan nau'in na biyu suna da filayen tsarin $from_id и $to_id, shigarwar a cikin irin waɗannan allunan suna bayyana a sarari haɗin kai tsakanin nodes. Ana amfani da tebur daban don adana alaƙa na kowane nau'in.

Shin DBMSs masu yawa ne tushen tsarin bayanai na zamani? Bari mu kwatanta wannan da misali. Bari bayanan jadawali su kasance da shimfidar wuri kamar wanda aka nuna a cikin adadi. Sannan don ƙirƙirar tsarin da ya dace a cikin ma'ajin bayanai kuna buƙatar gudanar da tambayoyin DDL masu zuwa:

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

Babban ƙayyadaddun irin waɗannan allunan shine cewa a cikin tambayoyin da aka yi musu yana yiwuwa a yi amfani da tsarin zane tare da syntax-kamar Cypher (duk da haka, "*"da sauransu har yanzu ba a tallafa musu ba). Dangane da ma'aunin aiki, ana iya ɗauka cewa hanyar da ake adana bayanai a cikin waɗannan allunan ya bambanta da yadda ake adana bayanai a cikin tebur na yau da kullun kuma an inganta su don aiwatar da irin waɗannan tambayoyin jadawali.

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

Haka kuma, yana da matukar wahala kada a yi amfani da waɗannan ƙirar zane yayin aiki tare da irin waɗannan tebur, tunda a cikin tambayoyin SQL na yau da kullun don magance matsalolin irin wannan zai zama dole don ƙarin ƙoƙarce-ƙoƙarce don samun alamun kumburin tsarin “jadawali” ($node_id, $from_id, $to_id; Saboda wannan dalili, ba a nuna tambayoyin shigar da bayanai a nan saboda suna da wahala ba dole ba).

Don taƙaita bayanin aiwatar da daftarin aiki da samfuran jadawali a cikin MS SQL Server, zan lura cewa irin wannan aiwatar da tsarin ɗaya a saman wani ba ya yi kama da nasara, da farko daga mahangar ƙirar harshe. Wajibi ne don fadada harshe ɗaya tare da wani, harsunan ba su da cikakkiyar "orthogonal", dokokin dacewa na iya zama abin ban mamaki.

Multi-model DBMS dangane da samfurin daftarin aiki

A cikin wannan sashe, Ina so in kwatanta aiwatar da nau'i-nau'i da yawa a cikin takaddun DBMSs ta amfani da misalin waɗanda ba su da mashahuri a cikinsu, MongoDB (kamar yadda aka ce, yana da ma'aikatan jadawali kawai). $lookup и $graphLookup, ba ya aiki akan tarin sharar fage), amma ta yin amfani da misalin DBMS mafi girma da "kasuwanci" MarkLogic.

Don haka, bari tarin ya ƙunshi saitin takaddun XML na nau'in mai zuwa (MarkLogic kuma yana ba ku damar adana takaddun JSON):

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

Samfurin alaƙa a cikin MarkLogic

Ana iya ƙirƙirar ra'ayi mai alaƙa na tarin takardu ta amfani da su samfurin nuni (abun ciki na abubuwa value a cikin misalin da ke ƙasa za a iya zama XPath na sabani):

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

Kuna iya magance ra'ayi da aka ƙirƙira tare da tambayar SQL (misali, ta ODBC):

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

Abin takaici, ra'ayi na alaƙa da samfurin nuni ya ƙirƙira shine karantawa-kawai. Lokacin sarrafa buƙatun sa, MarkLogic zai yi ƙoƙarin amfani da shi daftarin aiki fihirisa. A baya can, MarkLogic yana da iyakataccen ra'ayi na dangantaka, gaba ɗaya tushen index kuma masu rubuce-rubuce, amma yanzu an dauke su an soke su.

Samfurin zane a cikin MarkLogic

Tare da goyan bayan samfurin jadawali (RDF), duk abin da yake kusan iri ɗaya ne. Sake tare da taimakon samfurin nuni zaka iya ƙirƙirar wakilcin RDF na tarin takardu daga misalin da ke sama:

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

Kuna iya magance sakamakon RDF tare da tambayar SPARQL:

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

Ba kamar na alaƙa ba, MarkLogic yana goyan bayan ƙirar jadawali ta wasu hanyoyi guda biyu:

  1. DBMS na iya zama cikakkiyar ma'auni na bayanan RDF (za'a kira uku-uku a ciki gudanar sabanin wadanda aka bayyana a sama cirewa).
  2. Ana iya shigar da RDF a cikin serialization na musamman a cikin takaddun XML ko JSON (kuma za a kira sau uku ba a sarrafa shi ba). Wannan mai yiwuwa madadin tsari ne idref da sauransu.

Kyakkyawan ra'ayi na yadda abubuwa "da gaske" ke aiki a MarkLogic ana ba da su API ɗin gani, a cikin wannan ma'ana, yana da ƙananan matakin, ko da yake manufarsa ita ce akasin haka - don ƙoƙarin ƙaddamar da samfurin bayanan da aka yi amfani da shi, don tabbatar da daidaiton aiki tare da bayanai a cikin nau'i daban-daban, ma'amala, da dai sauransu.

Multi-model DBMS "ba tare da babban samfuri"

Hakanan akwai DBMSs akan kasuwa waɗanda ke sanya kansu azaman ƙirar ƙirar farko ta farko, ba tare da wani babban ƙirar gado ba. Waɗannan sun haɗa da ArangoDB, OrientDB (tun 2018 kamfanin ci gaba na SAP) da CosmosDB (sabis a matsayin wani ɓangare na dandalin girgije na Microsoft Azure).

A zahiri, akwai samfuran “core” a ArangoDB da OrientDB. A cikin duka biyun, waɗannan samfuran bayanan nasu ne, waɗanda ke gaba ɗaya na takaddar ɗaya. Ƙididdigar gabaɗaya galibi don sauƙaƙe ikon yin tambayoyin jadawali da yanayin alaƙa.

Waɗannan samfuran su ne kaɗai don amfani a cikin ƙayyadaddun DBMS; an tsara nasu harsunan tambaya don yin aiki tare da su. Tabbas, irin waɗannan samfuran da DBMS suna da alƙawarin, amma rashin daidaituwa tare da daidaitattun samfura da harsuna yana sa ba zai yiwu a yi amfani da waɗannan DBMS a cikin tsarin gado ba — don maye gurbin DBMS da aka riga aka yi amfani da su a can.

An riga an sami labari mai ban mamaki game da ArangoDB da OrientDB akan Habré: SHIGA a cikin bayanan bayanai na NoSQL.

ArangoDB

ArangoDB yayi iƙirarin goyan bayan ƙirar bayanan jadawali.

Ƙididdigar jadawali a ArangoDB takardu ne na yau da kullun, kuma gefuna takaddun nau'i ne na musamman waɗanda, tare da filayen tsarin yau da kullun, suna da (_key, _id, _rev) filayen tsarin _from и _to. Takardu a cikin takaddun DBMSs an haɗa su a al'ada zuwa tarin. Tarin takaddun da ke wakiltar gefuna ana kiran su tarin gefuna a ArangoDB. Af, takardun tattara gefuna ma takardu ne, don haka gefuna a ArangoDB kuma na iya aiki azaman nodes.

Asalin bayanai

Bari mu sami tarin persons, wanda takardunsa yayi kama da haka:

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

Bari kuma a sami tarin cafes:

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

Sai tarin likes yi kama da wannan:

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

Tambayoyi da sakamako

Tambayar nau'in jadawali a cikin yaren AQL da aka yi amfani da shi a ArangoDB, yana dawowa cikin bayanin nau'i-nau'i na mutum game da wanda ke son wane cafe, yayi kama da wannan:

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

A cikin salon alaƙa, inda muke “ƙididdigewa” alaƙa maimakon adana su, ana iya sake rubuta wannan tambayar kamar haka (ta hanyar, ba tare da tarin ba. likes zai iya yi ba tare da):

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 }

Sakamakon duka biyun zai kasance iri ɗaya:

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

Ƙarin tambayoyi da sakamako

Idan tsarin sakamakon da ke sama ya fi kama da DBMS na dangantaka fiye da na DBMS daftarin aiki, zaku iya gwada wannan tambayar (ko kuna iya amfani da su. COLLECT):

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

Sakamakon zai yi kama da haka:

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

OrientDB

Tushen aiwatar da samfurin jadawali a saman samfurin takarda a OrientDB shine damar filayen daftarin aiki, ban da fiye ko žasa daidaitattun ma'auni, kuma suna da ƙima irin su LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Ƙimar waɗannan nau'ikan hanyoyin haɗin gwiwa ne ko tarin hanyoyin haɗin gwiwa zuwa masu gano tsarin takardu.

Mai gano daftarin aiki da tsarin ya sanya yana da "ma'anar jiki", yana nuna matsayin rikodin a cikin bayanan, kuma yana kama da wani abu kamar haka: @rid : #3:16. Don haka, ƙimar kaddarorin tunani sune masu nuni da gaske (kamar yadda yake a cikin jadawali) maimakon yanayin zaɓi (kamar yadda yake cikin ƙirar alaƙa).

Kamar ArangoDB, gefuna a OrientDB ana wakilta su azaman takaddun daban (ko da yake idan gefen ba shi da kaddarorin kansa, ana iya yin shi. mara nauyi, kuma ba zai dace da wani takarda daban ba).

Asalin bayanai

A cikin tsari kusa da jujjuya tsarin Bayanan OrientDB, bayanan daga misalin da ya gabata na ArangoDB zai yi kama da wani abu kamar haka:

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

Kamar yadda muke iya gani, madaidaitan kuma suna adana bayanai game da gefuna masu shigowa da masu fita. A amfani da API ɗin Takardun dole ne ya sanya ido kan amincin juzu'i da kansa, kuma API ɗin Graph yana ɗaukar wannan aikin. Amma bari mu ga yadda damar zuwa OrientDB yayi kama a cikin yarukan tambaya na "tsarkake" waɗanda ba a haɗa su cikin harsunan shirye-shirye ba.

Tambayoyi da sakamako

Tambaya mai kama da manufar tambayar daga misalin ArangoDB a OrientDB tayi kama da wannan:

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

Za a samu sakamakon a cikin tsari mai zuwa:

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

Idan tsarin sakamakon ya sake yin kama da "na dangantaka", kuna buƙatar cire layin tare da UNWIND():

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

Za a iya siffanta harshen tambayar OrientDB a matsayin SQL tare da abubuwan da ake sakawa irin na Gremlin. A cikin sigar 2.2, wani tsari mai kama da Cypher ya bayyana, 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

Tsarin sakamako zai kasance iri ɗaya da na buƙatun baya. Yi tunani game da abin da ake buƙatar cirewa don ƙara zama "dangantaka", kamar a cikin ainihin tambayar farko.

Azure CosmosDB

A ɗan ƙarami, abin da aka faɗa a sama game da ArangoDB da OrientDB ya shafi Azure CosmosDB. CosmosDB yana samar da APIs masu zuwa samun damar bayanai: SQL, MongoDB, Gremlin da Cassandra.

Ana amfani da SQL API da MongoDB API don samun damar bayanai a cikin tsarin daftarin aiki. Gremlin API da Cassandra API - don samun damar bayanai a cikin jadawali da tsarin shafi, bi da bi. Ana adana bayanai a cikin duk samfuran a cikin tsarin ƙirar ciki na CosmosDB: ARS ("atom-record-sequence"), wanda kuma yana kusa da daftarin aiki daya.

Shin DBMSs masu yawa ne tushen tsarin bayanai na zamani?

Amma samfurin bayanan da mai amfani ya zaɓa da API ɗin da aka yi amfani da su an gyara su a lokacin ƙirƙirar asusu a cikin sabis ɗin. Ba zai yiwu a sami damar shiga bayanan da aka ɗora a cikin samfuri ɗaya a cikin wani tsarin wani ba, kamar yadda wani abu kamar haka ya kwatanta:

Shin DBMSs masu yawa ne tushen tsarin bayanai na zamani?

Don haka, samfura da yawa a cikin Azure CosmosDB a yau shine kawai ikon yin amfani da bayanan bayanai da yawa waɗanda ke tallafawa nau'ikan samfura daban-daban daga masana'anta ɗaya, wanda baya magance duk matsalolin ma'ajin bambance-bambancen.

Multi-samfurin DBMS dangane da samfurin jadawali?

Abin lura shine gaskiyar cewa babu DBMSs masu yawa akan kasuwa har yanzu waɗanda suka dogara akan ƙirar jadawali (sai dai tallafin ƙirar ƙira don nau'ikan jadawali biyu lokaci guda: RDF da LPG; duba wannan a cikin bugu na baya). Mafi girman matsalolin ana haifar da su ta hanyar aiwatar da samfurin takarda a saman samfurin jadawali, maimakon na alaƙa.

Tambayar yadda za a aiwatar da samfurin dangantaka a saman samfurin jadawali an yi la'akari da shi ko da lokacin da aka kafa na ƙarshe. Yaya ya yi maganamisali David McGovern:

Babu wani abu mai mahimmanci a cikin tsarin jadawali wanda ke hana ƙirƙirar Layer (misali, ta hanyar ƙididdigewa mai dacewa) akan bayanan hoto wanda ke ba da damar ra'ayi mai alaƙa tare da (1) dawo da tuples daga maɓalli na maɓalli na yau da kullun da (2) haɗawa tuples ta nau'in dangantaka.

Lokacin aiwatar da samfurin daftarin aiki a saman samfurin jadawali, kuna buƙatar tunawa, misali, masu zuwa:

  • An yi la'akari da abubuwan tsararrun JSON da aka yi oda, amma waɗanda ke fitowa daga ƙarshen jadawali ba;
  • Bayanan da ke cikin tsarin takaddun yawanci ba su da kyau; har yanzu ba kwa son adana kwafi da yawa na takaddun da aka haɗa, kuma ƙananan takardu yawanci ba su da masu ganowa;
  • A gefe guda, akidar daftarin aiki DBMSs shine cewa takardu shirye-shirye ne “aggregates” waɗanda ba sa buƙatar sake ginawa kowane lokaci. Ana buƙatar don samar da samfurin jadawali tare da ikon samun saurin samun juzu'i mai dacewa da takaddun da aka gama.

Talla kadan

Marubucin labarin yana da alaƙa da ci gaban NitrosBase DBMS, ƙirar ciki wanda shine jadawali, kuma samfuran waje - alaƙa da daftarin aiki - sune wakilcin sa. Duk samfuran daidai suke: kusan kowane bayanai yana samuwa a cikin kowannensu ta amfani da yaren tambaya wanda ya dace da shi. Bugu da ƙari, a kowane ra'ayi, ana iya canza bayanan. Canje-canje za a nuna a cikin ƙirar ciki kuma, bisa ga haka, a wasu ra'ayoyi.

Ina fatan zan bayyana yadda tsarin daidaitawa yayi kama da NitrosBase a cikin ɗayan labarai masu zuwa.

ƙarshe

Ina fata gabaɗaya taswirar abin da ake kira Multi-modeling sun zama ko kaɗan ga mai karatu. Multi-model DBMSs sun bambanta sosai, kuma "tallafin samfuri da yawa" na iya bambanta. Don fahimtar abin da ake kira "multi-model" a kowane takamaiman yanayi, yana da amfani a amsa tambayoyin da ke gaba:

  1. Shin muna magana ne game da tallafawa ƙirar gargajiya ko wani nau'in samfurin "matasan"?
  2. Shin samfuran "daidai ne", ko ɗaya daga cikinsu shine batun sauran?
  3. Shin samfuran "ba su da sha'awa" ga juna? Za a iya karanta bayanan da aka rubuta a cikin samfurin ɗaya a wani ko ma a sake rubutawa?

Ina tsammanin cewa tambaya game da dacewa da nau'in DBMS da yawa za a iya riga an amsa su da kyau, amma tambaya mai ban sha'awa ita ce wane nau'i na su zai fi dacewa a nan gaba. Da alama DBMSs masu yawa waɗanda ke goyan bayan ƙirar gargajiya, da farko na alaƙa, za su kasance cikin buƙata mafi girma; Shahararrun nau'ikan DBMSs masu yawa, suna ba da sabbin samfura waɗanda suka haɗa fa'idodin na gargajiya daban-daban, al'amari ne na gaba mai nisa.

Masu amfani da rajista kawai za su iya shiga cikin binciken. Shigadon Allah.

Kuna amfani da DBMS-samfuri masu yawa?

  • Ba mu yi amfani da shi ba, muna adana duk abin da ke cikin DBMS ɗaya kuma a cikin tsari ɗaya

  • Muna amfani da damar samfura da yawa na DBMSs na gargajiya

  • Muna aiwatar da dagewar polyglot

  • Muna amfani da sabon nau'in DBMS da yawa (Arango, Orient, CosmosDB)

19 masu amfani sun kada kuri'a. Masu amfani 4 sun kaurace.

source: www.habr.com

Add a comment