Na li-DBMS tsa mefuta e mengata ke motheo oa litsamaiso tsa sejoale-joale tsa tlhahisoleseling?

Mekhoa ea morao-rao ea boitsebiso e rarahane haholo. Ha e le hantle, ho rarahana ha tsona ho bakoa ke ho rarahana ha data e sebetsitsoeng ho tsona. Hangata ho rarahana ha data ho itšetlehile ka mefuta e sa tšoaneng ea data e sebelisoang. Kahoo, ka mohlala, ha data e fetoha "e kholo", e 'ngoe ea litšobotsi tse nang le bothata hase feela molumo oa eona ("volume"), empa hape le mefuta e sa tšoaneng ("mefuta").

Haeba ha u e-so fumane phoso ea ho beha mabaka, bala pele.

Na li-DBMS tsa mefuta e mengata ke motheo oa litsamaiso tsa sejoale-joale tsa tlhahisoleseling?


Tse ka hare

Ho phehella ha Polyglot
Mehlala e mengata
DBMS ea mefuta e mengata e thehiloeng ho mohlala oa likamano
     Mohlala oa litokomane ho MS SQL Server
     Mohlala oa kerafo ho MS SQL Server
DBMS ea mefuta e mengata e thehiloeng ho mofuta oa tokomane
     Mohlala oa likamano ho MarkLogic
     Mohlala oa kerafo ho MarkLogic
DBMS ea mefuta e mengata "ntle le mohlala o ka sehloohong"
     ArangoDB
     OrientDB
     Azure CosmosDB
DBMS ea mefuta e mengata e thehiloeng ho mohlala oa graph?
fihlela qeto e
Poll

Ho phehella ha Polyglot

Lintlha tse ka holimo li lebisa tabeng ea hore ka linako tse ling esita le ka har'a moralo oa tsamaiso e le 'ngoe ho hlokahala hore u sebelise li-DBMS tse' maloa tse fapaneng ho boloka lintlha le ho rarolla mathata a sa tšoaneng a ho li sebetsana, e 'ngoe le e' ngoe e tšehetsang mohlala oa eona oa data. Ka letsoho le khanyang la M. Fowler, mongoli libuka tse ngata tse tummeng le e 'ngoe ea bangodi mmoho Agile Manifesto, boemo bona bo bitsoa polokelo ea mefuta e mengata ("polyglot persistence").

Fowler o boetse o na le mohlala o latelang oa ho hlophisa polokelo ea data ka ts'ebeliso e felletseng le e boima haholo lefapheng la khoebo ea e-commerce.

Na li-DBMS tsa mefuta e mengata ke motheo oa litsamaiso tsa sejoale-joale tsa tlhahisoleseling?

Mohlala ona, ehlile, o fetelletse, empa lintlha tse ling molemong oa ho khetha DBMS e le 'ngoe bakeng sa morero o lumellanang li ka fumanoa, mohlala, mona.

Ho hlakile hore ho ba mosebeletsi serapeng sa liphoofolo tse joalo ha ho bonolo.

  • Palo ea khoutu e etsang polokelo ea data e ntse e hōla ho ea ka palo ea DBMS e sebelisoang; palo ea data synchronizing ya khoutu e ntle haeba e sa lekane le sekwere sa palo ena.
  • E le palo e ngata ea li-DBMS tse sebelisitsoeng, litšenyehelo tsa ho fana ka litšobotsi tsa khoebo (scalability, ho mamella liphoso, ho fumaneha ho phahameng) ea e 'ngoe le e' ngoe ea DBMS e sebelisitsoeng e eketseha.
  • Ha ho khonehe ho netefatsa litšobotsi tsa khoebo tsa subsystem ea polokelo ka kakaretso - haholo-holo transactional.

Ho ea ka pono ea motsamaisi oa zoo, ntho e 'ngoe le e' ngoe e shebahala tjena:

  • Keketseho e ngata ea litšenyehelo tsa laesense le tšehetso ea tekheniki ho tsoa ho moetsi oa DBMS.
  • Mosebetsi o mongata le ho eketseha ha linako tse behiloeng.
  • Litahlehelo tse tobileng tsa lichelete kapa likotlo ka lebaka la ho se lumellane ha data.

Ho na le keketseho e kholo ho kakaretso ea litšenyehelo tsa thepa ea tsamaiso (TCO). Na ho na le tsela ea ho tsoa boemong ba "likhetho tse ngata tsa polokelo"?

