ʻO nā DBMS mau kumu hoʻohālike ke kumu o nā ʻōnaehana ʻike hou?

Paʻakikī loa nā ʻōnaehana ʻike hou. ʻAʻole ka mea liʻiliʻi loa, ʻo kā lākou paʻakikī ma muli o ka paʻakikī o ka ʻikepili i hana ʻia i loko o lākou. Aia ka paʻakikī o ka ʻikepili i nā ʻano hiʻohiʻona ʻikepili i hoʻohana ʻia. No laila, no ka laʻana, ke lilo ka ʻikepili i "nui", ʻo kekahi o nā hiʻohiʻona pilikia ʻaʻole wale kona leo ("volume"), akā ʻo kona ʻano ("ʻano").

Inā ʻaʻole ʻoe e ʻike i kahi hemahema o ka noʻonoʻo, a laila e heluhelu.

ʻO nā DBMS mau kumu hoʻohālike ke kumu o nā ʻōnaehana ʻike hou?


Nā mea

Polyglot hoomau
Hoʻohālike nui
ʻO DBMS hoʻohālike nui ma muli o ke kumu hoʻohālike pili
     Hoʻohālike palapala ma MS SQL Server
     Hoʻohālike kiʻi ma MS SQL Server
ʻO DBMS kumu hoʻohālike he nui ma muli o ke kumu hoʻohālike palapala
     Hoʻohālike pili i MarkLogic
     Hoʻohālike kiʻi ma MarkLogic
ʻO DBMS mau hiʻohiʻona "me ka ʻole kumu hoʻohālike"
     ArangoDB
     OrientDB
     ʻO Azure CosmosDB
ʻO DBMS mau-hoʻohālike ma muli o ke kumu hoʻohālike?
hopena
Pākuʻi

Polyglot hoomau

ʻO ka mea i luna e alakaʻi i ka ʻoiaʻiʻo i kekahi manawa i loko o ka ʻōnaehana o hoʻokahi ʻōnaehana pono e hoʻohana i nā DBMS like ʻole e mālama i ka ʻikepili a hoʻoponopono i nā pilikia like ʻole o ka hoʻoponopono ʻana iā lākou, kākoʻo kēlā me kēia i kāna kumu hoʻohālike ponoʻī. Me ka lima mama o M. Fowler, ka mea kākau he mau puke kaulana a me kekahi o nā hoa kākau ʻO Agile Manifesto, kapa ʻia kēia kūlana waihona ʻokoʻa nui (“polyglot persistence”).

Loaʻa iā Fowler kēia hiʻohiʻona o ka hoʻonohonoho ʻana i ka mālama ʻana i ka ʻikepili i kahi noi piha a me ka haʻahaʻa kiʻekiʻe ma ke kahua o ka e-commerce.

ʻO nā DBMS mau kumu hoʻohālike ke kumu o nā ʻōnaehana ʻike hou?

ʻO kēia hiʻohiʻona, ʻoiaʻiʻo, ua hoʻonui ʻia, akā hiki ke loaʻa kekahi mau manaʻo no ke koho ʻana i kekahi a i ʻole kekahi DBMS no ke kumu kūpono, no ka laʻana, maanei.

He mea maopopo, ʻaʻole maʻalahi ka lilo ʻana i kauā ma ia zoo.

  • ʻO ka nui o ke code e hana ana i ka mālama ʻana i ka ʻikepili e ulu aʻe i ka nui o nā DBMS i hoʻohana ʻia; maikaʻi ka nui o ka ʻikepili synchronizing code inā ʻaʻole kūlike i ka huinahā o kēia helu.
  • Ma ke ʻano he nui o ka helu o nā DBMS i hoʻohana ʻia, hoʻonui nā kumukūʻai o ka hāʻawi ʻana i nā ʻano ʻoihana (scalability, hoʻomanawanui hewa, loaʻa kiʻekiʻe) o kēlā me kēia DBMS i hoʻohana ʻia.
  • ʻAʻole hiki ke hōʻoia i nā hiʻohiʻona ʻoihana o ka subsystem waihona ma ke ʻano holoʻokoʻa - ʻoi aku ka transactionality.

Mai ka manaʻo o ka luna zoo, ua like nā mea a pau penei:

  • ʻO ka piʻi nui o ke kumukūʻai o nā laikini a me ke kākoʻo ʻenehana mai ka mea hana DBMS.
  • ʻO ka hoʻonui ʻana a me ka hoʻonui ʻana i nā lā palena.
  • ʻO nā poho kālā pololei a i ʻole nā ​​hoʻopaʻi ma muli o ka like ʻole o ka ʻikepili.

Aia ka pi'i nui o ka huina kālā o ka 'ona (TCO). Aia kekahi ala i waho o ke kūlana o "nā koho mālama lehulehu"?

Hoʻohālike nui

Ua hoʻohana ʻia ka huaʻōlelo "multivariate storage" i ka makahiki 2011. ʻO ka ʻike ʻana i nā pilikia o ka hoʻokokoke a me ka ʻimi ʻana i kahi hopena i lawe i kekahi mau makahiki, a ma ka 2015, ma o ka waha o nā mea loiloi Gartner, ua hoʻokumu ʻia ka pane:

Me he mea lā i kēia manawa ua pololei ka poʻe loiloi Gartner i kā lākou wānana. Inā hele ʻoe i ka ʻaoʻao me helu nui DBMS ma DB-Engines, hiki iā ʻoe ke ʻike i kēlāоHoʻonohonoho ka hapa nui o kāna mau alakaʻi iā lākou iho ma ke ʻano he DBMS multi-model. Hiki ke ʻike ʻia ka mea like ma ka ʻaoʻao me kekahi helu pilikino.

Hōʻike ka papa ma lalo i ka DBMS - nā alakaʻi i kēlā me kēia o nā helu pilikino, e ʻōlelo nei he mau hiʻohiʻona. No kēlā me kēia DBMS, ua hōʻike ʻia ke kumu hoʻohālike i kākoʻo ʻia (ʻo ia wale nō ka mea hoʻokahi) a me ia pū me nā hiʻohiʻona i kākoʻo ʻia i kēia manawa. Ua helu pū ʻia nā DBMS e hoʻonoho iā lākou iho ma ke ʻano he "hoʻohālike mua" a, e like me ka mea nāna i hana, ʻaʻohe kumu hoʻoilina mua.

DBMS kumu hoʻohālike mua Nā hiʻohiʻona hou
kahi e'ōlelo ai Pilina Kipi, palapala
MS SQL Pilina Kipi, palapala
PostgreSQL Pilina Kipi*, palapala
MakaLogic palapala palapala Kipi, pili
ʻO MongoDB palapala palapala Waiwai kī, pakuhi*
ʻIkepili kolamu laula Palapala, pakuhi
Ho'ōla Waiwai kī Palapala, pakuhi*
ArangoDB - Kipi, palapala
OrientDB - Kipi, palapala, pili
ʻO Azure CosmosDB - Kipi, palapala, pili

Nā memo ma ka pākaukau

ʻO nā asterisk ma ka papaʻaina e hōʻailona i nā ʻōlelo e pono ai ke kau ʻana:

  • ʻAʻole kākoʻo ka PostgreSQL DBMS i ke kumu hoʻohālike ʻikepili kiʻi, akā kākoʻo kēia huahana iā ia ma muli o ia mea, e like me AgensGraph.
  • E pili ana iā MongoDB, ʻoi aku ka pololei o ke kamaʻilio e pili ana i ka hele ʻana o nā mea hana kiʻi i ka ʻōlelo nīnau ($lookup, $graphLookup) ma mua o ke kākoʻo ʻana i ke kumu hoʻohālike, ʻoiai, ʻoiaʻiʻo, pono kā lākou hoʻolauna ʻana i kekahi mau optimizations ma ka pae mālama kino i ke kuhikuhi o ke kākoʻo ʻana i ke kumu hoʻohālike.
  • E pili ana iā Redis, ke manaʻo nei mākou i ka hoʻonui Hoʻopiʻi Kiʻi.

A laila, no kēlā me kēia papa, e hōʻike mākou pehea e hoʻokō ʻia ai ke kākoʻo no kekahi mau hiʻohiʻona i ka DBMS mai kēia papa. E noʻonoʻo mākou i nā hiʻohiʻona pili, palapala a me ka pakuhi i mea nui loa a hoʻohana i nā hiʻohiʻona o nā DBMS kikoʻī e hōʻike i ke ʻano o ka hoʻokō ʻia ʻana o nā "mea nalowale".

ʻO DBMS hoʻohālike nui ma muli o ke kumu hoʻohālike pili

ʻO nā DBMS alakaʻi i kēia manawa he pilina; ʻAʻole hiki ke manaʻo ʻia ka wānana a Gartner he ʻoiaʻiʻo inā ʻaʻole hōʻike nā RDBMS i ka neʻe ʻana i ke ala o ka hoʻohālikelike ʻana. A hōʻike lākou. I kēia manawa, ʻo ka manaʻo o ka DBMS multi-model e like me ka pahi Swiss, ʻaʻole hiki ke hana maikaʻi i kekahi mea, hiki ke kuhikuhi pololei iā Larry Ellison.

Akā, makemake ka mea kākau i ka hoʻokō ʻana i nā hoʻohālike he nui ma Microsoft SQL Server, ma ke ʻano o ke kākoʻo ʻana o RDBMS i nā palapala a me nā kiʻi kiʻi e wehewehe ʻia.

Hoʻohālike palapala ma MS SQL Server

Ua loaʻa i ʻelua mau ʻatikala maikaʻi loa ma Habré e pili ana i ka hoʻokō ʻana o MS SQL Server i ke kākoʻo no ke kumu hoʻohālike palapala; E kaupalena wau iaʻu iho i kahi haʻi pōkole a me ka ʻōlelo:

ʻO ke ala e kākoʻo ai i ke kumu hoʻohālike palapala ma MS SQL Server he mea maʻamau no nā DBMS pili: Manaʻo ʻia nā palapala JSON e mālama ʻia i nā kahua kikokikona maʻamau. ʻO ke kākoʻo no ke kumu hoʻohālike palapala e hāʻawi i nā mea hana kūikawā e hoʻopau i kēia JSON:

ʻO ka hoʻopaʻapaʻa ʻelua o nā mea hoʻohana ʻelua he ʻōlelo ia ma JSONPath-like syntax.

Ma keʻano kikoʻī, hiki iā mākou ke ʻōlelo ʻo nā palapala i mālama ʻia ma kēia ʻano ʻaʻole "nā hui papa mua" i kahi DBMS pili, ʻaʻole like me nā tuples. ʻO ke kikoʻī, ma MS SQL Server i kēia manawa ʻaʻohe indexes ma nā kahua o nā palapala JSON, kahi mea paʻakikī ke hoʻohui i nā papa me ka hoʻohana ʻana i nā waiwai o kēia mau māla a koho i nā palapala e hoʻohana ana i kēia mau waiwai. Eia nō naʻe, hiki ke hana i kahi kolamu helu no ia kahua a me kahi kuhikuhi ma luna.

Eia kekahi, hāʻawi ʻo MS SQL Server i ka hiki ke kūkulu maʻalahi i kahi palapala JSON mai nā ʻike o nā papa me ka hoʻohana ʻana i ka mea hoʻohana. FOR JSON PATH - kahi hiki, ma kekahi ʻano, kūʻē i ka mea ma mua, mālama maʻamau. He mea maopopo no ka wikiwiki o ka RDBMS, ua kue keia ano i ka manao o ka palapala DBMSs, ka mea e malama pono i na pane makaukau i na ninau kaulana, a hiki ke hooponopono i na pilikia o ka maalahi o ka ulu ana, aole nae ka wikiwiki.

ʻO ka mea hope loa, ʻae ʻo MS SQL Server iā ʻoe e hoʻoponopono i ka pilikia ʻē aʻe o ka hana palapala: hiki iā ʻoe ke decompose JSON i nā papa me ka hoʻohana ʻana OPENJSON. Inā ʻaʻole palahalaha loa ka palapala, pono ʻoe e hoʻohana CROSS APPLY.

Hoʻohālike kiʻi ma MS SQL Server

Hoʻokomo piha ʻia ke kākoʻo no ke kumu hoʻohālike (LPG) ma Microsoft SQL Server hiki ke wānana: Manaʻo ʻia e hoʻohana i nā papa kūikawā no ka mālama ʻana i nā node a me ka mālama ʻana i nā ʻaoʻao kiʻi. Hana ʻia ia mau papa me ka hoʻohana ʻana i nā ʻōlelo CREATE TABLE AS NODE и CREATE TABLE AS EDGE ʻo kēlā me kēia.

