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 kuendelea na uvumbuzi na teknolojia mpya katika uwanja huu, na baada ya kufanya kazi na hifadhidata za uhusiano na NoSQL, naona kuwa jukumu la hifadhidata za grafu linazidi kuwa muhimu. Wakati wa kufanya kazi na data tata ya uongozi, sio tu hifadhidata za jadi lakini pia za NoSQL hazifanyi kazi. Utendaji mara nyingi hupungua kadri idadi ya viwango vya uhusiano na saizi ya hifadhidata inavyoongezeka. Na kadiri mahusiano yanavyozidi kuwa magumu, ndivyo idadi ya wanaojiunga inavyoongezeka.

Kwa kweli, mfano wa uhusiano hutoa suluhisho za kufanya kazi na madaraja (kwa mfano, kutumia CTE za kujirudia), lakini hizi zinabaki kuwa 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 hivyo kuongeza ufanisi wao. Kiasi cha msimbo kimepunguzwa sana.

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 ulaghai, uchambuzi wa mtandao wa TEHAMA, mapendekezo ya kijamii, na mapendekezo ya bidhaa na 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 vipeo (nodi) na kingo (mahusiano). Wima huwakilisha huluki, na kingo zinawakilisha uhusiano ambao sifa zake zinaweza kuwa na taarifa.

Huluki za hifadhidata ya grafu kama grafu, kama inavyofafanuliwa na nadharia ya grafu. Miundo ya data ni nodi na kingo. Sifa ni mali ya nodi na kingo. Mahusiano ni uhusiano kati ya nodi.

Tofauti na miundo mingine ya data, hifadhidata za grafu hutanguliza uhusiano kati ya huluki. Kwa hivyo, hakuna haja ya kuhesabu uhusiano kwa kutumia funguo za kigeni au njia zingine. Miundo changamano ya data inaweza kujengwa kwa kutumia kipeo pekee na vifupisho vya makali.

Katika ulimwengu wa kisasa, uhusiano wa kielelezo unahitaji mbinu za kisasa zaidi. SQL Server 2017 inatoa uwezo wa hifadhidata ya grafu kwa uhusiano wa kielelezo. Nodi za grafu na kingo zinawakilishwa kama aina mpya za jedwali: NODE na EDGE. Kitendakazi kipya cha T-SQL kiitwacho MATCH() kinatumika kwa hoja za grafu. Kwa kuwa utendakazi huu umejengwa katika SQL Server 2017, inaweza kutumika katika hifadhidata zako zilizopo bila hitaji la ubadilishaji wowote.

Faida za mfano wa grafu

Leo, biashara na watumiaji hudai programu zinazoshughulikia idadi inayoongezeka ya data, huku ikitarajia utendakazi wa juu na kutegemewa. Kuwakilisha data kama grafu hutoa zana rahisi za kuchakata uhusiano changamano. Mbinu hii hutatua matatizo mengi na husaidia kupata matokeo ndani ya muktadha fulani.

Inaonekana kwamba programu nyingi zitafaidika kwa kutumia hifadhidata za grafu katika siku zijazo.

Uundaji wa Data: Kutoka Mahusiano hadi Mfano wa Grafu

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Mfano

Hebu tuangalie mfano wa muundo wa shirika na uongozi wa mfanyakazi: mfanyakazi anaripoti kwa meneja, meneja anaripoti kwa meneja mkuu, na kadhalika. Kulingana na kampuni maalum, uongozi huu unaweza kuwa na idadi yoyote ya viwango. Lakini kadri idadi ya viwango inavyoongezeka, kuhesabu uhusiano katika hifadhidata ya uhusiano kunazidi kuwa ngumu. Ni vigumu sana kuwakilisha uongozi wa wafanyakazi, uongozi wa masoko, au mahusiano ya mitandao ya kijamii katika hifadhidata ya uhusiano. Wacha tuangalie jinsi Grafu ya SQL inaweza kutatua shida ya usindikaji wa viwango tofauti vya uongozi.

Kwa mfano huu, tutaunda muundo rahisi wa data. Tutaunda meza ya wafanyikazi. EMP na kitambulisho EMPNO na safu MGR, ikionyesha kitambulisho cha meneja wa mfanyakazi. Taarifa zote za 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 modeli sawa ya muundo wa shirika na viwango vinne vya kutagia katika umbo linalofahamika zaidi. Wafanyakazi ni nodi za grafu kwenye jedwali. EMPChombo cha "mfanyakazi" kimeunganishwa nacho chenyewe na uhusiano wa "reportsto". Kwa maneno ya grafu, uhusiano ni makali (makali) ambayo huunganisha nodes za wafanyakazi (nodes).

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 inatii 7566
  • mfanyakazi na EMPNO 7566 inatii 7839

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

Jedwali la EDGE pia linaweza kuwa na sifa.

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017
Wacha tuunde jedwali la nodi za 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 tutabadilisha data kutoka kwa jedwali la kawaida hadi 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 nodi kimehifadhiwa kama JSON. Safu zilizobaki za jedwali hili zina sifa za nodi.

Kuunda kingo (EDGE)

Kuunda meza ya makali ni sawa na kuunda meza ya nodi, isipokuwa kwamba neno kuu linatumiwa 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 и MGRChati ya shirika 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 ukingo chaguo-msingi lina safu wima tatu. Ya kwanza, $edge_id - kitambulisho cha makali katika fomu ya JSON. Wengine wawili ($from_id и $to_id) kuwakilisha uhusiano kati ya nodi. Kwa kuongeza, kando inaweza kuwa na mali ya ziada. Kwa upande wetu, hizi ni Deptno.

Uwakilishi wa mfumo

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

  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, huku ikoni ya jedwali la ukingo ikiwa na miduara miwili iliyounganishwa (ambayo inafanana kidogo na miwani ya macho).

Utangulizi wa Hifadhidata za Grafu za SQL Server 2017

MATCH kujieleza

Kuonyesha mECHI imechukuliwa kutoka CQL (Lugha ya Maswali ya Cypher). Ni njia bora ya kuuliza mali ya 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 fulani.

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

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 sentensi 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 imejidhihirisha kama suluhisho kamili la biashara kwa anuwai ya mahitaji ya IT ya biashara. Toleo la kwanza la Grafu ya SQL ni ya kuahidi sana. Hata kukiwa na mapungufu, tayari kuna utendakazi wa kutosha kuchunguza uwezo wa grafu.

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

Hakuna msaada kwa polymorphism.

  • Miunganisho ya unidirectional pekee ndiyo inayotumika.
  • Kingo haziwezi kusasisha safu wima zake za $from_id na $to_id 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 mchawi wa kubadilisha majedwali ya kawaida kuwa majedwali ya 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

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster