Хичээл эхлэхээс өмнө
График мэдээллийн сан нь мэдээллийн сангийн мэргэжилтнүүдийн хувьд чухал технологи юм. Би энэ чиглэлийн инноваци, шинэ технологийг дагаж мөрдөхийг хичээж, харилцааны болон NoSQL мэдээллийн сантай ажилласны дараа график мэдээллийн сангийн үүрэг улам бүр нэмэгдэж байгааг харж байна. Нарийн төвөгтэй шаталсан өгөгдөлтэй ажиллахдаа уламжлалт мэдээллийн сан төдийгүй NoSQL ч үр дүнгүй байдаг. Ихэнхдээ холбоосын түвшний тоо, мэдээллийн сангийн хэмжээ ихсэх тусам гүйцэтгэл буурч байна. Мөн харилцаа улам төвөгтэй болохын хэрээр НЭГДСЭН хүмүүсийн тоо нэмэгддэг.
Мэдээжийн хэрэг, харилцааны загварт шатлалтай ажиллах шийдлүүд байдаг (жишээлбэл, рекурсив CTE ашиглах), гэхдээ эдгээр нь тойрон гарах арга зам хэвээр байна. Үүний зэрэгцээ SQL Server график мэдээллийн сангийн функциональ байдал нь шатлалын олон түвшнийг зохицуулахад хялбар болгодог. Өгөгдлийн загвар болон асуулга хоёулаа хялбаршуулсан тул үр ашиг нь нэмэгддэг. Кодын хэмжээг мэдэгдэхүйц бууруулдаг.
График мэдээллийн сан нь нарийн төвөгтэй системийг илэрхийлэх илэрхийлэлтэй хэл юм. Энэхүү технологи нь мэдээллийн технологийн салбарт нийгмийн сүлжээ, залилангийн эсрэг систем, мэдээллийн технологийн сүлжээний шинжилгээ, нийгмийн зөвлөмж, бүтээгдэхүүн, агуулгын зөвлөмж зэрэг салбарт аль хэдийн нэлээд өргөн хэрэглэгдэж байна.
SQL Server дээрх график мэдээллийн сангийн функц нь өгөгдөл нь хоорондоо маш сайн холбоотой, сайн тодорхойлсон харилцаатай хувилбаруудад тохиромжтой.
График өгөгдлийн загвар
График нь орой (зангилаа, зангилаа) ба ирмэгүүд (харилцаа, ирмэг) багц юм. Орой нь объектуудыг, ирмэг нь шинж чанар нь мэдээлэл агуулж болох холбоосыг илэрхийлдэг.
График мэдээллийн сан нь графын онолд тодорхойлсноор объектуудыг график хэлбэрээр загварчилдаг. Өгөгдлийн бүтэц нь орой ба ирмэгүүд юм. Аттрибутууд нь орой ба ирмэгүүдийн шинж чанарууд юм. Холболт нь оройн холболт юм.
Бусад өгөгдлийн загваруудаас ялгаатай нь график мэдээллийн сан нь аж ахуйн нэгж хоорондын харилцааг чухалчилдаг. Тиймээс гадаад түлхүүр эсвэл өөр аргаар харилцааг тооцоолох шаардлагагүй болно. Зөвхөн орой ба ирмэгийн хийсвэрлэлийг ашиглан нарийн төвөгтэй өгөгдлийн загварыг бий болгох боломжтой.
Орчин үеийн ертөнцөд харилцааг загварчлах нь улам боловсронгуй арга техникийг шаарддаг. Харилцааг загварчлахын тулд SQL Server 2017 нь график мэдээллийн сангийн боломжийг санал болгодог. Графикийн орой ба ирмэгүүд нь шинэ төрлийн хүснэгтүүдээр дүрслэгдсэн: NODE ба EDGE. График асуулгад MATCH() хэмээх шинэ T-SQL функцийг ашигладаг. Энэ функц нь SQL Server 2017-д суурилагдсан тул өгөгдлийн сангийн хөрвүүлэлт хийх шаардлагагүйгээр одоо байгаа мэдээллийн сандаа ашиглах боломжтой.
График загварын ашиг тус
Өнөө үед бизнес эрхлэгчид болон хэрэглэгчид өндөр гүйцэтгэл, найдвартай байдлыг хүлээж байгаа хэдий ч илүү олон өгөгдөлтэй ажиллах програмуудыг шаарддаг. Өгөгдлийн график дүрслэл нь нарийн төвөгтэй харилцааг зохицуулах тохиромжтой хэрэгслийг санал болгодог. Энэ арга нь олон асуудлыг шийдэж, тухайн нөхцөл байдалд үр дүнд хүрэхэд тусалдаг.
Ирээдүйд олон программууд график мэдээллийн сангаас ашиг тус хүртэх бололтой.
Өгөгдлийн загварчлал: Харьцангуйгаас график загварчлал хүртэл
Жишээ нь:
Ажилчдын шатлал бүхий байгууллагын бүтцийн жишээг авч үзье: ажилтан нь менежерт тайлагнадаг, менежер нь ахлах менежерт тайлагнадаг гэх мэт. Тодорхой компаниас хамааран энэ шатлалын хэд хэдэн түвшин байж болно. Гэвч түвшний тоо нэмэгдэхийн хэрээр харилцааны мэдээллийн сан дахь харилцааг тооцоолох нь улам бүр хэцүү болж байна. Ажилчдын шатлал, маркетинг эсвэл нийгмийн сүлжээн дэх шатлалыг төсөөлөхөд хэцүү байдаг. SQL график нь шатлалын янз бүрийн түвшний асуудлыг хэрхэн шийдэж болохыг харцгаая.
Энэ жишээний хувьд энгийн өгөгдлийн загвар хийцгээе. Ажилчдын хүснэгтийг үүсгэ БОМТ ID-тай EMPNO ба багана M.G.R.Ажилтны дарга (менежер)-ийн үнэмлэхийг заадаг A. Шатлалын талаарх бүх мэдээллийг энэ хүснэгтэд хадгалсан бөгөөд багана ашиглан асууж болно EMPNO и M.G.R..
Дараах диаграмм нь дөрвөн түвшний үүрлэсэн ижил байгууллагын диаграммын загварыг илүү танил хэлбэрээр харуулж байна. Ажилтнууд нь хүснэгтээс авсан графикийн оройнууд юм БОМТ. Аж ахуйн нэгж "ажилтан" нь "илгээдэг" (ReportsTo) харилцаагаар өөртэйгөө холбогддог. Графикийн хувьд холбоос нь ажилчдын зангилаа (NODE) холбодог ирмэг (EDGE) юм.
Ердийн хүснэгтийг үүсгэцгээе БОМТ мөн дээрх диаграмын дагуу утгыг нэмнэ үү.
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)
Доорх зурагт ажилчдыг харуулав.
- хамт ажилтан EMPNO 7369 нь 7902-д захирагддаг;
- хамт ажилтан EMPNO 7902 нь 7566-д захирагддаг
- хамт ажилтан EMPNO 7566 нь 7839-д захирагддаг
Одоо ижил өгөгдлийн дүрслэлийг график хэлбэрээр авч үзье. АЖИЛТНЫ зангилаа нь хэд хэдэн шинж чанартай бөгөөд өөртэй нь "илгээх" (EmplReportsTo) хамаарлаар холбогддог. EmplReportsTo нь харилцааны нэр юм.
Захын хүснэгт (EDGE) нь мөн шинж чанартай байж болно.
EmpNode зангилааны хүснэгт үүсгэх
Зангилаа үүсгэх синтакс нь маш энгийн: илэрхийлэлд ҮНДСЭН ҮЙЛДВЭР төгсгөлд нь нэмсэн ЗАНГИЛАЛ БОЛГОН.
CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;
Одоо ердийн хүснэгтээс өгөгдлийг график болгон хөрвүүлье. Дараачийн INSERT хамаарлын хүснэгтээс өгөгдөл оруулна БОМТ.
INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp
Зангилааны хүснэгтэд тусгай баганад $node_id_*
хост ID нь JSON хэлбэрээр хадгалагдана. Энэ хүснэгтийн үлдсэн баганууд нь зангилааны шинж чанаруудыг агуулна.
Ирмэг үүсгэх (EDGE)
Түлхүүр үгээс бусад тохиолдолд захын хүснэгт үүсгэх нь зангилааны хүснэгт үүсгэхтэй маш төстэй юм AS EDGE.
CREATE TABLE empReportsTo(Deptno int) AS EDGE
Одоо багана ашиглан ажилчдын хоорондын харилцааг тодорхойлъё EMPNO и M.G.R.. Байгууллагын диаграм нь хэрхэн бичихийг тодорхой харуулж байна 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);
Ирмэгийн хүснэгт нь анхдагчаар гурван баганатай. Эхлээд, $edge_id
— JSON хэлбэрийн ирмэг танигч. Нөгөө хоёр ($from_id
и $to_id
) зангилаа хоорондын хамаарлыг илэрхийлнэ. Үүнээс гадна ирмэг нь нэмэлт шинж чанартай байж болно. Манай тохиолдолд энэ Дептно.
Системийн харагдац
Системийн харагдац дээр sys.tables
Хоёр шинэ багана байна:
- ирмэг
- зангилаа
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'
ssms
Графиктай холбоотой объектууд нь График Хүснэгтүүд хавтсанд байрладаг. Зангилааны хүснэгтийн дүрсийг цэгээр, ирмэгийн хүснэгтийн дүрсийг холбосон хоёр тойргоор тэмдэглэсэн (энэ нь нүдний шил шиг харагддаг).
MATCH илэрхийлэл
Үг хэлэх MATCH CQL (Cypher Query Language) -ээс авсан. Энэ нь графикийн шинж чанарыг хайх үр дүнтэй арга юм. CQL хэллэгээр эхэлдэг MATCH.
синтакс
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
жишээ
Хэд хэдэн жишээг харцгаая.
Доорх асуулга нь Смит болон түүний менежерт тайлагнадаг ажилчдыг харуулна.
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'
Дараах асуулт нь Смитийн ажилчид болон хоёрдугаар түвшний менежерүүдийг хайж олоход зориулагдсан болно. Хэрэв та саналыг хасвал WHERE, дараа нь үр дүнд нь бүх ажилчид харагдах болно.
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'
Эцэст нь гурав дахь түвшний ажилтан, менежерүүдэд зориулсан хүсэлт.
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'
Одоо Смитийн дарга нарыг авахын тулд чиглэлээ өөрчилье.
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)
дүгнэлт
SQL Server 2017 нь бизнесийн мэдээллийн технологийн төрөл бүрийн хэрэгцээг хангах цогц шийдэл болж чадсан. SQL Graph-ийн анхны хувилбар нь маш ирээдүйтэй юм. Хэдийгээр зарим хязгаарлалттай байсан ч графикийн боломжуудыг судлах хангалттай функцууд аль хэдийн бий болсон.
SQL Graph функц нь SQL Engine-д бүрэн нэгдсэн. Гэхдээ аль хэдийн дурьдсанчлан SQL Server 2017 нь дараахь хязгаарлалттай байдаг.
Полиморфизмыг дэмждэггүй.
- Зөвхөн нэг чиглэлтэй холбоосыг дэмждэг.
- Ирмэгүүд $from_id болон $to_id багануудыг UPDATE-р шинэчлэх боломжгүй.
- Шилжилтийн хаалтыг дэмждэггүй ч CTE-г ашиглан олж авах боломжтой.
- In-Memory OLTP объектуудад зориулсан хязгаарлагдмал дэмжлэг.
- Түр зуурын хүснэгтүүд (Системийн Хувилбартай Түр Хүснэгт), түр зуурын орон нутгийн болон глобал хүснэгтийг дэмждэггүй.
- Хүснэгтийн төрлүүд болон хүснэгтийн хувьсагчдыг NODE эсвэл EDGE гэж зарлах боломжгүй.
- Өгөгдлийн сан хоорондын асуулга дэмждэггүй.
- Ердийн хүснэгтийг график хүснэгт болгон хувиргах шууд арга эсвэл ямар нэгэн шидтэн (шидтэн) байхгүй.
- График харуулах GUI байхгүй ч Power BI ашиглаж болно.
Цааш унших:
Эх сурвалж: www.habr.com