ʻO nā papa o ka ʻano mua e like me nā papa maʻamau no ka mālama ʻana i nā moʻolelo, me ka ʻokoʻa waho wale nō ʻo ka papa ʻaina he kahua ʻōnaehana. $node_id — ka mea hoʻomaopopo kū hoʻokahi o ka node pakuhi i loko o ka waihona.

Pēlā nō, loaʻa i nā papa o ka ʻano ʻelua nā kahua ʻōnaehana $from_id и $to_id, wehewehe pono nā mea komo i loko o ia mau papa i nā pilina ma waena o nā nodes. Hoʻohana ʻia kahi papa ʻokoʻa e mālama i nā pilina o kēlā me kēia ʻano.

ʻO nā DBMS mau kumu hoʻohālike ke kumu o nā ʻōnaehana ʻike hou? E hōʻike kākou i kēia me kekahi laʻana. E hoʻolālā i ka ʻikepili pakuhi e like me ka mea i hōʻike ʻia ma ke kiʻi. A laila no ka hana ʻana i ke ʻano pili i ka waihona ʻikepili pono ʻoe e holo i kēia mau nīnau 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);

ʻO ka kikoʻī nui o ia mau papa ʻaina ʻo ia i nā nīnau e kūʻē iā lākou hiki ke hoʻohana i nā kiʻina kiʻi me ka syntax like Cypher (akā naʻe, "*"ʻaʻole i kākoʻo ʻia nā mea ʻē aʻe). Ma muli o nā ana hana, hiki ke manaʻo ʻia he ʻokoʻa ke ʻano o ka mālama ʻana i ka ʻikepili i kēia mau papa mai ke ʻano o ka mālama ʻana i nā ʻikepili i nā papa maʻamau a hoʻopaʻa ʻia no ka hoʻokō ʻana i nā nīnau kiʻi.

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

Eia kekahi, paʻakikī loa ka hoʻohana ʻole ʻana i kēia mau hiʻohiʻona i ka wā e hana ai me ia mau papa, no ka mea ma nā nīnau SQL maʻamau e hoʻoponopono i nā pilikia like e pono ai e hoʻoikaika hou e kiʻi i ka ʻōnaehana "graph" node identifiers ($node_id, $from_id, $to_id; No ke kumu like, ʻaʻole i hōʻike ʻia nā nīnau no ka hoʻokomo ʻana i ka ʻikepili ma ʻaneʻi no ka mea he paʻakikī ʻole lākou).

No ka hōʻuluʻulu ʻana i ka wehewehe ʻana o ka hoʻokō ʻana o ka palapala a me nā hiʻohiʻona kiʻi ma MS SQL Server, e hoʻomaopopo wau ʻaʻole i kūleʻa kēlā mau hoʻokō ʻana o kekahi kumu hoʻohālike ma luna o kekahi, mai ka manaʻo o ka hoʻolālā ʻōlelo. Pono e hoʻonui i hoʻokahi ʻōlelo me kekahi, ʻaʻole "orthogonal" piha nā ʻōlelo, hiki ke ʻokoʻa nā lula pili.

ʻO DBMS kumu hoʻohālike he nui ma muli o ke kumu hoʻohālike palapala

Ma kēia ʻāpana, makemake wau e hōʻike i ka hoʻokō ʻana o ka multi-model i ka palapala DBMS me ka hoʻohana ʻana i ka laʻana o ka mea kaulana ʻole o lākou, ʻo MongoDB (e like me ka mea i ʻōlelo ʻia, aia wale nō nā mea hoʻokele kiʻi kūlana. $lookup и $graphLookup, ʻaʻole e hana i nā hōʻiliʻili sharded), akā e hoʻohana ana i ka laʻana o kahi DBMS ʻoi aʻe a "ʻoihana" MakaLogic.

No laila, e ʻae i ka hōʻiliʻili i kahi pūʻulu o nā palapala XML o kēia ʻano (MarkLogic hiki iā ʻoe ke mālama i nā palapala JSON):

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

Hoʻohālike pili i MarkLogic

Hiki ke hana ʻia kahi ʻike pili o kahi hōʻiliʻili o nā palapala me ka hoʻohana ʻana hōʻike maʻamau (maʻiʻo o nā mea value i ka hiʻohiʻona ma lalo nei hiki ke loaʻa kahi XPath kūʻokoʻa):

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

