පාඨමාලාව ආරම්භ කිරීමට පෙර
ප්රස්තාර දත්ත සමුදායන් යනු දත්ත සමුදා වෘත්තිකයන් සඳහා වැදගත් තාක්ෂණයකි. මම මෙම ප්රදේශයේ නවෝත්පාදන සහ නව තාක්ෂණයන් අනුගමනය කිරීමට උත්සාහ කරන අතර සම්බන්ධතා සහ NoSQL දත්ත සමුදායන් සමඟ වැඩ කිරීමෙන් පසු ප්රස්ථාර දත්ත සමුදායන්ගේ කාර්යභාරය වැඩි වැඩියෙන් සිදුවෙමින් පවතින බව මට පෙනේ. සංකීර්ණ ධූරාවලි දත්ත සමඟ වැඩ කරන විට, සාම්ප්රදායික දත්ත සමුදායන් පමණක් නොව, NoSQL ද අකාර්යක්ෂමයි. බොහෝ විට, සබැඳි මට්ටම් සංඛ්යාව සහ දත්ත සමුදායේ ප්රමාණය වැඩි වීමත් සමග, කාර්ය සාධනයේ අඩුවීමක් දක්නට ලැබේ. ඒවගේම සබඳතා සංකීර්ණ වන විට, JOIN සංඛ්යාව ද වැඩි වේ.
ඇත්ත වශයෙන්ම, සම්බන්ධතා ආකෘතියේ ධූරාවලිය සමඟ වැඩ කිරීම සඳහා විසඳුම් ඇත (උදාහරණයක් ලෙස, පුනරාවර්තන CTEs භාවිතා කිරීම), නමුත් මේවා තවමත් විසඳුම් වේ. ඒ අතරම, SQL Server ප්රස්තාර දත්ත සමුදායේ ක්රියාකාරීත්වය බහු මට්ටමේ ධුරාවලියක් හැසිරවීම පහසු කරයි. දත්ත ආකෘතිය සහ විමසුම් යන දෙකම සරල කර ඇති අතර, එබැවින් ඒවායේ කාර්යක්ෂමතාව වැඩි වේ. කේතයේ ප්රමාණය සැලකිය යුතු ලෙස අඩු කරයි.
ප්රස්තාර දත්ත සමුදායන් යනු සංකීර්ණ පද්ධති නියෝජනය කිරීම සඳහා ප්රකාශිත භාෂාවකි. මෙම තාක්ෂණය දැනටමත් සමාජ ජාල, වංචා-විරෝධී පද්ධති, තොරතුරු තාක්ෂණ ජාල විශ්ලේෂණය, සමාජ නිර්දේශ, නිෂ්පාදන සහ අන්තර්ගත නිර්දේශ වැනි ක්ෂේත්රවල තොරතුරු තාක්ෂණ කර්මාන්තයේ බහුලව භාවිතා වේ.
SQL Server හි ප්රස්තාර දත්ත සමුදා ක්රියාකාරීත්වය දත්ත ඉතා අන්තර් සම්බන්ධිත සහ මනාව අර්ථ දක්වා ඇති සම්බන්ධතා ඇති අවස්ථා සඳහා සුදුසු වේ.
ප්රස්තාර දත්ත ආකෘතිය
ප්රස්ථාරයක් යනු සිරස් (නෝඩ්, නෝඩ්) සහ දාර (සම්බන්ධතා, දාර) සමූහයකි. සිරස් මගින් ආයතන නියෝජනය කරන අතර දාර මගින් තොරතුරු අඩංගු විය හැකි සබැඳි නියෝජනය කරයි.
ප්රස්ථාර දත්ත සමුදායක් ප්රස්ථාර සිද්ධාන්තයේ අර්ථ දක්වා ඇති පරිදි ප්රස්ථාරයක් ලෙස ආයතන ආකෘති කරයි. දත්ත ව්යුහය යනු සිරස් සහ දාර වේ. ගුණාංග යනු සිරස් සහ දාරවල ගුණයි. සම්බන්ධතාවයක් යනු සිරස් වල සම්බන්ධතාවයකි.
අනෙකුත් දත්ත ආකෘති මෙන් නොව, ප්රස්තාර දත්ත සමුදායන් ආයතන අතර සම්බන්ධතා වලට ප්රමුඛත්වය දෙයි. එමනිසා, විදේශීය යතුරු භාවිතයෙන් හෝ වෙනත් ආකාරයකින් සම්බන්ධතා ගණනය කිරීම අවශ්ය නොවේ. සිරස් සහ දාර වියුක්ත කිරීම් පමණක් භාවිතා කරමින් සංකීර්ණ දත්ත ආකෘති නිර්මාණය කළ හැකිය.
වර්තමාන ලෝකයේ, ආකෘති නිර්මාණ සම්බන්ධතා සඳහා වඩ වඩාත් සංකීර්ණ ශිල්පීය ක්රම අවශ්ය වේ. ආදර්ශ සබඳතා සඳහා, SQL Server 2017 ප්රස්ථාර දත්ත සමුදා හැකියාවන් ලබා දෙයි. ප්රස්ථාරයේ සිරස් සහ දාර නව වගු ලෙස නිරූපණය කෙරේ: NODE සහ EDGE. ප්රස්තාර විමසුම් MATCH() නමින් නව T-SQL ශ්රිතයක් භාවිතා කරයි. මෙම ක්රියාකාරීත්වය SQL Server 2017 තුළ ගොඩනගා ඇති බැවින්, එය ඔබගේ පවතින දත්ත සමුදාය තුළ කිසිදු දත්ත සමුදා පරිවර්තනයක් අවශ්ය නොවී භාවිතා කළ හැක.
ප්රස්තාර ආකෘතියේ ප්රතිලාභ
වර්තමානයේ, ව්යාපාර සහ පරිශීලකයින් ඉහළ කාර්ය සාධනයක් සහ විශ්වසනීයත්වයක් අපේක්ෂා කරන අතරම, වැඩි වැඩියෙන් දත්ත සමඟ ක්රියා කරන යෙදුම් ඉල්ලා සිටී. දත්තවල ප්රස්තාර නිරූපණය සංකීර්ණ සබඳතා හැසිරවීමට පහසු මාධ්යයක් සපයයි. මෙම ප්රවේශය බොහෝ ගැටලු විසඳන අතර දී ඇති සන්දර්භය තුළ ප්රතිඵල ලබා ගැනීමට උපකාරී වේ.
අනාගතයේදී බොහෝ යෙදුම් ප්රස්ථාර දත්ත සමුදායෙන් ප්රතිලාභ ලබන බව පෙනේ.
දත්ත ආකෘතිකරණය: සම්බන්ධක සිට ප්රස්තාර ආකෘතිකරණය දක්වා
උදාහරණ:
සේවකයින්ගේ ධුරාවලියක් සහිත ආයතනික ව්යුහයක උදාහරණයක් බලමු: සේවකයෙකු කළමනාකරුවෙකුට වාර්තා කරයි, කළමනාකරු ජ්යෙෂ්ඨ කළමනාකරුවෙකුට වාර්තා කරයි, යනාදිය. නිශ්චිත සමාගම මත පදනම්ව, මෙම ධුරාවලියේ ඕනෑම මට්ටමක් තිබිය හැක. නමුත් මට්ටම් ගණන වැඩි වන විට, සම්බන්ධතා දත්ත ගබඩාවක සම්බන්ධතා ගණනය කිරීම වඩාත් අපහසු වේ. සේවකයින්ගේ ධුරාවලිය, අලෙවිකරණයේ ධුරාවලිය හෝ සමාජ මාධ්ය සම්බන්ධතා ගැන සිතීම තරමක් අපහසුය. ධූරාවලියේ විවිධ මට්ටම් හැසිරවීමේ ගැටලුව SQL Graph විසින් විසඳා ගන්නේ කෙසේදැයි බලමු.
මෙම උදාහරණය සඳහා, අපි සරල දත්ත ආකෘතියක් සාදා ගනිමු. සේවකයින්ගේ වගුවක් සාදන්න දන්නේ නෑ නේද හැඳුනුම්පත සමඟ EMPNO සහ තීරුව එම්.ජී.ආර්A සේවකයාගේ ප්රධානියාගේ (කළමනාකරු) හැඳුනුම්පතට යොමු කරයි. ධූරාවලිය පිළිබඳ සියලුම තොරතුරු මෙම වගුවේ ගබඩා කර ඇති අතර තීරු භාවිතයෙන් විමසිය හැක EMPNO и එම්.ජී.ආර්.
පහත රූප සටහන වඩාත් හුරුපුරුදු ආකාරයෙන් කූඩු මට්ටම් හතරක් සහිත එකම org ප්රස්ථාර ආකෘතිය ද පෙන්වයි. සේවකයින් යනු වගුවේ ඇති ප්රස්ථාරයේ සිරස් වේ දන්නේ නෑ නේද. "සේවකයා" යන ආයතනය "ඉදිරිපත් කිරීම" (ReportsTo) සම්බන්ධතාවය මගින් තමාටම සම්බන්ධ වේ. ප්රස්ථාර අනුව, සබැඳියක් යනු සේවකයින්ගේ නෝඩ් (NODEs) සම්බන්ධ කරන දාරයකි (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 නෝඩ් වගුවක් සාදන්න
නෝඩයක් සෑදීමේ වාක්ය ඛණ්ඩය තරමක් සරල ය: ප්රකාශනයට වගුව සාදන්න අවසානය දක්වා එකතු කරන ලදී 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;
දැන් අපි සාමාන්ය වගුවක දත්ත ප්රස්ථාරයකට පරිවර්තනය කරමු. ඊළඟ ඇතුල් කරන්න සම්බන්ධක වගුවකින් දත්ත ඇතුල් කරයි දන්නේ නෑ නේද.
INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp
විශේෂ තීරුවක නෝඩ් වගුවේ $node_id_*
ධාරක හැඳුනුම්පත JSON ලෙස ගබඩා කර ඇත. මෙම වගුවේ ඉතිරි තීරු වල නෝඩයේ ගුණාංග අඩංගු වේ.
දාර සාදන්න (EDGE)
දාර වගුවක් සෑදීම නෝඩ් වගුවක් සෑදීමට බොහෝ සෙයින් සමාන ය, එය හැර මූල පදය දාරය ලෙස.
CREATE TABLE empReportsTo(Deptno int) AS EDGE
දැන් අපි තීරු භාවිතා කරන සේවකයින් අතර සම්බන්ධතා නිර්වචනය කරමු EMPNO и එම්.ජී.ආර්. org ප්රස්ථාරයේ පැහැදිලිව ලියන ආකාරය පෙන්වයි ඇතුල් කරන්න.
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
නව තීරු දෙකක් තිබේ:
- is_edge
- වේ_නෝඩය
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'
එස්එස්එම්එස්
ප්රස්තාරවලට අදාළ වස්තු ප්රස්ථාර වගු ෆෝල්ඩරයේ පිහිටා ඇත. නෝඩ් මේස නිරූපකය තිතකින් සලකුණු කර ඇති අතර, දාර වගු නිරූපකය සම්බන්ධිත කව දෙකකින් සලකුණු කර ඇත (එය ටිකක් වීදුරු මෙන් පෙනේ).
MATCH ප්රකාශනය
ප්රකාශනය තරගය CQL (Cypher Query Language) වෙතින් උපුටා ගන්නා ලදී. මෙය ප්රස්ථාරයක ගුණාංග විමසීමට කාර්යක්ෂම ක්රමයකි. CQL ප්රකාශනයකින් ආරම්භ වේ තරගය.
කාරක රීති
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 ප්රස්ථාරයේ පළමු අනුවාදය ඉතා බලාපොරොත්තු සහගතය. සමහර සීමාවන් තිබියදීත්, ප්රස්ථාරවල හැකියාවන් ගවේෂණය කිරීමට ප්රමාණවත් ක්රියාකාරීත්වයක් දැනටමත් ඇත.
SQL ප්රස්තාර ක්රියාකාරීත්වය SQL එන්ජිමට සම්පුර්ණයෙන්ම ඒකාබද්ධ කර ඇත. කෙසේ වෙතත්, දැනටමත් සඳහන් කර ඇති පරිදි, SQL Server 2017 පහත සඳහන් සීමාවන් ඇත:
බහුරූපතාව සඳහා සහය නැත.
- ඒකපාර්ශ්වික සබැඳි පමණක් සහය දක්වයි.
- Edges හට UPDATE හරහා ඔවුන්ගේ $from_id සහ $to_id තීරු යාවත්කාලීන කළ නොහැක.
- සංක්රාන්ති වසා දැමීම් සඳහා සහය නොදක්වයි, නමුත් ඒවා CTE භාවිතයෙන් ලබා ගත හැක.
- In-Memory OLTP වස්තු සඳහා සීමිත සහාය.
- තාවකාලික වගු (පද්ධති අනුවාද සහිත තාවකාලික වගුව), තාවකාලික දේශීය සහ ගෝලීය වගු සඳහා සහය නොදක්වයි.
- වගු වර්ග සහ වගු විචල්ය NODE හෝ EDGE ලෙස ප්රකාශ කළ නොහැක.
- හරස් දත්ත සමුදා විමසුම් සඳහා සහය නොදක්වයි.
- සාමාන්ය වගු ප්රස්ථාර වගු බවට පරිවර්තනය කිරීමට සෘජු මාර්ගයක් හෝ යම් ආකාරයක විශාරද (විශාරද) නොමැත.
- ප්රස්ථාර පෙන්වීමට GUI නැත, නමුත් Power BI භාවිතා කළ හැක.
තවත් කියවන්න:
මූලාශ්රය: www.habr.com