Mus tòisich an cÚrsa Tha sinn air eadar-theangachadh feumail eile ullachadh dhut.
Tha stòran-dĂ ta graf nan teicneòlas cudromach airson proifeiseantaich stòr-dĂ ta. Bidh mi aâ feuchainn ris na h-innleachdan agus na teicneòlasan Ăšra san raon seo a leantainn agus Ă s deidh dhomh obrachadh le stòran-dĂ ta co-cheangailte agus NoSQL, tha mi aâ faicinn gu bheil Ă ite stòran-dĂ ta grafa aâ fĂ s barrachd is barrachd. Nuair a bhios tu ag obair le dĂ ta rangachd iom-fhillte, chan e a-mhĂ in stòran-dĂ ta traidiseanta, ach cuideachd NoSQL neo-èifeachdach. Gu tric, le Ă rdachadh anns an Ă ireamh de ĂŹrean ceangail agus meud an stòr-dĂ ta, tha lĂšghdachadh ann an coileanadh. Agus mar a bhios na dĂ imhean aâ fĂ s nas iom-fhillte, tha an Ă ireamh de JOINs aâ dol am meud cuideachd.
Gu dearbh, anns a 'mhodail dà imh tha fuasglaidhean ann airson a bhith ag obair le rangachd (mar eisimpleir, a' cleachdadh CTEn ath-chuairteachadh), ach tha iad sin fhathast nan dòighean-obrach. Aig an aon à m, tha gnÏomhachd stòran-dà ta graf SQL Server ga dhèanamh furasta grunn Ïrean de rangachd a là imhseachadh. Tha an dà chuid am modail dà ta agus ceistean air an sÏmpleachadh, agus mar sin tha an èifeachdas air a mheudachadh. A 'lÚghdachadh gu mòr an à ireamh de chòd.
Tha stòran-dà ta grafa nan cà nan brÏoghmhor airson siostaman iom-fhillte a riochdachadh. Tha an teicneòlas seo mar-thà air a chleachdadh gu math farsaing ann an gnÏomhachas IT ann an raointean leithid lÏonraidhean sòisealta, siostaman an-aghaidh foill, mion-sgrÚdadh lÏonra IT, molaidhean sòisealta, molaidhean toraidh is susbaint.
Tha gnÏomhachd stòr-dà ta grafa ann an SQL Server freagarrach airson suidheachaidhean far a bheil an dà ta gu math eadar-cheangailte agus gu bheil dà imhean air an deagh mhÏneachadh.
Modail dĂ ta graf
Tha graf na sheata de vertices (nodan, nĂłd) agus oirean (dĂ imhean, oir). Tha vertices a 'riochdachadh aonadan, agus tha oirean a' riochdachadh cheanglaichean aig am faod fiosrachadh a bhith ann am feartan.
Bidh stòr-dĂ ta graf aâ modail aonadan mar ghraf mar a tha mĂŹnichte ann an teòiridh grafa. Is e structaran dĂ ta vertices agus oirean. Is e feartan feartan vertices agus oirean. Tha ceangal na cheangal de vertices.
Eu-coltach ri modalan dĂ ta eile, tha stòran-dĂ ta grafa aâ toirt prĂŹomhachas do dhĂ imhean eadar buidhnean. Mar sin, chan eil feum air obrachadh a-mach dĂ imhean a 'cleachdadh iuchraichean cèin no ann an dòigh air choireigin eile. Tha e comasach modalan dĂ ta iom-fhillte a chruthachadh aâ cleachdadh dĂŹreach tarraingean vertex agus iomall.
Ann an saoghal an latha an-diugh, tha modaladh dhĂ imhean a 'feumachdainn dòighean nas adhartaiche. Gus dĂ imhean a mhodail, tha SQL Server 2017 aâ tabhann comasan stòr-dĂ ta grafa. Tha vertices agus oirean aâ ghraf air an riochdachadh mar sheòrsan chlĂ ran Ăšra: NODE agus EDGE. Bidh ceistean graf aâ cleachdadh gnĂŹomh T-SQL Ăšr ris an canar MATCH(). Leis gu bheil an gnĂŹomh seo air a thogail a-steach do SQL Server 2017, faodar a chleachdadh anns na stòran-dĂ ta a thâ agad mu thrĂ th gun fheum air tionndadh stòr-dĂ ta sam bith.
Buannachdan aâ Mhodail Graf
An-diugh, tha gnĂŹomhachasan agus luchd-cleachdaidh ag iarraidh iarrtasan a bhios ag obair le barrachd is barrachd dĂ ta, agus iad a 'sĂšileachadh Ă rd-choileanadh agus earbsachd. Tha riochdachadh graf de dhĂ ta aâ tabhann dòigh goireasach airson dĂ imhean iom-fhillte a lĂ imhseachadh. Bidh an dòigh-obrach seo aâ fuasgladh mòran dhuilgheadasan agus aâ cuideachadh le bhith aâ faighinn thoraidhean taobh a-staigh co-theacs sònraichte.
Tha e coltach gum faigh mòran thagraidhean buannachd bho stòran-dà ta grafa san à m ri teachd.
Modaladh DĂ ta: Bho Modeling Co-cheangailte ri Graf