Hiki iā ʻoe ke kamaʻilio i ka ʻike i hana ʻia me kahi nīnau SQL (no ka laʻana, ma o ODBC):

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

ʻO ka mea pōʻino, he heluhelu-wale nō ka ʻike pili i hana ʻia e ka laʻana hōʻike. Ke hana nei i kahi noi no ia mea, e ho'āʻo ʻo MarkLogic e hoʻohana palapala kuhikuhi. Ma mua, ua kaupalena ʻo MarkLogic i nā manaʻo pili index based a hiki ke kākau ʻia, akā i kēia manawa ua manaʻo ʻia lākou he mea ʻole.

Hoʻohālike kiʻi ma MarkLogic

Me ke kākoʻo ʻana i ke kumu hoʻohālike (RDF), ua like nā mea a pau. Eia hou me ke kōkua hōʻike maʻamau hiki iā ʻoe ke hana i kahi hōʻike RDF o kahi hōʻiliʻili o nā palapala mai ka laʻana ma luna:

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

Hiki iā ʻoe ke hoʻoponopono i ka pakuhi RDF me kahi nīnau SPARQL:

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

ʻAʻole like me ka pilina pili, kākoʻo ʻo MarkLogic i ke ʻano kiʻi ma nā ʻano ʻelua ʻē aʻe:

  1. Hiki i kahi DBMS ke waiho i kahi waihona ʻokoʻa piha o ka ʻikepili RDF (e kapa ʻia nā triplets i loko e hoʻokele ʻokoʻa i nā mea i hōʻike ʻia ma luna unuhiia).
  2. Hiki ke hoʻokomo wale ʻia ʻo RDF i ka serialization kūikawā i nā palapala XML a i ʻole JSON (a laila e kapa ʻia nā triplets. hoʻokele ʻole ʻia). He mea ʻokoʻa paha kēia i nā mīkini idref a me kekahi poʻe'ē aʻe.

Hāʻawi ʻia kahi manaʻo maikaʻi o ka hana ʻana o nā mea "ʻoiaʻiʻo" ma MarkLogic Optical API, ma keia manao, he haʻahaʻa-pae, oiai nae kona kumu he okoa - e ho'āʻo e abstract mai ka ikepili kükohu i hoʻohana 'ia, e hōʻoia i ka hana like me ka 'ikepili i loko o okoa kükohu, transactionality, etc.

ʻO DBMS mau hiʻohiʻona "me ka ʻole kumu hoʻohālike"

Aia kekahi mau DBMS ma ka mākeke e hoʻonoho iā lākou iho ma ke ʻano he multi-model mua, me ka ʻole o nā kumu hoʻohālike nui. Aia kēia mau mea ArangoDB, OrientDB (mai ka 2018 ka hui hoʻomohala no SAP) a CosmosDB (lawelawe ma ke ʻano o ka Microsoft Azure cloud platform).

ʻOiaʻiʻo, aia nā hiʻohiʻona "core" ma ArangoDB a me OrientDB. Ma nā hihia ʻelua, ʻo ia kā lākou mau hiʻohiʻona ʻikepili ponoʻī, ʻo ia ka hoʻohālikelike o ka palapala hoʻokahi. ʻO ka laulā nui ka mea e maʻalahi i ka hiki ke hana i nā nīnau o ka pakuhi a me ke ʻano pili.

ʻO kēia mau hiʻohiʻona wale nō nā mea i loaʻa no ka hoʻohana ʻana i ka DBMS i kuhikuhi ʻia; ua hoʻolālā ʻia kā lākou mau ʻōlelo noiʻi e hana pū me lākou. ʻOiaʻiʻo, ʻo ia mau hiʻohiʻona a me nā DBMS e hoʻohiki nei, akā ʻo ka nele o ka hoʻohālikelike ʻana me nā hiʻohiʻona maʻamau a me nā ʻōlelo e hiki ʻole ai ke hoʻohana i kēia mau DBMS i nā ʻōnaehana hoʻoilina-e hoʻololi i nā DBMS i hoʻohana mua ʻia ma laila.

Aia kekahi ʻatikala maikaʻi loa e pili ana iā ArangoDB a me OrientDB ma Habré: E HUI i nā ʻikepili NoSQL.

ArangoDB