Mehlala e mengata

Lentsoe "polokelo ea li-multivariate" le qalile ho sebelisoa ka 2011. Ho lemoha mathata a mokhoa ona le ho batla tharollo ho ile ha nka lilemo tse 'maloa,' me ka 2015, ka melomo ea bahlahlobisisi ba Gartner, karabo e ile ea etsoa:

Ho bonahala eka lekhetlong lena bahlahlobisisi ba Gartner ba ne ba nepile ka ponelopele ea bona. Haeba u ea leqepheng le tekanyo e ka sehloohong DBMS ho DB-Engines, u ka bona seoоBoholo ba baetapele ba eona ba ipeha ka ho khetheha e le li-DBMS tsa mefuta e mengata. Se tšoanang se ka bonoa leqepheng le nang le lintlha tsa poraefete.

Tafole e ka tlase e bonts'a DBMS - baetapele ho e 'ngoe le e' ngoe ea litekanyetso tsa poraefete, tse ipolelang hore ke tsa mefuta e mengata. Bakeng sa DBMS e 'ngoe le e' ngoe, ho bontšoa mohlala oa pele o tšehetsoeng (oo e kileng ea e-ba oona feela) 'me hammoho le oona mefuta e tšehetsoeng hona joale e bontšitsoe. Hape ho thathamisitsoe li-DBMS tse ipehang e le "mofuta oa pele oa mefuta e mengata" 'me, ho ea ka baqapi, ha ba na mohlala oa pele o futsitsoeng.

DBMSMohlala oa peleMehlala ea tlatsetso
oracleKamanoKerafo, tokomane
MS SQLKamanoKerafo, tokomane
PostgreSQLKamanoKerafo*, tokomane
MarkLogicLitokomaneKerafo, kamano
MongoDBLitokomaneBoleng ba bohlokoa, kerafo*
DataStaxKholomo e pharaletsengDocumentary, kerafo
RedisBoleng ba bohlokoaDocumentary, kerafo*
ArangoDB-Kerafo, tokomane
OrientDB-Kerafo, tokomane, kamano
Azure CosmosDB-Kerafo, tokomane, kamano

Lintlha tse holim'a tafole

Linaleli tse ka har'a tafole li tšoaea lipolelo tse hlokang lipehelo:

  • PostgreSQL DBMS ha e tšehetse mofuta oa data oa graph, empa sehlahisoa sena sea e tšehetsa e thehiloeng ho eona, joalo ka AgensGraph.
  • Mabapi le MongoDB, ho nepahetse ho bua ka boteng ba basebelisi ba graph ka puo ea lipotso ($lookup, $graphLookup) ho feta mabapi le ho tšehetsa mohlala oa graph, le hoja, ehlile, kenyelletso ea bona e ne e hloka hore ho be le ntlafatso e itseng boemong ba polokelo ea 'mele ka lehlakoreng la ho tšehetsa mohlala oa graph.
  • Mabapi le Redis, re bolela katoloso RedisGraph.

Ka mor'a moo, bakeng sa e 'ngoe le e' ngoe ea lihlopha, re tla bontša kamoo tšehetso ea mefuta e mengata e sebelisoang kateng ho DBMS ho tloha sehlopheng sena. Re tla nka mehlala ea likamano, litokomane le li-graph e le tsa bohlokoa ka ho fetisisa le ho sebelisa mehlala ea li-DBMS tse khethehileng ho bontša kamoo "tse sieo" li kenngoa ts'ebetsong.

DBMS ea mefuta e mengata e thehiloeng ho mohlala oa likamano

Li-DBMS tse etelletseng pele hajoale li amana; Polelo ea Gartner e ne e ke ke ea nkuoa e le 'nete haeba li-RDBMS li sa bonts'e motsamao ho ea ho mefuta e mengata. 'Me ba bontša. Hona joale khopolo ea hore DBMS ea mefuta e mengata e tšoana le thipa ea Switzerland, e ke keng ea etsa letho hantle, e ka lebisoa ka ho toba ho Larry Ellison.

Leha ho le joalo, mongoli o khetha ho kenya ts'ebetsong ea mekhoa e mengata ho Microsoft SQL Server, ka mohlala oo tšehetso ea RDBMS bakeng sa mehlala ea litokomane le li-graph e tla hlalosoa.

Mohlala oa litokomane ho MS SQL Server

Ho se ho bile le lingoloa tse peli tse ntle haholo mabapi le Habré mabapi le hore na MS SQL Server e sebelisa ts'ehetso ea mofuta oa tokomane joang; Ke tla ipehela ho pheta-pheta le litlhaloso tse khutšoane:

Mokhoa oa ho ts'ehetsa mofuta oa tokomane ho MS SQL Server o tloaelehile haholo bakeng sa li-DBMS tsa kamano: Litokomane tsa JSON li reretsoe ho bolokoa libakeng tse tloaelehileng tsa mongolo. Ts'ehetso ea mofuta oa tokomane ke ho fana ka basebelisi ba khethehileng ho hlalosa JSON ena:

Khang ea bobeli ea basebelisi ka bobeli ke polelo ho syntax e kang ea JSONPath.

Ka mokhoa o hlakileng, re ka re litokomane tse bolokiloeng ka tsela ena ha se "mekhatlo ea pele" ho DBMS e amanang, ho fapana le li-tuples. Haholo-holo, ho MS SQL Server ha joale ha ho na li-index masimong a litokomane tsa JSON, e leng se etsang hore ho be thata ho kopanya litafole ho sebelisa boleng ba likarolo tsena esita le ho khetha litokomane tse sebelisang litekanyetso tsena. Leha ho le joalo, hoa khoneha ho theha kholomo e baloang bakeng sa tšimo e joalo le index ho eona.

Ho feta moo, MS SQL Server e fana ka bokhoni ba ho etsa tokomane ea JSON habonolo ho tsoa ho litafole u sebelisa opareitara. FOR JSON PATH - monyetla, ka tsela e itseng, ho fapana le e fetileng, polokelo e tloaelehileng. Ho hlakile hore ho sa tsotelehe hore na RDBMS e potlakile hakae, mokhoa ona o hanana le mohopolo oa litokomane tsa DBMS, tseo ha e le hantle li bolokang likarabo tse lokiselitsoeng lipotsong tse tsebahalang, 'me li ka rarolla mathata a boiketlo ba nts'etsopele, empa eseng lebelo.

Qetellong, MS SQL Server e u lumella ho rarolla bothata bo fapaneng ba kaho ea litokomane: o ka senya JSON ka litafole u sebelisa OPENJSON. Haeba tokomane e sa bataletse ka ho feletseng, u tla hloka ho e sebelisa CROSS APPLY.

Mohlala oa kerafo ho MS SQL Server

Tšehetso ea mohlala oa kerafo (LPG) e boetse e kengoa tšebetsong ka botlalo ho Microsoft SQL Server lebelloang: Ho khothaletsoa ho sebelisa litafole tse khethehileng ho boloka li-node le ho boloka lithako tsa graph. Litafole tse joalo li entsoe ho sebelisoa lipolelo CREATE TABLE AS NODE и CREATE TABLE AS EDGE ho latela.

Litafole tsa mofuta oa pele li tšoana le litafole tse tloaelehileng tsa ho boloka lirekoto, ka phapang e le 'ngoe feela ea kantle ke hore tafole e na le tšimo ea sistimi. $node_id - sekhetho se ikhethileng sa node ea graph ka har'a database.

Ka mokhoa o ts'oanang, litafole tsa mofuta oa bobeli li na le masimo a tsamaiso $from_id и $to_id, likenyo tsa litafole tse joalo li hlalosa ka ho hlaka likamano lipakeng tsa li-node. Tafole e arohaneng e sebelisoa ho boloka likamano tsa mofuta o mong le o mong.

Na li-DBMS tsa mefuta e mengata ke motheo oa litsamaiso tsa sejoale-joale tsa tlhahisoleseling? A re bontšeng sena ka mohlala. Etsa hore data ea graph e be le sebopeho se kang se bontšitsoeng setšoantšong. Ebe ho theha sebopeho se tsamaellanang ho database o hloka ho tsamaisa lipotso tse latelang tsa 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);

Taba ea mantlha ea litafole tse joalo ke hore lipotsong tse khahlano le bona ho ka sebelisoa lipaterone tsa graph ka li-syntax tse kang Cypher (leha ho le joalo, "*"joalo-joalo ha li so tšehetsoe). Ho ipapisitsoe le litekanyo tsa ts'ebetso, ho ka nahanoa hape hore tsela eo data e bolokiloeng ka eona litafoleng tsena e fapane le tsela eo data e bolokoang ka eona litafoleng tse tloaelehileng mme e ntlafalitsoe bakeng sa ho etsa lipotso tse joalo tsa kerafo.

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

