Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

Kabla ya kuanza kwa kozi "Msanidi wa Seva ya MS SQL" Tumekuandalia tafsiri nyingine muhimu.

Hifadhidata za grafu ni teknolojia muhimu kwa wataalamu wa hifadhidata. Ninajaribu kufuata ubunifu na teknolojia mpya katika eneo hili na baada ya kufanya kazi na hifadhidata za uhusiano na NoSQL, naona kuwa jukumu la hifadhidata za grafu linazidi kuwa zaidi na zaidi. Wakati wa kufanya kazi na data tata ya hierarchical, sio tu hifadhidata za jadi, lakini pia NoSQL hazifanyi kazi. Mara nyingi, pamoja na ongezeko la idadi ya viwango vya kiungo na ukubwa wa database, kuna kupungua kwa utendaji. Na jinsi mahusiano yanavyozidi kuwa magumu, idadi ya JOIN pia huongezeka.

Kwa kweli, katika mfano wa uhusiano kuna suluhisho za kufanya kazi na viwango (kwa mfano, kutumia CTE za kujirudia), lakini hizi bado ni suluhisho. Wakati huo huo, utendakazi wa hifadhidata za grafu za Seva ya SQL hurahisisha kushughulikia viwango vingi vya uongozi. Muundo wa data na maswali hurahisishwa, na kwa hivyo ufanisi wao unaongezeka. Inapunguza kwa kiasi kikubwa kiasi cha msimbo.

Hifadhidata za grafu ni lugha ya kujieleza kwa kuwakilisha mifumo changamano. Teknolojia hii tayari inatumika sana katika tasnia ya TEHAMA katika maeneo kama vile mitandao ya kijamii, mifumo ya kupambana na udanganyifu, uchambuzi wa mtandao wa IT, mapendekezo ya kijamii, bidhaa na mapendekezo ya maudhui.

Utendaji wa hifadhidata ya grafu katika Seva ya SQL inafaa kwa hali ambapo data imeunganishwa sana na ina uhusiano uliobainishwa vyema.

Mfano wa data ya grafu

Grafu ni seti ya wima (nodi, nodi) na kingo (mahusiano, makali). Wima huwakilisha huluki, na kingo zinawakilisha viungo ambavyo sifa zake zinaweza kuwa na taarifa.

Huluki za hifadhidata ya grafu kama grafu kama inavyofafanuliwa katika nadharia ya grafu. Miundo ya data ni wima na kingo. Sifa ni sifa za wima na kingo. Uunganisho ni uunganisho wa wima.

Tofauti na miundo mingine ya data, hifadhidata za grafu hutanguliza uhusiano kati ya huluki. Kwa hiyo, hakuna haja ya kuhesabu mahusiano kwa kutumia funguo za kigeni au kwa njia nyingine. Inawezekana kuunda mifano changamano ya data kwa kutumia vertex tu na vifupisho vya makali.

Katika ulimwengu wa kisasa, uhusiano wa mfano unahitaji mbinu zaidi na za kisasa zaidi. Ili kuunda uhusiano, SQL Server 2017 inatoa uwezo wa hifadhidata ya grafu. Vipeo na kingo za grafu zinawakilishwa kama aina mpya za jedwali: NODE na EDGE. Hoja za grafu hutumia kitendakazi kipya cha T-SQL kiitwacho MATCH(). Kwa kuwa utendakazi huu umejengwa katika SQL Server 2017, inaweza kutumika katika hifadhidata zako zilizopo bila hitaji la ubadilishaji wa hifadhidata yoyote.

Faida za Mfano wa Grafu

Siku hizi, biashara na watumiaji hudai programu zinazofanya kazi na data zaidi na zaidi, huku wakitarajia utendaji wa juu na kutegemewa. Uwakilishi wa grafu wa data hutoa njia rahisi za kushughulikia uhusiano changamano. Mbinu hii hutatua matatizo mengi na husaidia kupata matokeo ndani ya muktadha fulani.

Inaonekana kama programu nyingi zitafaidika na hifadhidata za grafu katika siku zijazo.

Uundaji wa Data: Kutoka kwa Uhusiano hadi Uundaji wa Grafu

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Mfano

Hebu tuangalie mfano wa muundo wa shirika na uongozi wa wafanyakazi: mfanyakazi anaripoti kwa meneja, meneja anaripoti kwa meneja mkuu, na kadhalika. Kulingana na kampuni maalum, kunaweza kuwa na idadi yoyote ya viwango katika uongozi huu. Lakini kadiri idadi ya viwango inavyoongezeka, kuhesabu uhusiano katika hifadhidata ya uhusiano inakuwa ngumu zaidi na zaidi. Ni ngumu sana kufikiria safu ya wafanyikazi, safu katika uuzaji au miunganisho ya media ya kijamii. Wacha tuone jinsi Grafu ya SQL inaweza kutatua shida ya kushughulikia viwango tofauti vya uongozi.

Kwa mfano huu, hebu tufanye mfano rahisi wa data. Unda meza ya wafanyikazi EMP na kitambulisho EMPNO na safu MGRA inayoelekeza kwenye kitambulisho cha mkuu (meneja) wa mfanyakazi. Taarifa zote kuhusu uongozi zimehifadhiwa katika jedwali hili na zinaweza kuulizwa kwa kutumia safuwima EMPNO ΠΈ MGR.

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Mchoro ufuatao pia unaonyesha muundo sawa wa chati ya shirika na viwango vinne vya kutagia kwa njia inayojulikana zaidi. Wafanyakazi ni wima ya grafu kutoka meza EMP. Huluki "mfanyikazi" imeunganishwa yenyewe na uhusiano "inayowasilisha" (ReportsTo). Kwa maneno ya grafu, kiungo ni makali (EDGE) ambayo huunganisha nodi (NODEs) za wafanyakazi.

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

Wacha tuunda meza ya kawaida EMP na ongeza maadili hapo kulingana na mchoro hapo juu.

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)

Picha hapa chini inaonyesha wafanyikazi:

  • mfanyakazi na EMPNO 7369 iko chini ya 7902;
  • mfanyakazi na EMPNO 7902 chini ya 7566
  • mfanyakazi na EMPNO 7566 chini ya 7839

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Sasa hebu tuangalie uwakilishi wa data sawa katika mfumo wa grafu. Nodi ya MFANYAKAZI ina sifa kadhaa na imeunganishwa yenyewe na uhusiano wa "submits" (EmplReportsTo). EmplReportsTo ni jina la uhusiano.

Jedwali la ukingo (EDGE) pia linaweza kuwa na sifa.

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Unda jedwali la nodi EmpNode

Syntax ya kuunda nodi ni rahisi sana: kwa usemi Unda Jedwali imeongezwa hadi mwisho AS NODE.

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

Sasa hebu tubadilishe data kutoka kwa jedwali la kawaida hadi la grafu. Inayofuata Insert huingiza data kutoka kwa jedwali la uhusiano EMP.

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

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Katika meza ya node katika safu maalum $node_id_* kitambulisho cha mwenyeji kimehifadhiwa kama JSON. Safu zilizobaki za jedwali hili zina sifa za nodi.

Unda Kingo (EDGE)

Kuunda meza ya makali ni sawa na kuunda jedwali la nodi, isipokuwa kwamba neno kuu AS EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

Sasa hebu tufafanue uhusiano kati ya wafanyikazi kwa kutumia safu EMPNO ΠΈ MGR. Chati ya mpangilio inaonyesha wazi jinsi ya kuandika 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);

Jedwali la makali lina safu wima tatu kwa chaguo-msingi. Kwanza, $edge_id - kitambulisho cha makali katika mfumo wa JSON. Wengine wawili ($from_id ΠΈ $to_id) kuwakilisha uhusiano kati ya nodi. Kwa kuongeza, kando inaweza kuwa na mali ya ziada. Kwa upande wetu, hii Deptno.

Mionekano ya Mfumo

Katika mtazamo wa mfumo sys.tables Kuna safu mbili mpya:

  1. ni_makali
  2. ni_nodi

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

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

SMS

Vitu vinavyohusiana na grafu viko kwenye folda ya Jedwali la Grafu. Aikoni ya jedwali la nodi imewekwa alama ya nukta, na ikoni ya jedwali la ukingo imewekwa alama ya miduara miwili iliyounganishwa (ambayo inaonekana kama miwani).

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

MATCH kujieleza

Kuonyesha mECHI imechukuliwa kutoka CQL (Lugha ya Maswali ya Cypher). Hii ni njia bora ya kuuliza sifa za grafu. CQL huanza na usemi mECHI.

syntax

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

mifano

Hebu tuangalie mifano michache.

Hoja iliyo hapa chini inaonyesha wafanyikazi ambao Smith na meneja wake wanaripoti kwao.

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'

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Hoja ifuatayo ni kutafuta wafanyikazi na wasimamizi wa kiwango cha pili kwa Smith. Ukiondoa ofa WAPI, basi wafanyakazi wote wataonyeshwa kama matokeo.

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'

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Na hatimaye, ombi kwa wafanyakazi wa ngazi ya tatu na mameneja.

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'

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Sasa tubadili uelekeo tupate mabosi wa 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)

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

Hitimisho

SQL Server 2017 imejiimarisha kama suluhisho kamili la biashara kwa mahitaji anuwai ya IT ya biashara. Toleo la kwanza la Grafu ya SQL ni ya kuahidi sana. Hata licha ya mapungufu kadhaa, tayari kuna utendakazi wa kutosha kuchunguza uwezekano wa grafu.

Utendaji wa Grafu ya SQL umeunganishwa kikamilifu kwenye Injini ya SQL. Walakini, kama ilivyotajwa tayari, SQL Server 2017 ina mapungufu yafuatayo:

Hakuna msaada kwa polymorphism.

  • Viungo vya unidirectional pekee ndivyo vinavyotumika.
  • Edges haziwezi kusasisha $from_id na $to_id safu wima zake kupitia UPDATE.
  • Vifungo vya mpito havitumiki, lakini vinaweza kupatikana kwa kutumia CTE.
  • Usaidizi mdogo wa vipengee vya OLTP vya Kumbukumbu.
  • Majedwali ya muda (Jedwali la Muda Lililotolewa na Mfumo), majedwali ya muda ya ndani na ya kimataifa hayatumiki.
  • Aina za jedwali na anuwai za jedwali haziwezi kutangazwa kama NODE au EDGE.
  • Hoja za hifadhidata mbalimbali hazitumiki.
  • Hakuna njia ya moja kwa moja au aina fulani ya mchawi (mchawi) kubadilisha meza za kawaida kuwa meza za grafu.
  • Hakuna GUI ya kuonyesha grafu, lakini Power BI inaweza kutumika.

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

Soma zaidi:

Chanzo: mapenzi.com

Kuongeza maoni