Eisimpleir:
Bheir sinn sĂšil air eisimpleir de structar eagrachaidh le rangachd luchd-obrach: bidh neach-obrach ag aithris do mhanaidsear, manaidsear ag aithris gu Ă rd-mhanaidsear, agus mar sin air adhart. A rèir aâ chompanaidh shònraichte, faodaidh Ă ireamh sam bith de ĂŹrean a bhith san rangachd seo. Ach mar a tha an Ă ireamh de ĂŹrean aâ dol am meud, bidh e nas duilghe obrachadh a-mach dhĂ imhean ann an stòr-dĂ ta dĂ imh. Tha e gu math duilich smaoineachadh air rangachd luchd-obrach, an rangachd ann am margaidheachd no ceanglaichean meadhanan sòisealta. ChĂŹ sinn mar as urrainn do SQL Graph fuasgladh fhaighinn air an duilgheadas a thaobh lĂ imhseachadh diofar ĂŹrean de rangachd.
Airson an eisimpleir seo, dèanamaid modail dĂ ta sĂŹmplidh. Cruthaich clĂ r de luchd-obrach PMS le id EMPNO agus colbh M.G.R.A a tha aâ comharrachadh ID ceannard (manaidsear) an neach-obrach. Tha a h-uile fiosrachadh mun rangachd air a stòradh sa chlĂ r seo agus faodar a cheasnachadh le bhith aâ cleachdadh colbhan EMPNO и M.G.R..

Tha an diagram a leanas cuideachd aâ sealltainn an aon mhodail de chairt org le ceithir ĂŹrean de neadachadh ann an cruth nas eòlaiche. Is e luchd-obrach vertices a 'ghraf bhon chlĂ r PMS. Tha an eintiteas âneach-obrachâ ceangailte ris fhèin leis an dĂ imh âsubmitsâ (ReportsTo). A thaobh grafa, tha ceangal na iomall (EDGE) a tha aâ ceangal nodan (NODEs) luchd-obrach.

