Cov saum toj no ua rau lub fact tias tej zaum txawm nyob rau hauv lub moj khaum ntawm ib tug system nws yog tsim nyog los siv ob peb txawv DBMSs los khaws cov ntaub ntawv thiab daws tau ntau yam teeb meem ntawm kev ua lawv, txhua yam uas txhawb nws tus kheej cov ntaub ntawv qauv. Nrog lub teeb tes ntawm M. Fowler, tus sau ib tug xov tooj ntawm cov phau ntawv nto moo thiab ib qho ntawm co-sau Agile Manifesto, qhov xwm txheej no hu ua multi-variant cia ("polyglot persistence").
Fowler tseem muaj cov piv txwv hauv qab no ntawm kev teeb tsa cov ntaub ntawv khaws cia hauv daim ntawv thov kev ua haujlwm puv ntoob thiab siab-load hauv kev lag luam e-lag luam.
Qhov piv txwv no, ntawm chav kawm, yog me ntsis exaggerated, tab sis qee qhov kev xav hauv kev pom zoo ntawm kev xaiv ib lossis lwm DBMS rau lub hom phiaj sib xws tuaj yeem pom, piv txwv li, no.
Nws pom tseeb tias kev ua tub qhe hauv lub vaj tsiaj zoo li no tsis yooj yim.
Tus lej ntawm cov lej uas ua cov ntaub ntawv khaws cia loj hlob raws li tus lej ntawm DBMSs siv; tus lej code synchronizing cov ntaub ntawv yog qhov zoo yog tias tsis proportional rau lub square ntawm tus lej no.
Raws li ntau tus naj npawb ntawm DBMSs siv, cov nqi ntawm kev muab cov yam ntxwv ntawm kev lag luam (scalability, txhaum kam rau ua, siab muaj) ntawm txhua qhov ntawm DBMSs siv nce.
Nws yog tsis yooj yim sua kom paub meej lub lag luam yam ntxwv ntawm lub cia subsystem tag nrho - tshwj xeeb tshaj yog kev lag luam.
Los ntawm qhov pom ntawm tus thawj coj zoo, txhua yam zoo li no:
Kev nce nqi ntau ntawm cov ntawv tso cai thiab kev txhawb nqa los ntawm DBMS cov chaw tsim khoom.
Kev ua haujlwm ntau dhau thiab nce sijhawm sijhawm.
Kev poob nyiaj ncaj qha lossis raug nplua vim cov ntaub ntawv tsis sib xws.
Qhov kev sib cav thib ob ntawm ob tus neeg ua haujlwm yog ib qho kev qhia hauv JSONPath-zoo li syntax.
Abstractly, peb tuaj yeem hais tias cov ntaub ntawv khaws cia hauv txoj kev no tsis yog "cov koom haum thawj zaug" hauv kev sib raug zoo DBMS, tsis zoo li tuples. Tshwj xeeb, hauv MS SQL Server tam sim no tsis muaj qhov ntsuas ntawm thaj chaw ntawm JSON cov ntaub ntawv, uas ua rau nws nyuaj rau koom nrog cov ntxhuav siv cov txiaj ntsig ntawm cov teb no thiab txawm xaiv cov ntaub ntawv siv cov txiaj ntsig no. Txawm li cas los xij, nws muaj peev xwm los tsim ib kab laum rau xws li daim teb thiab qhov ntsuas ntawm nws.
Tsis tas li ntawd, MS SQL Server muab lub peev xwm los tsim cov ntaub ntawv JSON yooj yim los ntawm cov ntsiab lus ntawm cov ntxhuav siv tus neeg teb xov tooj FOR JSON PATH - muaj peev xwm, nyob rau hauv ib qho kev txiav txim siab, rov qab mus rau yav dhau los, cov pa cia. Nws yog qhov tseeb tias txawm tias RDBMS ceev npaum li cas, txoj hauv kev no cuam tshuam cov kev xav ntawm cov ntaub ntawv DBMSs, uas tseem ceeb khaws cov lus teb npaj tau rau cov lus nug nrov, thiab tuaj yeem daws cov teeb meem ntawm kev txhim kho yooj yim, tab sis tsis ceev.
Thaum kawg, MS SQL Server tso cai rau koj los daws qhov teeb meem ntawm kev tsim cov ntaub ntawv: koj tuaj yeem decompose JSON rau hauv cov ntxhuav siv OPENJSON. Yog tias cov ntaub ntawv tsis yog tag nrho, koj yuav tsum siv CROSS APPLY.
Graph qauv hauv MS SQL Server
Kev them nyiaj yug rau daim duab (LPG) qauv kuj tseem ua tiav hauv Microsoft SQL Server kwv yees tau: Nws tau thov kom siv cov rooj tshwj xeeb los khaws cov nodes thiab khaws cov duab npoo. Cov rooj zoo li no yog tsim los siv cov lus qhia CREATE TABLE AS NODE и CREATE TABLE AS EDGE feem.
Cov ntxhuav ntawm thawj hom zoo ib yam li cov ntxhuav zoo tib yam rau khaws cov ntaub ntawv, nrog rau qhov sib txawv sab nraud tsuas yog tias lub rooj muaj qhov system teb. $node_id - tus cim tshwj xeeb ntawm daim duab node hauv cov ntaub ntawv.
Ib yam li ntawd, cov ntxhuav ntawm hom thib ob muaj qhov system teb $from_id и $to_id, nkag rau hauv cov rooj no kom meej meej cov kev sib txuas ntawm nodes. Ib lub rooj sib cais yog siv los khaws kev sib raug zoo ntawm txhua hom.
Cia peb piav qhia qhov no nrog ib qho piv txwv. Cia cov graph cov ntaub ntawv muaj ib tug layout zoo li ib tug qhia nyob rau hauv daim duab. Tom qab ntawd los tsim cov qauv sib xws hauv cov ntaub ntawv koj yuav tsum tau khiav cov lus nug DDL hauv qab no:
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);
Lub ntsiab tshwj xeeb ntawm cov rooj no yog tias hauv cov lus nug tawm tsam lawv nws muaj peev xwm siv cov qauv duab nrog Cypher-zoo li syntax (txawm li cas los xij, "*"lwm yam tseem tsis tau txais kev txhawb nqa). Raws li kev ntsuas kev ua tau zoo, nws tseem tuaj yeem xav tias txoj kev khaws cov ntaub ntawv hauv cov rooj no txawv ntawm txoj kev cov ntaub ntawv khaws cia hauv cov rooj tsis tu ncua thiab tau ua kom zoo rau kev ua tiav cov lus nug graph.
SELECT Cafe.name
FROM Person, likes, Cafe
WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
AND Person.name = 'John';
Ntxiv mus, nws yog ib qho nyuaj heev tsis txhob siv cov qauv duab no thaum ua hauj lwm nrog cov ntxhuav, vim hais tias nyob rau hauv cov lus nug SQL queries los daws cov teeb meem zoo sib xws nws yuav tsum tau ua ntxiv dag zog kom tau system "graph" node identifiers ($node_id, $from_id, $to_id; Rau tib lub laj thawj, cov lus nug rau kev ntxig cov ntaub ntawv tsis pom ntawm no vim lawv tsis tsim nyog cumbersome).
Txhawm rau sau cov lus piav qhia ntawm qhov kev siv ntawm cov ntaub ntawv thiab cov qauv duab hauv MS SQL Server, kuv yuav nco ntsoov tias qhov kev siv ntawm ib qho qauv saum toj ntawm lwm qhov tsis zoo li ua tiav, feem ntau los ntawm qhov kev xav ntawm kev tsim cov lus. Nws yog ib qho tsim nyog kom ncua ib hom lus nrog lwm tus, cov lus tsis yog "orthogonal", cov kev cai sib haum xeeb tuaj yeem txawv heev.
Ntau tus qauv DBMS raws li cov qauv ntaub ntawv
Hauv seem no, kuv xav qhia txog kev siv ntau tus qauv hauv cov ntaub ntawv DBMSs siv cov piv txwv ntawm cov tsis nyiam tshaj plaws ntawm lawv, MongoDB (raws li tau hais, nws tsuas yog muaj cov neeg ua haujlwm teeb tsa. $lookup и $graphLookup, tsis ua hauj lwm ntawm sharded collections), tab sis siv cov piv txwv ntawm ib tug ntau paub tab thiab "kev lag luam" DBMS MarkLogic.
Yog li, cia cov khoom sau muaj cov ntaub ntawv XML ntawm hom hauv qab no (MarkLogic kuj tso cai rau koj khaws cov ntaub ntawv JSON):
OrientDB cov lus nug tuaj yeem piav qhia raws li SQL nrog Gremlin zoo li ntxig. Hauv version 2.2, daim ntawv thov Cypher zoo li tau tshwm sim, 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
Cov ntaub ntawv tshwm sim yuav zoo ib yam li hauv qhov kev thov dhau los. Xav txog dab tsi yuav tsum tau muab tshem tawm kom nws ua "kev sib raug zoo", zoo li hauv cov lus nug thawj zaug.
Azure CosmosDB
Rau qhov tsawg dua, dab tsi tau hais saum toj no txog ArangoDB thiab OrientDB siv rau Azure CosmosDB. CosmosDB muab cov ntaub ntawv hauv qab no nkag APIs: SQL, MongoDB, Gremlin thiab Cassandra.
SQL API thiab MongoDB API yog siv los saib xyuas cov ntaub ntawv hauv cov qauv ntaub ntawv. Gremlin API thiab Cassandra API - rau kev nkag mus rau cov ntaub ntawv hauv daim duab thiab kab ntawv, feem. Cov ntaub ntawv hauv txhua tus qauv raug khaws cia hauv CosmosDB sab hauv qauv qauv: ARS ("atom-record-sequence"), uas tseem nyob ze rau daim ntawv ib.
Tab sis cov qauv ntaub ntawv xaiv los ntawm tus neeg siv thiab API siv tau kho thaum lub sijhawm tsim tus account hauv kev pabcuam. Nws tsis tuaj yeem nkag mus rau cov ntaub ntawv thauj khoom hauv ib tus qauv hauv lwm hom qauv, raws li tau piav qhia los ntawm qee yam zoo li no:
Yog li, ntau tus qauv hauv Azure CosmosDB niaj hnub no tsuas yog muaj peev xwm siv ntau lub databases txhawb cov qauv sib txawv los ntawm ib lub chaw tsim khoom, uas tsis daws txhua yam teeb meem ntawm ntau qhov sib txawv cia.
Ntau tus qauv DBMS raws li tus qauv duab?
Qhov tseem ceeb yog qhov tseeb tias tsis muaj ntau tus qauv DBMSs nyob rau hauv kev ua lag luam tseem tsis tau ua raws li cov qauv duab (tshwj tsis yog rau ntau tus qauv kev txhawb nqa rau ib txhij ob daim qauv: RDF thiab LPG; saib qhov no hauv yav dhau los tshaj tawm). Qhov teeb meem loj tshaj plaws yog tshwm sim los ntawm kev ua raws li cov qauv ntawm cov ntaub ntawv saum toj kawg nkaus ntawm cov qauv duab, tsis yog kev sib raug zoo.
Cov lus nug ntawm yuav ua li cas los tsim ib qho kev sib raug zoo qauv nyob rau sab saum toj ntawm daim duab qauv tau txiav txim siab txawm tias thaum lub sij hawm tsim ntawm qhov kawg. Yuav ua li cas hais lusmuab ua piv txwv David McGovern:
Tsis muaj ib yam dab tsi tshwm sim hauv daim duab qhia kev tiv thaiv kev tsim cov txheej txheem (piv txwv li, los ntawm qhov tsim nyog indexing) ntawm daim duab database uas ua rau muaj kev sib raug zoo nrog (1) rov qab ntawm tuples los ntawm cov nqi tseem ceeb ib txwm ua khub thiab (2) pab pawg ntawm tuples los ntawm kev sib raug zoo.
Ntawm qhov tod tes, lub tswv yim ntawm cov ntaub ntawv DBMSs yog tias cov ntaub ntawv tau npaj ua "ua ke" uas tsis tas yuav tsim dua tshiab txhua zaus. Nws yog qhov yuav tsum tau muab cov qauv duab nrog lub peev xwm kom tau txais cov duab subgraph sai sai rau cov ntaub ntawv tiav.
Kuv vam tias yuav piav qhia txog tus qauv zoo li cas hauv NitrosBase hauv ib qho ntawm cov kab lus hauv qab no.
xaus
Kuv vam tias cov ntsiab lus dav dav ntawm qhov hu ua multi-modeling tau dhau los ua ntau dua lossis tsawg dua rau cov neeg nyeem. Ntau tus qauv DBMSs txawv heev, thiab "kev txhawb nqa ntau tus qauv" tuaj yeem saib txawv. Yuav kom nkag siab txog dab tsi hu ua "multi-model" nyob rau hauv txhua rooj plaub, nws yog ib qho tsim nyog los teb cov lus nug hauv qab no:
Puas yog peb tham txog kev txhawb nqa cov qauv ib txwm muaj lossis qee yam "hybrid" qauv?