Ro-ràdh do stòran-dàta graf SQL Server 2017

Mus tòisich an cùrsa Leasaiche MS SQL Server 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

Ro-ràdh do stòran-dàta graf SQL Server 2017
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..

Ro-ràdh do stòran-dàta graf SQL Server 2017
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.

Ro-ràdh do stòran-dàta graf SQL Server 2017

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

Ro-ràdh do stòran-dàta graf SQL Server 2017
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).

Ro-ràdh do stòran-dàta graf SQL Server 2017
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

Ro-ràdh do stòran-dàta graf SQL Server 2017
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

Ro-ràdh do stòran-dàta graf SQL Server 2017

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:

  1. tha_ oir
  2. is_nòs

SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'

Ro-ràdh do stòran-dàta graf SQL Server 2017

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

Ro-ràdh do stòran-dàta graf SQL Server 2017

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_alias

eisimpleirean

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'

Ro-ràdh do stòran-dàta graf SQL Server 2017
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'

Ro-ràdh do stòran-dàta graf SQL Server 2017
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'

Ro-ràdh do stòran-dàta graf SQL Server 2017
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)

Ro-ràdh do stòran-dàta graf SQL Server 2017

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.

Ro-ràdh do stòran-dàta graf SQL Server 2017

Leugh tuilleadh:

Source: www.habr.com

Cuir beachd ann