Ho feta moo, ho thata haholo ho se sebelise mekhoa ena ea li-graph ha u sebetsa le litafole tse joalo, kaha lipotsong tse tloaelehileng tsa SQL ho rarolla mathata a tšoanang ho tla hlokahala ho etsa boiteko bo eketsehileng ba ho fumana li-identifiers tsa "graph" tsa "graph" system.$node_id, $from_id, $to_id; Ka lebaka le tšoanang, lipotso tsa ho kenya data ha li bontšoe mona kaha li boima ho sa hlokahale).

Ho akaretsa tlhaloso ea ts'ebetsong ea tokomane le mehlala ea kerafo ho MS SQL Server, ke tla hlokomela hore ts'ebetsong e joalo ea mohlala o mong holim'a e 'ngoe ha e bonahale eka e atlehile, haholo-holo ho tloha ponong ea moralo oa puo. Hoa hlokahala ho atolosa puo e 'ngoe le e' ngoe, lipuo ha li "orthogonal" ka ho feletseng, melao ea ho lumellana e ka ba e makatsang haholo.

DBMS ea mefuta e mengata e thehiloeng ho mofuta oa tokomane

Karolong ena, ke rata ho bontša ts'ebetsong ea mefuta e mengata ea li-DBMS tsa litokomane ke sebelisa mohlala oa tse sa tsejoeng ka ho fetisisa ho tsona, MongoDB (joalokaha ho boletsoe, e na le li-graph operators tse nang le maemo. $lookup и $graphLookup, ha e sebetse ka likoleke tse sharded), empa ho sebelisa mohlala oa DBMS e hōlileng tsebong le ea "khoebo" MarkLogic.

Kahoo, tlohella pokello e be le sete ea litokomane tsa XML tsa mofuta o latelang (MarkLogic e boetse e u lumella ho boloka litokomane tsa JSON):

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

Mohlala oa likamano ho MarkLogic

Pono ea kamano ea pokello ea litokomane e ka etsoa ho sebelisoa template e bonts'ang (likahare tsa likarolo value mohlala o ka tlase ho ka ba le XPath e sa sebetseng):

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

U ka sebetsana le pono e entsoeng ka potso ea SQL (mohlala, ka ODBC):

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

Ka bomalimabe, pono ea kamano e entsoeng ke template ea ponts'o ke ea ho bala feela. Ha o sebetsana le kopo ea eona, MarkLogic e tla leka ho e sebelisa li-index tsa litokomane. Pejana, MarkLogic e ne e na le maikutlo a fokolang a kamano, ka botlalo index e thehiloeng ebile lia ngoloa, empa joale li nkuoa li sa sebelisoe.

Mohlala oa kerafo ho MarkLogic

Ka tšehetso ea mohlala oa graph (RDF), ntho e 'ngoe le e' ngoe e batla e tšoana. Hape ka thuso template e bonts'ang o ka theha setšoantšo sa RDF sa pokello ea litokomane ho tsoa mohlaleng o kaholimo:

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

O ka sebetsana le graph ea RDF e hlahisitsoeng ka potso ea SPARQL:

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

Ho fapana le ea kamano, MarkLogic e tšehetsa mohlala oa graph ka litsela tse ling tse peli:

  1. DBMS e ka ba polokelo e felletseng e felletseng ea data ea RDF (lintlha tse tharo ho eona li tla bitsoa o ile a khona ho fapana le tse hlalositsoeng ka holimo tlotsoa).
  2. RDF ka serialization e khethehileng e ka kenngoa feela litokomaneng tsa XML kapa JSON ('me joale li-triplets li tla bitsoa sa laoloe). Mohlomong ena ke mokhoa o mong oa mekhoa idref le ba bang.

Mohopolo o motle oa hore na lintho "ehlile" li sebetsa joang ho MarkLogic e fanoa ke Optical API, ka kutloisiso ena, ke boemo bo tlaase, le hoja morero oa eona e le ho fapana le hoo - ho leka ho itokolla ho mohlala oa data o sebelisitsoeng, ho etsa bonnete ba hore mosebetsi o lumellanang le data ka mefuta e fapaneng, transactional, joalo-joalo.

DBMS ea mefuta e mengata "ntle le mohlala o ka sehloohong"

Ho boetse ho na le li-DBMS 'marakeng tse ipehang joalo ka mefuta e mengata ea pele, ntle le mofuta oa mantlha o futsitsoeng. Tsena li kenyelletsa ArangoDB, OrientDB (ho tloha 2018 k'hamphani ea nts'etsopele ke ea SAP) le CosmosDB (tšebeletso e le karolo ea sethala sa maru sa Microsoft Azure).

Ebile, ho na le mefuta ea "core" ho ArangoDB le OrientDB. Maemong ana ka bobeli, tsena ke mehlala ea bona ea data, e leng kakaretso ea tokomane e le 'ngoe. Kakaretso ke ho thusa haholo bokhoni ba ho etsa lipotso tsa graph le kamano.

Mefuta ena ke eona feela e fumanehang bakeng sa ho sebelisoa ho DBMS e boletsoeng; lipuo tsa bona tsa lipotso li etselitsoe ho sebetsa le tsona. Ha e le hantle, mehlala e joalo le li-DBMS lia tšepisa, empa ho se lumellane le mehlala le lipuo tse tloaelehileng ho etsa hore ho se ke ha khoneha ho sebelisa li-DBMS tsena tsamaisong ea lefa-ho nka sebaka sa DBMS e seng e ntse e sebelisoa moo.

Ho ne ho se ho ntse ho e-na le sengoloa se monate ka ArangoDB le OrientDB ho Habré: KENYA ka har'a database tsa NoSQL.

ArangoDB

ArangoDB e batla tšehetso bakeng sa mohlala oa data oa graph.

Li-node tsa graph ho ArangoDB ke litokomane tse tloaelehileng, 'me metse e ka thōko ke litokomane tsa mofuta o khethehileng oo, hammoho le masimo a tloaelehileng a tsamaiso, a nang le (_key, _id, _rev) masimo a tsamaiso _from и _to. Litokomane tse litokomaneng tsa DBMS li kopanngoa ka tloaelo ho ba likoleke. Lipokello tsa litokomane tse emelang methati li bitsoa pokello ea moeli ho ArangoDB. Ka tsela, litokomane tsa pokello ea moeli le tsona ke litokomane, kahoo lithako ho ArangoDB le tsona li ka sebetsa joalo ka li-node.

Lintlha tsa pele

A re beng le pokello persons, bao litokomane tsa bona li shebahalang tjena:

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

Hape ho ke ho be le pokello cafes:

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

Ebe pokello likes e ka shebahala tjena:

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

Lipotso le liphetho

Potso ea mofuta oa kerafo ka puo ea AQL e sebelisitsoeng ho ArangoDB, e khutlisetsang tlhaiso-leseling e baloang ke batho mabapi le hore na ke mang ea ratang k'hefi efe, e shebahala tjena:

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

Ka mokhoa oa kamano, moo re "khomphutha" likamano ho e-na le ho li boloka, potso ena e ka ngoloa hape ka tsela ena (ka tsela, ntle le pokello. likes e ka etsa ntle 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 }

Sephetho maemong ka bobeli se tla tšoana:

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

Lipotso le liphetho tse ling

Haeba sebopeho sa sephetho se kaholimo se bonahala se tloaelehile haholo bakeng sa DBMS ea kamano ho feta tokomane ea DBMS, u ka leka potso ena (kapa u ka e sebelisa. COLLECT):

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

Sephetho se tla shebahala tjena:

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

OrientDB

Motheo oa ho kenya tšebetsong mohlala oa graph holim'a mohlala oa tokomane ho OrientDB ke monyetla masimo a litokomane, ntle le litekanyetso tse tloaelehileng tsa scalar, le tsona li na le boleng ba mefuta e joalo LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. Boleng ba mefuta ena ke lihokela kapa pokello ea lihokelo tsa li-identifiers tsa tsamaiso litokomane.

Setsebi sa tokomane se fanoeng ke sistimi se na le "moelelo oa 'mele", se bonts'ang boemo ba rekoto sebakeng sa polokelo ea litaba,' me se shebahala tjena: @rid : #3:16. Kahoo, boleng ba thepa ea litšupiso ehlile ke lisupa (joalo ka mohlala oa graph) ho fapana le maemo a khetho (joalo ka mohlala oa kamano).

Joalo ka ArangoDB, likhahla tsa OrientDB li emeloa e le litokomane tse arohaneng (le hoja moeli o se na thepa ea ona, o ka etsoa. e bobebe, 'me e ke ke ea lumellana le tokomane e fapaneng).

Lintlha tsa pele

Ka sebopeho se haufi le mokhoa oa ho lahla OrientDB database, lintlha tse tsoang mohlaleng o fetileng oa ArangoDB li ne li tla shebahala tjena:

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

Joalo ka ha re bona, li-vertices le tsona li boloka tlhahisoleseling mabapi le mapheo a kenang le a tsoang. Ho sebedisa Tokomane ea API e tlameha ho beha leihlo botšepehi ba boits'oaro ka boeona, 'me Graph API e nka mosebetsi ona. Empa ha re boneng hore na phihlello ea OrientDB e shebahala joang ka lipuo tse "hloekileng" tse sa kenyelletsoeng lipuong tsa mananeo.

Lipotso le liphetho

Potso e tšoanang ka sepheo le potso e tsoang ho mohlala oa ArangoDB ho OrientDB e shebahala tjena:

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

Sephetho se tla fumanoa ka foromo e latelang:

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

Haeba sebopeho sa sephetho se bonahala se le "kamano", o hloka ho tlosa mohala ka UNWIND():

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

Puo ea potso ea OrientDB e ka hlalosoa e le SQL e nang le lintlha tse kang Gremlin. Ho mofuta oa 2.2, ho ile ha hlaha foromo ea kopo e kang 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

Sebopeho sa sephetho se tla tšoana le kopo e fetileng. Nahana ka se lokelang ho tlosoa ho etsa hore e be "kamano", joalo ka potso ea pele.

Azure CosmosDB

Ho isa bohōleng bo fokolang, se boletsoeng ka holimo ka ArangoDB le OrientDB se sebetsa ho Azure CosmosDB. CosmosDB e fana ka li-API tsa phihlello ea data tse latelang: SQL, MongoDB, Gremlin le Cassandra.

SQL API le MongoDB API li sebelisoa ho fumana data ka mokhoa oa tokomane. Gremlin API le Cassandra API - bakeng sa ho fihlella data ka liforomo tsa graph le kholomo, ka ho latellana. Lintlha tsa mefuta eohle li bolokiloe ka mokhoa oa ka hare oa CosmosDB: ARS (“atom-record-sequence”), e leng haufi le tokomane ea pele.

Na li-DBMS tsa mefuta e mengata ke motheo oa litsamaiso tsa sejoale-joale tsa tlhahisoleseling?

Empa mohlala oa data o khethiloeng ke mosebelisi le API e sebelisitsoeng e tsitsitsoe ka nako ea ho theha ak'haonte ts'ebeletso. Ha ho khonehe ho fihlella data e kentsoeng mofuteng o le mong ka sebopeho sa mofuta o mong, joalo ka ha ho bonts'itsoe ke ntho e kang ena:

Na li-DBMS tsa mefuta e mengata ke motheo oa litsamaiso tsa sejoale-joale tsa tlhahisoleseling?

Ka hona, mefuta e mengata ea Azure CosmosDB kajeno ke bokhoni ba ho sebelisa li-database tse 'maloa tse tšehetsang mefuta e fapaneng ea moetsi a le mong, e sa rarolle mathata ohle a polokelo ea mefuta e mengata.

DBMS ea mefuta e mengata e thehiloeng ho mohlala oa graph?

Ho hlokomelehang ke taba ea hore ha ho na li-DBMS tsa mefuta e mengata 'marakeng empa li ipapisitse le mohlala oa graph (ntle le tšehetso ea mefuta e mengata bakeng sa mefuta e' meli ea li-graph: RDF le LPG; bona sena ho phatlalatso e fetileng). Mathata a maholo ka ho fetisisa a bakoa ke ts'ebetsong ea mohlala oa litokomane holim'a setšoantšo sa kerafo, ho e-na le kamano.

Potso ea mokhoa oa ho kenya ts'ebetsong mohlala oa kamano holim'a setšoantšo sa graph e ne e nkoa esita le nakong ea ho thehoa ha morao. Joang builemohlala David McGovern:

Ha ho na letho le amanang le mokhoa oa graph le thibelang ho theha lera (mohlala, ka indexing e loketseng) ho database ea graph e lumellang pono ea kamano le (1) ho hlaphoheloa ha li-tuples ho tsoa ho lipara tse tloaelehileng tsa bohlokoa le (2) li-tuples ka mofuta oa kamano.

Ha u sebelisa mohlala oa tokomane ka holim'a mohlala oa graph, u lokela ho hopola, mohlala, tse latelang:

  • Lintlha tsa sehlopha sa JSON li nkuoa li laetsoe, empa tse tsoang vertex ea moeli oa kerafo ha li joalo;
  • Lintlha tsa mofuta oa tokomane hangata li entsoe ka mokhoa o sa tloaelehang; u ntse u sa batle ho boloka likopi tse 'maloa tsa tokomane e le 'ngoe e kentsoeng,' me litokomane tse nyane hangata ha li na li-identifiers;
  • Ka lehlakoreng le leng, khopolo ea litokomane tsa DBMS ke hore litokomane li itokiselitse "li-aggregates" tse sa hlokeng ho hahoa bocha nako le nako. Hoa hlokahala ho fana ka mohlala oa graph ka bokhoni ba ho fumana kapele subgraph e lumellanang le tokomane e phethiloeng.

Papatso e nyane

Mongoli oa sengoloa o amana le nts'etsopele ea NitrosBase DBMS, mohlala oa ka hare ke graph, le mehlala ea kantle - kamano le tokomane - ke liemeli tsa eona. Mefuta eohle e lekana: hoo e batlang e le data leha e le efe e fumaneha ho e 'ngoe ea tsona e sebelisa puo ea lipotso e tloaelehileng ho eona. Ho feta moo, ka pono efe kapa efe, data e ka fetoloa. Liphetoho li tla bonahala ka mokhoa oa ka hare 'me, ka hona, ka maikutlo a mang.

Ka tšepo ke tla hlalosa hore na ho bapisa mohlala ho shebahala joang ho NitrosBase ho se seng sa lihlooho tse latelang.

fihlela qeto e

Ke tšepa hore litlhaloso tse akaretsang tsa seo ho thoeng ke mekhoa e mengata li se li hlakile ho 'mali. Li-DBMS tsa mefuta e mengata li fapane haholo, 'me "tšehetso ea mefuta e mengata" e ka shebahala e fapane. Ho utloisisa se bitsoang "multi-model" boemong bo bong le bo bong, ho molemo ho araba lipotso tse latelang:

  1. Na re bua ka ho tšehetsa mehlala ea setso kapa mofuta o itseng oa "hybrid"?
  2. Na mehlala e "lekana", kapa na e 'ngoe ea tsona ke taba ea tse ling?
  3. Na mehlala "ha e tsotelle" e mong ho e mong? Na lintlha tse ngotsoeng ka mokhoa o le mong li ka baloa ho tse ling kapa tsa ngoloa?

Ke nahana hore potso e mabapi le bohlokoa ba DBMS ea mefuta e mengata e se e ntse e ka arajoa ka mokhoa o nepahetseng, empa potso e thahasellisang ke hore na ke mefuta efe ea bona e tla ba teng ho feta nakong e tlang. Ho bonahala eka li-DBMS tsa mefuta e mengata tse tšehetsang mehlala ea setso, haholo-holo likamano, li tla ba le tlhokahalo e kholoanyane; Ho tsebahala ha mefuta e mengata ea DBMS, ho fana ka mehlala e mecha e kopanyang melemo ea mefuta e sa tšoaneng ea setso, ke taba ea bokamoso bo hōle haholo.

Ke basebelisi ba ngolisitsoeng feela ba ka kenyang letsoho phuputsong. kenaka kopo.

Na u sebelisa DBMS ea mefuta e mengata?

  • Ha re e sebelise, re boloka ntho e 'ngoe le e' ngoe ka DBMS e le 'ngoe le ka mohlala o le mong

  • Re sebelisa bokhoni ba mefuta e mengata ea li-DBMS tsa setso

  • Re itloaetsa ho phehella ha polyglot

  • Re sebelisa DBMS e ncha ea mefuta e mengata (Arango, Orient, CosmosDB)

Basebelisi ba 19 ba ile ba khetha. Basebelisi ba 4 ba hanne.

Source: www.habr.com

Eketsa ka tlhaloso