Cruthaichidh sinn clà r cunbhalach PMS agus cuir luachan an sin a rèir an dealbh gu h-à rd.
CREATE TABLE EMP
(EMPNO INT NOT NULL,
ENAME VARCHAR(20),
JOB VARCHAR(10),
MGR INT,
JOINDATE DATETIME,
SALARY DECIMAL(7, 2),
COMMISIION DECIMAL(7, 2),
DNO INT)
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902, '02-MAR-1970', 8000, NULL, 2),
(7499, 'ALLEN', 'SALESMAN', 7698, '20-MAR-1971', 1600, 3000, 3),
(7521, 'WARD', 'SALESMAN', 7698, '07-FEB-1983', 1250, 5000, 3),
(7566, 'JONES', 'MANAGER', 7839, '02-JUN-1961', 2975, 50000, 2),
(7654, 'MARTIN', 'SALESMAN', 7698, '28-FEB-1971', 1250, 14000, 3),
(7698, 'BLAKE', 'MANAGER', 7839, '01-JAN-1988', 2850, 12000, 3),
(7782, 'CLARK', 'MANAGER', 7839, '09-APR-1971', 2450, 13000, 1),
(7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-1982', 3000, 1200, 2),
(7839, 'KING', 'PRESIDENT', NULL, '17-JUL-1971', 5000, 1456, 1),
(7844, 'TURNER', 'SALESMAN', 7698, '08-AUG-1971', 1500, 0, 3),
(7876, 'ADAMS', 'CLERK', 7788, '12-MAR-1973', 1100, 0, 2),
(7900, 'JAMES', 'CLERK', 7698, '03-NOV-1971', 950, 0, 3),
(7902, 'FORD', 'ANALYST', 7566, '04-MAR-1961', 3000, 0, 2),
(7934, 'MILLER', 'CLERK', 7782, '21-JAN-1972', 1300, 0, 1)Tha an dealbh gu h-ĂŹosal aâ sealltainn an luchd-obrach:
- neach-obrach le EMPNO tha 7369 fo smachd 7902;
- neach-obrach le EMPNO 7902 fo-thalamh gu 7566
- neach-obrach le EMPNO 7566 fo-thalamh gu 7839

A-nis leig dhuinn sĂšil a thoirt air riochdachadh an aon dĂ ta ann an cruth graf. Tha grunn fheartan aig an nĂłd EMPLOYEE agus tha e ceangailte ris fhèin le dĂ imh âcuir a-steachâ (EmplReportsTo). Is e EmplReportsTo ainm aâ chĂ irdeis.
Is dòcha gu bheil buadhan aig aâ bhòrd iomaill (EDGE).

Cruthaich clĂ r nĂłd EmpNode
Tha an co-chòrdadh airson a bhith a 'cruthachadh nód gu math sÏmplidh: ris an abairt CRUTHACHADH TABAIL air a chur ris a' chrÏoch MAR NOD.
CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;A-nis tionndaidhidh sinn an dĂ ta bho chlĂ r Ă bhaisteach gu graf aon. Air adhart INSERT cuir a-steach dĂ ta bho chlĂ r dĂ imh PMS.
INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp 
Anns a 'chlà r nodan ann an colbh sònraichte $node_id_* tha an ID aoigheachd air a stòradh mar JSON. Anns na colbhan a tha air fhà gail den chlà r seo tha buadhan an nód.
Cruthaich oirean (EDGE)
Tha cruthachadh clĂ r iomaill glè choltach ri bhith aâ cruthachadh clĂ r nĂłd, ach a-mhĂ in am prĂŹomh fhacal MAR CHOINNICH.
CREATE TABLE empReportsTo(Deptno int) AS EDGE 
A-nis mĂŹnichidh sinn dĂ imhean eadar luchd-obrach a 'cleachdadh colbhan EMPNO и M.G.R.. Tha an clĂ r org aâ sealltainn gu soilleir mar a sgrĂŹobhas tu INSERT.
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 1),
(SELECT $node_id FROM EmpNode WHERE id = 13),20);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 2),
(SELECT $node_id FROM EmpNode WHERE id = 6),10);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 3),
(SELECT $node_id FROM EmpNode WHERE id = 6),10)
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 4),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 5),
(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 6),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 7),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 8),
(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 9),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 10),
(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 11),
(SELECT $node_id FROM EmpNode WHERE id = 8),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 12),
(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 13),
(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 14),
(SELECT $node_id FROM EmpNode WHERE id = 7),30); Tha trĂŹ colbhan air aâ chlĂ r iomaill gu bunaiteach. Aâ chiad, $edge_id - aithnichear iomall ann an cruth JSON. Tha an dithis eile ($from_id и $to_id) riochdachadh an dĂ imh eadar nodan. A bharrachd air an sin, faodaidh feartan a bharrachd a bhith aig oirean. Anns a 'chĂšis againn, seo Deptno.
Seallaidhean siostam
Ann an sealladh siostam sys.tables Tha dĂ cholbh Ăšr ann:
- tha_ oir
- is_nòs
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%' 
sms
Tha nithean co-cheangailte ri grafaichean suidhichte ann am pasgan Graph Tables. Tha ĂŹomhaigh aâ bhĂšird nĂłd air a chomharrachadh le dot, agus tha ĂŹomhaigh aâ bhĂšird oir air a chomharrachadh le dĂ chearcall ceangailte (a tha coltach ri glainneachan).

