Kynning á SQL Server 2017 grafgagnasöfnum

Áður en námskeiðið hefst "MS SQL Server Developer" Við höfum útbúið aðra gagnlega þýðingu fyrir þig.

Línuritsgagnagrunnar eru mikilvæg tækni fyrir fagfólk í gagnagrunnum. Ég reyni að fylgjast með nýjungum og nýrri tækni á þessu sviði og eftir að hafa unnið með tengsla- og NoSQL gagnagrunna sé ég hlutverk línuritagagnagrunna verða sífellt mikilvægari. Þegar unnið er með flókin stigveldisgögn eru ekki aðeins hefðbundnir gagnagrunnar óvirkir heldur einnig NoSQL. Oft, eftir því sem fjöldi tengistiga og stærð gagnagrunnsins eykst, minnkar árangur. Og eftir því sem samböndin verða flóknari eykst fjöldi JOINs líka.

Auðvitað hefur venslalíkanið lausnir til að vinna með stigveldi (til dæmis að nota endurkvæma CTE), en þetta eru samt lausnir. Á sama tíma gerir virkni SQL Server grafgagnagrunna þér kleift að höndla mörg stig stigveldis auðveldlega. Bæði gagnalíkanið og fyrirspurnir eru einfaldaðar og því eykst skilvirkni þeirra. Magn kóðans minnkar verulega.

Grafgagnagrunnar eru tjáningarmikið tungumál til að tákna flókin kerfi. Þessi tækni er nú þegar nokkuð mikið notuð í upplýsingatækniiðnaðinum á sviðum eins og samfélagsnetum, svikavarnakerfi, greiningu upplýsingatæknineta, félagslegum ráðleggingum, ráðleggingum um vörur og efni.

Virkni línuritagagnagrunnsins í SQL Server hentar fyrir aðstæður þar sem gögn eru mjög samtengd og hafa vel skilgreind tengsl.

Grafgagnalíkan

Línurit er safn hornpunkta (hnúta) og brúna (tengsl, brún). Vertices tákna einingar og brúnir tákna tengsl þar sem eiginleikar geta innihaldið upplýsingar.

Línuritagagnagrunnur líkir einingar sem línurit eins og skilgreint er í línuritafræði. Gagnabyggingar eru hornpunktar og brúnir. Eiginleikar eru eiginleikar hornpunkta og brúna. Tenging er tenging hornpunkta.

Ólíkt öðrum gagnalíkönum forgangsraða línuritsgagnagrunnar samböndum milli eininga. Þess vegna er engin þörf á að reikna út tengsl með erlendum lyklum eða öðrum hætti. Það er hægt að búa til flókin gagnalíkön með því að nota aðeins hornpunkt og brún abstrakt.

Í nútíma heimi krefjast líkansambönd sífellt flóknari tækni. Til að búa til sambönd, býður SQL Server 2017 upp á grafgagnagrunnsgetu. Hnútar og brúnir grafsins eru sýndar sem nýjar gerðir af töflum: NODE og EDGE. Línuritafyrirspurnir nota nýtt T-SQL fall sem kallast MATCH(). Þar sem þessi virkni er innbyggð í SQL Server 2017 er hægt að nota hana í núverandi gagnagrunnum þínum án þess að þurfa að breyta.

Kostir graflíkansins

Í dag krefjast fyrirtæki og notendur forrita sem meðhöndla sífellt fleiri gögn, en búast við mikilli afköstum og áreiðanleika. Að sýna gögn sem línurit býður upp á þægilega leið til að meðhöndla flókin tengsl. Þessi nálgun leysir mörg vandamál og hjálpar til við að fá niðurstöður í tilteknu samhengi.

Það lítur út fyrir að mörg forrit muni njóta góðs af því að nota grafgagnagrunna í framtíðinni.

Gagnalíkan: frá tengslalíkani yfir í línuritslíkan

Kynning á SQL Server 2017 grafgagnasöfnum
Dæmi

Lítum á dæmi um skipulag með stigveldi starfsmanna: starfsmaður heyrir undir stjórnanda, yfirmaður heyrir undir yfirstjórn o.s.frv. Það fer eftir tilteknu fyrirtæki, það getur verið hvaða fjöldi stiga sem er í þessu stigveldi. En eftir því sem stigunum fjölgar verður sífellt erfiðara að reikna tengsl í tengslagagnagrunni. Það er frekar erfitt að ímynda sér stigveldi starfsmanna, stigveldi í markaðssetningu eða tengsl á samfélagsnetum. Við skulum sjá hvernig SQL Graph getur leyst vandamálið við að meðhöndla mismunandi stig stigveldis.

Fyrir þetta dæmi munum við búa til einfalt gagnalíkan. Búum til töflu yfir starfsmenn EMP með skilríki EMPNO og dálkur M.G.R., sem gefur til kynna auðkenni yfirmanns starfsmanns (stjórnanda). Allar upplýsingar um stigveldið eru geymdar í þessari töflu og hægt er að spyrjast fyrir um þær með dálkum EMPNO и M.G.R..

Kynning á SQL Server 2017 grafgagnasöfnum
Eftirfarandi skýringarmynd sýnir sama skipulagslíkan með fjórum stigum hreiður í kunnuglegri mynd. Starfsmenn eru hornpunktar á línuriti úr töflu EMP. Einingin „starfsmaður“ er tengdur sjálfum sér með tengingunni „senur“ (ReportsTo). Í línuritsskilmálum er hlekkur brún (EDGE) sem tengir hnúta (NODE) ​​starfsmanna.

Kynning á SQL Server 2017 grafgagnasöfnum

Búum til venjulegt borð EMP og bættu við gildunum þar í samræmi við skýringarmyndina hér að ofan.

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)

Meðfylgjandi mynd sýnir starfsmenn:

  • starfsmaður með EMPNO 7369 hlýðir 7902;
  • starfsmaður með EMPNO 7902 hlýðir 7566
  • starfsmaður með EMPNO 7566 hlýðir 7839

Kynning á SQL Server 2017 grafgagnasöfnum
Nú skulum við skoða línuritsmynd af sömu gögnum. STARFSpunkturinn hefur nokkra eiginleika og er tengdur sjálfum sér með „undirmönnum“ sambandinu (EmplReportsTo). EmplReportsTo er nafn sambandsins.

Brúntaflan (EDGE) getur einnig innihaldið eiginleika.

Kynning á SQL Server 2017 grafgagnasöfnum
Við skulum búa til hnútatöflu EmpNode

Setningafræðin til að búa til hnút er frekar einföld: við tjáninguna BÚA TÖFLU bætist við í lokin "SEM HNÚÐUR".

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

Nú skulum við umbreyta gögnunum úr venjulegri töflu í graftöflu. Næst INSERT setur inn gögn úr venslatöflu EMP.

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

Kynning á SQL Server 2017 grafgagnasöfnum
Í töflunni yfir hnúta í sérstökum dálki $node_id_* hnútauðkennið er geymt sem JSON. Eftirstöðvar dálkanna í þessari töflu innihalda eiginleika hnútsins.

Búa til brúnir (EDGE)

Að búa til brúntöflu er mjög svipað og að búa til hnúttöflu, nema að lykilorðið er notað "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Kynning á SQL Server 2017 grafgagnasöfnum

Nú skulum við skilgreina tengingar milli starfsmanna með því að nota dálka EMPNO и M.G.R.. Skipulagsmyndin sýnir greinilega hvernig á að skrifa 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);

Sjálfgefin brúntafla samanstendur af þremur dálkum. Í fyrsta lagi, $edge_id — brúnaauðkenni á JSON formi. Hinir tveir ($from_id и $to_id) tákna tenginguna milli hnúta. Að auki geta brúnir haft fleiri eiginleika. Í okkar tilviki er það Deptnr.

Kerfissýn

Í kerfissýn sys.tables tveir nýir dálkar hafa birst:

  1. er_brún
  2. er_hnútur

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

Kynning á SQL Server 2017 grafgagnasöfnum

ssms

Hlutir sem tengjast línuritum eru staðsettir í möppunni Graph Tables. Hnúttaflatáknið er merkt með punkti og brúnborðstáknið er merkt með tveimur tengdum hringjum (sem lítur svolítið út eins og gleraugu).

Kynning á SQL Server 2017 grafgagnasöfnum

MATCH tjáning

Tjáning MATCH tekið úr CQL (Cypher Query Language). Þetta er skilvirk leið til að spyrjast fyrir um eiginleika grafs. CQL byrjar á tjáningu MATCH.

Setningafræði

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

dæmi

Við skulum skoða nokkur dæmi.

Fyrirspurnin hér að neðan sýnir starfsmenn sem Smith og yfirmaður hans tilkynna til.

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'

Kynning á SQL Server 2017 grafgagnasöfnum
Eftirfarandi fyrirspurn er til að finna starfsmenn og stjórnendur á öðru stigi fyrir Smith. Ef þú fjarlægir setninguna HVAR, þá mun niðurstaðan sýna alla starfsmenn.

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'

Kynning á SQL Server 2017 grafgagnasöfnum
Og að lokum, beiðni um þriðja stigs starfsmenn og stjórnendur.

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'

Kynning á SQL Server 2017 grafgagnasöfnum
Nú skulum við breyta um stefnu til að fá yfirmenn 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)

Kynning á SQL Server 2017 grafgagnasöfnum

Ályktun

SQL Server 2017 hefur fest sig í sessi sem fullkomin fyrirtækjalausn fyrir ýmis upplýsingatækniviðskipti. Fyrsta útgáfan af SQL Graph lofar mjög góðu. Jafnvel þrátt fyrir nokkrar takmarkanir er nú þegar næg virkni til að kanna getu grafa.

SQL Graph virkni er að fullu samþætt í SQL Engine. Hins vegar, eins og áður hefur komið fram, hefur SQL Server 2017 eftirfarandi takmarkanir:

Enginn stuðningur við fjölbreytileika.

  • Aðeins einstefnutengingar eru studdar.
  • Edges geta ekki uppfært $from_id og $to_id dálka með UPDATE.
  • Tímabundnar lokanir eru ekki studdar, en hægt er að fá þær með CTE.
  • Stuðningur við OLTP hluti í minni er takmarkaður.
  • Tímabundnar töflur (kerfisútgáfu tímabundnar töflur), tímabundnar staðbundnar og alþjóðlegar töflur eru ekki studdar.
  • Ekki er hægt að lýsa töflugerðum og töflubreytum sem NODE eða EDGE.
  • Fyrirspurnir í gegnum gagnagrunna eru ekki studdar.
  • Það er engin bein leið eða töframaður til að breyta venjulegum töflum í graftöflur.
  • Það er ekkert GUI til að birta línurit, en þú getur notað Power BI.

Kynning á SQL Server 2017 grafgagnasöfnum

Lestu meira:

Heimild: www.habr.com

Bæta við athugasemd