Ke koi nei ʻo ArangoDB i ke kākoʻo no kahi kumu hoʻohālike kiʻi.

ʻO nā node o kahi pakuhi ma ArangoDB he mau palapala maʻamau, a ʻo nā ʻaoʻao nā palapala o kahi ʻano kūikawā, me nā kahua ʻōnaehana maʻamau, loaʻa (_key, _id, _rev) kahua ʻōnaehana _from и _to. Hoʻohui mau ʻia nā palapala i loko o nā palapala DBMS i nā hōʻiliʻili. ʻO nā hōʻiliʻili o nā palapala e hōʻike ana i nā kihi i kapa ʻia ʻo nā hōʻiliʻili ʻili ma ArangoDB. Ma ke ala, ʻo nā palapala hōʻiliʻili ʻili he mau palapala, no laila hiki i nā kihi ma ArangoDB ke hana ma ke ʻano he nodes.

ʻIkepili mua

E loaʻa iā mākou kahi hōʻiliʻili persons, nona nā palapala e like me kēia:

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

E ʻohi pū kekahi cafes:

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

A laila ka hōʻiliʻili likes e like paha me kēia:

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

Nā nīnau a me nā hopena

ʻO kahi hulina kaila kiʻi ma ka ʻōlelo AQL i hoʻohana ʻia ma ArangoDB, e hoʻihoʻi ana i ka ʻike i hiki ke heluhelu ʻia e ke kanaka e pili ana i ka mea makemake i ka cafe, e like me kēia:

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

Ma kahi kaila pili, kahi mākou e "heluhelu" ai i nā pilina ma mua o ka mālama ʻana iā lākou, hiki ke kākau hou ʻia kēia nīnau e like me kēia (ma ke ala, me ka ʻole o ka hōʻiliʻili. likes hiki ke hana me ka ʻole):

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 }

E like nō ka hopena ma nā hihia ʻelua:

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

Nā nīnau a me nā hopena hou aʻe

Inā ʻoi aku ka maʻamau o ka DBMS pili ma mua o kahi palapala DBMS, hiki iā ʻoe ke hoʻāʻo i kēia nīnau (a i ʻole hiki iā ʻoe ke hoʻohana. COLLECT):

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

Penei ka hopena:

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

OrientDB

ʻO ke kumu no ka hoʻokō ʻana i kahi kiʻi kiʻi ma luna o kahi ʻano palapala ma OrientDB manawa maopopo nā kahua palapala, me ka ʻoi aku a i ʻole ka liʻiliʻi o nā waiwai scalar maʻamau, loaʻa pū kekahi mau waiwai o nā ʻano like LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. ʻO nā waiwai o kēia mau ʻano he loulou a hōʻiliʻili paha o nā loulou i mea hoʻomaopopo pūnaewele palapala.

ʻO ka mea hōʻike palapala i hāʻawi ʻia e ka ʻōnaehana he "manaʻo kino", e hōʻike ana i ke kūlana o ka moʻolelo i loko o ka waihona, a ʻano like kēia: @rid : #3:16. No laila, ʻo nā koina o nā waiwai kuhikuhi he mau kuhikuhi maoli nō ia (e like me ka hoʻohālike kiʻi) ma mua o nā kūlana koho (e like me ka model relational).

E like me ArangoDB, ua hōʻike ʻia nā ʻaoʻao ma OrientDB ma ke ʻano he palapala ʻokoʻa (ʻoiai inā ʻaʻohe ona waiwai ponoʻī, hiki ke hana ʻia. māmā, a ʻaʻole ia e pili i kahi palapala ʻokoʻa).

ʻIkepili mua

Ma kahi ʻano kokoke i ʻano hoʻolei ʻO ka waihona OrientDB, ʻo ka ʻikepili mai ka hiʻohiʻona mua no ArangoDB e like me kēia:

[
     {
      "@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 like me kā mākou e ʻike ai, mālama pū nā vertices i ka ʻike e pili ana i nā ʻaoʻao komo a i waho. Ma ka hoʻohana ʻana Pono ka API Palapala e nānā i ka pono pono'ī, a na ka Graph API e hana i kēia hana. Akā e ʻike kākou i ke ʻano o ka loaʻa ʻana o OrientDB i nā ʻōlelo nīnau "maʻemaʻe" ʻaʻole i hoʻohui ʻia i nā ʻōlelo papahana.

Nā nīnau a me nā hopena

ʻO kahi nīnau e like me ke kumu i ka nīnau mai ka laʻana no ArangoDB ma OrientDB e like me kēia:

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

E loaʻa ka hopena ma kēia ʻano:

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

Inā 'ike hou 'ia ke 'ano o ka hopena "pili", pono 'oe e wehe i ka laina me UNWIND():

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

Hiki ke wehewehe ʻia ka ʻōlelo nīnau a OrientDB e like me SQL me nā mea hoʻokomo like me Gremlin. Ma ka mana 2.2, ua puka mai kahi palapala noi e like me 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

E like ana ke ano o ka hopena me ka noi mua. E noʻonoʻo e pili ana i nā mea e pono e wehe ʻia i mea e ʻoi aku ka "pili" e like me ka nīnau mua loa.

ʻO Azure CosmosDB

Ma kahi liʻiliʻi, pili ka mea i ʻōlelo ʻia ma luna e pili ana iā ArangoDB a me OrientDB i Azure CosmosDB. Hāʻawi ʻo CosmosDB i kēia mau API komo ʻikepili: SQL, MongoDB, Gremlin a me Cassandra.

Hoʻohana ʻia ʻo SQL API a me MongoDB API no ke komo ʻana i ka ʻikepili i ke ʻano palapala. ʻO Gremlin API a me Cassandra API - no ke kiʻi ʻana i ka ʻikepili ma nā palapala kiʻi a me nā kolamu, kēlā me kēia. Mālama ʻia ka ʻikepili i nā kumu hoʻohālike a pau ma ke ʻano kumu hoʻohālike i loko o CosmosDB: ARS ("atom-record-sequence"), kahi kokoke i ka palapala hoʻokahi.

ʻO nā DBMS mau kumu hoʻohālike ke kumu o nā ʻōnaehana ʻike hou?

Akā,ʻo kaʻikepiliʻikepili i kohoʻia e ka mea hoʻohana a me ka API i hoʻohanaʻia ua paʻa i ka manawa o ka hanaʻana i kahi moʻokāki ma ka lawelawe. ʻAʻole hiki ke komo i ka ʻikepili i hoʻouka ʻia ma kekahi kumu hoʻohālike ma ke ʻano hoʻohālike ʻē aʻe, e like me ka mea i hōʻike ʻia e kekahi mea penei:

ʻO nā DBMS mau kumu hoʻohālike ke kumu o nā ʻōnaehana ʻike hou?

No laila, ʻo ka multi-model ma Azure CosmosDB i kēia lā wale nō ka hiki ke hoʻohana i kekahi mau ʻikepili e kākoʻo ana i nā hiʻohiʻona like ʻole mai ka mea hana hoʻokahi, ʻaʻole ia e hoʻonā i nā pilikia āpau o ka mālama ʻana i nā ʻano like ʻole.

ʻO DBMS mau-hoʻohālike ma muli o ke kumu hoʻohālike?

ʻO ka ʻoiaʻiʻo, ʻaʻohe DBMS mau hiʻohiʻona nui ma ka mākeke akā ua hoʻokumu ʻia ma ke ʻano kiʻi kiʻi (koe wale ke kākoʻo multi-model no nā hiʻohiʻona kiʻi ʻelua i ka manawa like: RDF a me LPG; e ʻike i kēia ma hoʻopuka mua). ʻO nā pilikia nui loa ma muli o ka hoʻokō ʻana i kahi kŘkohu palapala ma luna o ke kŘkohu pakuhi, ma mua o ka pilina.

Ua noʻonoʻo ʻia ka nīnau no ka hoʻokō ʻana i kahi kumu hoʻohālike pili ma luna o ke kumu hoʻohālike i ka wā i hoʻokumu ʻia ai ka hope. Pehea ʻlelo, ma ka laʻana, David McGovern:

ʻAʻohe mea i loko o ka pakuhi ala e pale ai i ka hana ʻana i kahi papa (e laʻa, ma ka helu kuhikuhi kūpono) ma kahi ʻikepili kiʻi e hiki ai ke ʻike pili me (1) hoʻihoʻi ʻana i nā tuple mai nā hui waiwai kī maʻamau a (2) pūʻulu o nā tuple ma ke ʻano pili.

I ka hoʻokō ʻana i kahi kŘkohu palapala ma luna o kahi kŘkohu kiʻi, pono ʻoe e hoʻomanaʻo, no ka laʻana, penei:

  • Manaʻo ʻia nā ʻāpana o kahi hui JSON, akā ʻo nā mea e puka mai ana mai ka piko o kahi lihi o ka pakuhi ʻaʻole;
  • ʻAʻole makemake ʻoe e mālama i kekahi mau kope o ka palapala i hoʻopili ʻia, a ʻaʻohe mea hōʻike i nā subdocuments;
  • Ma ka ʻaoʻao ʻē aʻe, ʻo ka manaʻo o ka palapala DBMS ʻo ia nā palapala i mākaukau i "hui" ʻaʻole pono e kūkulu hou ʻia i kēlā me kēia manawa. Pono e hoʻolako i ke kŘkohu kiʻi me ka hiki ke loaʻa koke i kahi subgraph e pili ana i ka palapala i pau.

He hoʻolaha liʻiliʻi

ʻO ka mea kākau o ka ʻatikala e pili ana i ka hoʻomohala ʻana i ka NitrosBase DBMS, ʻo ke ʻano o loko o ia ka pakuhi, a ʻo nā hiʻohiʻona waho - pili a me ka palapala - ʻo ia kāna mau hōʻike. Ua like nā hiʻohiʻona a pau: aneane loaʻa nā ʻikepili i kekahi o lākou me ka hoʻohana ʻana i kahi ʻōlelo nīnau i kūpono iā ia. Eia kekahi, i kēlā me kēia manaʻo, hiki ke hoʻololi i ka ʻikepili. E hōʻike ʻia nā hoʻololi i loko o ke kumu hoʻohālike i loko a, no laila, i nā manaʻo ʻē aʻe.

Manaʻo wau e wehewehe i ke ʻano o ka hoʻohālikelike ʻana i ke ʻano o NitrosBase i kekahi o kēia mau ʻatikala.

hopena

Manaʻolana wau ua ʻoi aʻe a emi ʻole paha i ka mea heluhelu nā ʻāpana ākea o ka mea i kapa ʻia he multi-modeling. ʻOkoʻa loa nā DBMS mau hiʻohiʻona, a ʻokoʻa ke ʻano o ka "kākoʻo multi-model". No ka hoʻomaopopo ʻana i ka mea i kapa ʻia ʻo "multi-model" i kēlā me kēia hihia kikoʻī, pono e pane i kēia mau nīnau:

  1. Ke kamaʻilio nei mākou e pili ana i ke kākoʻo ʻana i nā hiʻohiʻona kuʻuna a i ʻole kekahi ʻano hiʻohiʻona "hybrid"?
  2. ʻO nā hiʻohiʻona "like", a i ʻole kekahi o lākou ke kumuhana o nā mea ʻē aʻe?
  3. ʻO nā hiʻohiʻona he "ʻokoʻa" kekahi i kekahi? Hiki ke heluhelu ʻia nā ʻikepili i kākau ʻia ma kekahi ʻano hoʻohālike ma kahi ʻē aʻe a i kākau ʻia paha?

Manaʻo wau ua hiki ke pane maikaʻi ʻia ka nīnau e pili ana i ka pili o ka multi-model DBMS, akā ʻo ka nīnau hoihoi ʻo ia nā ʻano o lākou e makemake nui ʻia i ka wā e hiki mai ana. Me he mea lā e makemake nui ʻia nā DBMS multi-model e kākoʻo ana i nā hiʻohiʻona kuʻuna, ma mua o ka pilina; ʻO ka kaulana o nā DBMS multi-model, e hāʻawi ana i nā hiʻohiʻona hou e hoʻohui i nā pono o nā ʻano kuʻuna like ʻole, he mea ia o ka wā e hiki mai ana.

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

Ke hoʻohana nei ʻoe i ka DBMS multi-model?

  • ʻAʻole mākou e hoʻohana, mālama mākou i nā mea āpau i hoʻokahi DBMS a i hoʻokahi kumu hoʻohālike

  • Hoʻohana mākou i nā mana o nā DBMS kahiko

  • Hoʻomaʻamaʻa mākou i ka hoʻomau polyglot

  • Hoʻohana mākou i ka DBMS multi-model hou (Arango, Orient, CosmosDB)

19 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 4.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka