Enkonduko al SQL Server 2017 Graph Databases

Antaŭ la komenco de la kurso "Programisto de MS SQL Server" Ni preparis alian utilan tradukon por vi.

Grafaj datumbazoj estas grava teknologio por datumbazaj profesiuloj. Mi provas sekvi la novigojn kaj novajn teknologiojn en ĉi tiu areo kaj post labori kun rilataj kaj NoSQL-datumbazoj, mi vidas, ke la rolo de grafikaj datumbazoj fariĝas pli kaj pli. Kiam vi laboras kun kompleksaj hierarkiaj datumoj, ne nur tradiciaj datumbazoj, sed ankaŭ NoSQL estas neefikaj. Ofte, kun pliiĝo en la nombro da ligniveloj kaj la grandeco de la datumbazo, estas malkresko de rendimento. Kaj kiam la rilatoj fariĝas pli kompleksaj, la nombro da JOIN-oj ankaŭ pliiĝas.

Kompreneble, en la interrilata modelo ekzistas solvoj por labori kun hierarkioj (ekzemple, uzante rekursivajn CTE-ojn), sed ĉi tiuj ankoraŭ estas solvoj. Samtempe, la funkcieco de grafikaj datumbazoj de SQL Server faciligas pritrakti plurajn nivelojn de hierarkio. Kaj la datummodelo kaj demandoj estas simpligitaj, kaj tial ilia efikeco estas pliigita. Signife reduktas la kvanton de kodo.

Grafaj datumbazoj estas esprimplena lingvo por reprezentado de kompleksaj sistemoj. Ĉi tiu teknologio jam estas sufiĉe vaste uzata en la IT-industrio en areoj kiel sociaj retoj, kontraŭfraŭdaj sistemoj, analizo pri IT-retoj, sociaj rekomendoj, rekomendoj pri produkto kaj enhavo.

La grafika datumbaza funkcio en SQL-Servilo taŭgas por scenaroj, kie la datumoj estas tre interligitaj kaj havas bone difinitajn rilatojn.

Grafika datummodelo

Grafeo estas aro de verticoj (nodoj, nodo) kaj randoj (rilatoj, rando). Verdglacioj reprezentas entojn, kaj randoj reprezentas ligilojn kies atributoj povas enhavi informojn.

Grafeodatumbazo modeligas unuojn kiel grafeon kiel difinite en grafeoteorio. Datenstrukturoj estas verticoj kaj randoj. Atributoj estas ecoj de verticoj kaj randoj. Konekto estas ligo de verticoj.

Male al aliaj datummodeloj, grafikaj datumbazoj prioritatas rilatojn inter unuoj. Tial, ne necesas kalkuli rilatojn uzante fremdajn ŝlosilojn aŭ alimaniere. Estas eble krei kompleksajn datummodelojn uzante nur verticajn kaj randabstraktaĵojn.

En la nuna mondo, modeligi rilatojn postulas pli kaj pli altnivelajn teknikojn. Por modeligi rilatojn, SQL Server 2017 ofertas grafikajn datumbazajn kapablojn. La verticoj kaj randoj de la grafeo estas prezentitaj kiel novaj specoj de tabeloj: NODO kaj RANDO. Grafikdemandoj uzas novan T-SQL-funkcion nomitan MATCH(). Ĉar ĉi tiu funkcio estas enkonstruita en SQL Server 2017, ĝi povas esti uzata en viaj ekzistantaj datumbazoj sen bezono de iu datumbaza konvertiĝo.

Avantaĝoj de la Grafika Modelo

Nuntempe, entreprenoj kaj uzantoj postulas aplikojn, kiuj funkcias kun pli kaj pli da datumoj, atendante altan rendimenton kaj fidindecon. La grafika reprezentado de datumoj ofertas oportunan rimedon por pritrakti kompleksajn rilatojn. Ĉi tiu aliro solvas multajn problemojn kaj helpas akiri rezultojn ene de antaŭfiksita kunteksto.

Ŝajnas, ke multaj aplikaĵoj profitos el grafikaj datumbazoj estonte.

Modeligado de Datumoj: De Relacia al Grafika Modeligado

Enkonduko al SQL Server 2017 Graph Databases
Ekzemplo:

Ni rigardu ekzemplon de organiza strukturo kun hierarkio de dungitoj: dungito raportas al manaĝero, manaĝero raportas al altranga manaĝero, ktp. Depende de la specifa firmao, povas esti ajna nombro da niveloj en ĉi tiu hierarkio. Sed kiam la nombro da niveloj pliiĝas, kalkuli rilatojn en interrilata datumbazo fariĝas pli kaj pli malfacila. Estas sufiĉe malfacile imagi la hierarkion de dungitoj, la hierarkion en merkatado aŭ sociaj amaskomunikiloj. Ni vidu kiel SQL Graph povas solvi la problemon pri traktado de malsamaj niveloj de hierarkio.

Por ĉi tiu ekzemplo, ni faru simplan datummodelon. Kreu tabelon de dungitoj PMS kun id EMPNO kaj kolumno M.G.R.A kiu montras al la ID de la estro (manaĝero) de la dungito. Ĉiuj informoj pri la hierarkio estas konservitaj en ĉi tiu tabelo kaj povas esti pridemanditaj per kolumnoj EMPNO и M.G.R..

Enkonduko al SQL Server 2017 Graph Databases
La sekva diagramo ankaŭ montras la saman orgagrammodelon kun kvar niveloj de nestado en pli konata formo. Dungitoj estas la verticoj de la grafeo de la tabelo PMS. La ento "dungito" estas ligita al si mem per la rilato "submetiĝas" (ReportsTo). En grafeaj terminoj, ligo estas rando (EDGE) kiu ligas nodojn (NODOJ) de dungitoj.

Enkonduko al SQL Server 2017 Graph Databases

Ni kreu regulan tablon PMS kaj aldonu valorojn tie laŭ la supra diagramo.

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)

La suba figuro montras la dungitojn:

  • dungito kun EMPNO 7369 estas malsupera al 7902;
  • dungito kun EMPNO 7902 malĉefa al 7566
  • dungito kun EMPNO 7566 malĉefa al 7839

Enkonduko al SQL Server 2017 Graph Databases
Nun ni rigardu la reprezentadon de la samaj datumoj en formo de grafeo. La EMPLOYEE-nodo havas plurajn atributojn kaj estas ligita al si mem per "submits" rilato (EmplReportsTo). EmplReportsTo estas la nomo de la rilato.

La randtabelo (EDGE) ankaŭ povas havi atributojn.

Enkonduko al SQL Server 2017 Graph Databases
Krei nodan tabelon EmpNode

La sintakso por krei nodon estas sufiĉe simpla: al la esprimo KREU TABELON aldonis al la fino AS NODO.

CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;

Nun ni konvertu la datumojn de regula tabelo al grafikaĵo. Poste ENSERTO enmetas datumojn de interrilata tabelo PMS.

INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp

Enkonduko al SQL Server 2017 Graph Databases
En la noda tabelo en speciala kolumno $node_id_* la gastiga ID estas konservita kiel JSON. La ceteraj kolumnoj de ĉi tiu tabelo enhavas la atributojn de la nodo.

Kreu randojn (EDGE)

Krei randtabelon tre similas al kreado de nodtabelo, krom ke la ŝlosilvorto KIEL RANDO.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Enkonduko al SQL Server 2017 Graph Databases

Nun ni difinu rilatojn inter dungitoj uzante kolumnojn EMPNO и M.G.R.. La organigramo klare montras kiel skribi ENSERTO.

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

La randtabelo havas tri kolumnojn defaŭlte. Unue, $edge_id — randidentigilo en la formo de JSON. La aliaj du ($from_id и $to_id) reprezentas la rilaton inter nodoj. Krome, randoj povas havi pliajn ecojn. En nia kazo, ĉi tio Deptno.

Sistemaj Vidoj

En sistema vido sys.tables Estas du novaj kolumnoj:

  1. estas_rando
  2. is_nodo

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

Enkonduko al SQL Server 2017 Graph Databases

ssms

Objektoj rilataj al grafikaĵoj troviĝas en la dosierujo Graph Tables. La noda tablo-ikono estas markita per punkto, kaj la rand-tabel-ikono estas markita per du ligitaj cirkloj (kiu aspektas iom kiel okulvitroj).

Enkonduko al SQL Server 2017 Graph Databases

MATCH esprimo

Esprimo MATCHO prenita de CQL (Cypher Query Language). Ĉi tio estas efika maniero pridemandi la ecojn de grafeo. CQL komenciĝas per esprimo MATCHO.

sintakso

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

ekzemploj

Ni rigardu kelkajn ekzemplojn.

La suba demando montras la dungitojn, al kiuj raportas Smith kaj lia manaĝero.

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'

Enkonduko al SQL Server 2017 Graph Databases
La sekva demando estas por trovi dungitojn kaj dunivelajn administrantojn por Smith. Se vi forigas la oferton WHERE, tiam ĉiuj dungitoj estos montritaj kiel rezulto.

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'

Enkonduko al SQL Server 2017 Graph Databases
Kaj fine, peto por trianivelaj dungitoj kaj administrantoj.

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'

Enkonduko al SQL Server 2017 Graph Databases
Nun ni ŝanĝu direkton por akiri la estrojn de Smith.

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)

Enkonduko al SQL Server 2017 Graph Databases

konkludo

SQL Server 2017 establis sin kiel kompleta entreprena solvo por diversaj komercaj IT-bezonoj. La unua versio de SQL Graph estas tre promesplena. Eĉ malgraŭ kelkaj limigoj, jam ekzistas sufiĉe da funkcieco por esplori la eblecojn de grafikaĵoj.

SQL Graph-funkcio estas plene integra en SQL-Motoro. Tamen, kiel jam menciite, SQL Server 2017 havas la jenajn limigojn:

Neniu subteno por polimorfismo.

  • Nur unudirektaj ligiloj estas subtenataj.
  • Edges ne povas ĝisdatigi siajn $from_id kaj $to_id kolumnojn per UPDATE.
  • Transitivaj fermoj ne estas subtenataj, sed ili povas esti akiritaj per CTEoj.
  • Limigita subteno por En-Memory OLTP-objektoj.
  • Temporaj tabeloj (Sistem-Versionita Tempotabelo), provizoraj lokaj kaj tutmondaj tabeloj ne estas subtenataj.
  • Tabelspecoj kaj tabelvariabloj ne povas esti deklaritaj kiel NODO aŭ EDGE.
  • Inter-datumbazaj demandoj ne estas subtenataj.
  • Ne ekzistas rekta maniero aŭ ia sorĉisto (sorĉisto) por konverti regulajn tabelojn al grafikaj tabeloj.
  • Ne ekzistas GUI por montri grafikaĵojn, sed Power BI povas esti uzata.

Enkonduko al SQL Server 2017 Graph Databases

Legu pli:

fonto: www.habr.com

Aldoni komenton