Slide 19
Slide 19 text
Copyright © PERSOL PROCESS & TECHNOLOGY CO., LTD. All Rights Reserved.
5、巨⼤グラフをAzureで実現 グラフDB
19
• AzureでグラフDBを利⽤する場合,IaaSに任意のDBサーバーを⽴てるか,SQL Database, COSMOS
DBという選択肢があります.
管理 OSレベルでの管理 PaaSなので⼿軽 PaaSなので⼿軽
クエリ DBサーバーによる(Neo4jならCypher) 独⾃のSQL構⽂ Gremlin
スケー
ル
VMのスケールとDBサーバーの設定変更 ポータルで設定変更 ポータルで設定変更
価格 中(VMの価格) 中 ⾼
経路検
索
match (start:L_Station {name:"品川"}),
(end:L_Station{name:"新宿"}),
path = shortestPath((start)-[:Line*]-(end))
return path
with cte as (
select S.駅名 as 発駅, E.駅名 as 着駅, cast(R.距離 as decimal(10, 1)) as 距離, R.
分, cast(concat(S.駅名, '-', E.駅名) as nvarchar(max)) as ルート, 1 as cnt
from G_駅 S, G_路線 R, G_駅 E
where match (S - (R) -> E) and S.駅名 = N'新宿'
union all
select cte.着駅, E.駅名, cast(cte.距離 + R.距離 as decimal(10, 1)), cte.分 + R.分,
cast(concat(cte.ルート, '-', E.駅名) as nvarchar(max)), cte.cnt + 1
from cte, G_駅 S, G_路線 R, G_駅 E
where cte.着駅 = S.駅名 and match (S - (R) -> E) and charindex(E.駅名, cte.
ルート) = 0
)
select top(1)
cte.ルート
, cte.距離
, cte.分
, cte.cnt
from
cte
where
cte.着駅 = N'新宿'
order by cte.距離
g.V().
has(""station"", ""name"", ""品川
"").emit().repeat(bothE(""connectedTo"").otherV().sim
plePath()).until(has(""name"", ""新宿
"").or().loops().is(eq(6))).has(""name"", ""Marble
Arch"").path().unfold().hasLabel(""station"")
[参考] SQL Server 2019では,グラフ機能が⼤幅にアップデートされているのでぜひ体験して⾒てください.
https://www.sqlshack.com/graph-database-features-in-sql-server-2019-part-1/