MATCH abairt
Ciall MATCH air a thoirt bho CQL (Cypher Query Language). Is e dòigh èifeachdach a tha seo airson feartan graf a cheasnachadh. Bidh CQL aâ tòiseachadh le abairt MATCH.
sheantansan
MATCH (<graph_search_pattern>)
<graph_search_pattern>::=
{<node_alias> {
{ <-( <edge_alias> )- }
| { -( <edge_alias> )-> }
<node_alias>
}
}
[ { AND } { ( <graph_search_pattern> ) } ]
[ ,...n ]
<node_alias> ::=
node_table_name | node_alias
<edge_alias> ::=
edge_table_name | edge_aliaseisimpleirean
Bheir sinn sĂšil air beagan eisimpleirean.
Tha aâ cheist gu h-ĂŹosal aâ sealltainn an luchd-obrach a tha Mac aâ Ghobhainn agus am manaidsear aige ag aithris.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR
FROM
empnode e, empnode e1, empReportsTo m
WHERE
MATCH(e-(m)->e1)
and e.ENAME='SMITH' 
Tha aâ cheist a leanas airson luchd-obrach agus manaidsearan dĂ rna ĂŹre a lorg airson Smith. Ma bheir thu air falbh an tairgse FAR, an uairsin thèid a h-uile neach-obrach a thaisbeanadh mar thoradh.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR
FROM
empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2
WHERE
MATCH(e-(m)->e1-(m1)->e2)
and e.ENAME='SMITH' 
Agus mu dheireadh, iarrtas airson luchd-obrach agus manaidsearan treas ĂŹre.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
MATCH(e-(m)->e1-(m1)->e2-(m2)->e3)
and e.ENAME='SMITH' 
A-nis atharraichidh sinn slighe gus ceannardan Smith fhaighinn.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
MATCH(e<-(m)-e1<-(m1)-e2<-(m2)-e3) 
co-dhĂšnadh
Tha SQL Server 2017 air e fhèin a stèidheachadh mar fhuasgladh iomairt iomlan airson grunn fheumalachdan IT gnĂŹomhachais. Tha aâ chiad dreach de SQL Graph gu math gealltanach. Eadhon a dhâ aindeoin cuid de chuingealachaidhean, tha comas-gnĂŹomh gu leòr ann mu thrĂ th airson sgrĂšdadh a dhèanamh air comasachd ghrafaichean.
Tha gnĂŹomhachd SQL Graph lĂ n fhilleadh a-steach do SQL Engine. Ach, mar a chaidh ainmeachadh roimhe, tha na cuingeadan a leanas aig SQL Server 2017:
Chan eil taic ann airson polymorphism.
- Chan eil ach ceanglaichean aon-stiĂširidh aâ faighinn taic.
- Chan urrainn dha Edges na colbhan $from_id agus $to_id aca Ăšrachadh tro UPDATE.
- Chan eil taic ri dĂšnadh tar-ghluasadach, ach gheibhear iad le bhith aâ cleachdadh CTEn.
- Taic cuibhrichte airson nithean OLTP In-Memory.
- Chan eilear aâ toirt taic do chlĂ ran Ăšineail (System-Versioned Temporal Table), clĂ ran sealach ionadail agus cruinneil.
- Chan urrainnear seòrsaichean bÚird agus caochladairean bÚird ainmeachadh mar NODE no EDGE.
- Chan eil taic ri ceistean tar-stòr-dà ta.
- Chan eil dòigh dhÏreach no draoidh (draoidh) ann airson clà ran cunbhalach a thionndadh gu clà ran grafa.
- Chan eil GUI ann airson grafaichean a thaisbeanadh, ach faodar Power BI a chleachdadh.
Leugh tuilleadh:
Source: www.habr.com
