添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
*** GSQL Graph Algorithm Installer *** Available graphs: - Graph social ( Person:v, Friend:e, Also_Friend:e, Coworker:e ) Graph name? social Please enter the number of the algorithm to install: 1 ) EXIT 2 ) Closeness Centrality 3 ) Connected Components 4 ) Label Propagation 5 ) Community detection: Louvain 6 ) PageRank 7 ) Shortest Path, Single-Source, Any Weight 8 ) Triangle Counting( minimal memory ) 9 ) Triangle Counting( fast, more memory ) pageRank () works on directed edges Available vertex and edge types: - VERTEX Person( PRIMARY_ID id STRING, name STRING, score FLOAT, tag STRING ) WITH STATS= "OUTDEGREE_BY_EDGETYPE" - DIRECTED EDGE Friend ( FROM Person, TO Person, weight FLOAT, tag STRING ) WITH REVERSE_EDGE= "Also_Friend" - DIRECTED EDGE Also_Friend ( FROM Person, TO Person, weight FLOAT, tag STRING ) WITH REVERSE_EDGE= "Friend" - UNDIRECTED EDGE Coworker ( FROM Person, TO Person, weight FLOAT, tag STRING ) Please enter the vertex type ( s ) and edge type ( s ) for running PageRank. Use commas to separate multiple types [ex: type1, type2] Leaving this blank will select all available types Vertex types: Person Edge types: Friend The query pageRank is dropped. The query pageRank_file is dropped. The query pageRank_attr is dropped. gsql -g social ./templates/pageRank.gsql The query pageRank has been added! gsql -g social ./templates/pageRank_file.gsql The query pageRank_file has been added! If your graph schema has appropriate vertex or edge attributes, you can update the graph with your results. Do you want to update the graph [yn] ? y Vertex attribute to store FLOAT result (e.g. pageRank ): score gsql -g social ./templates/pageRank_attr.gsql The query pageRank_attr has been added! Created the following algorithms: - pageRank ( float maxChange, int maxIter, float damping, bool display, int outputLimit ) - pageRank_attr ( float maxChange, int maxIter, float damping, bool display ) - pageRank_file ( float maxChange, int maxIter, float damping, bool display, file f ) Please enter the number of the algorithm to install: 1 ) EXIT 2 ) Closeness Centrality 3 ) Connected Components 4 ) Label Propagation 5 ) Community detection: Louvain 6 ) PageRank 7 ) Shortest Path, Single-Source, Any Weight 8 ) Triangle Counting( minimal memory ) 9 ) Triangle Counting( fast, more memory ) Exiting Algorithm files have been created. Do want to install them now [yn] ? y Start installing queries, about 1 minute ... pageRank query: curl -X GET 'http://127.0.0.1:9000/query/social/pageRank?maxChange=VALUE&maxIter=VALUE&damping=VALUE&display=VALUE&outputLimit=VALUE' . Add -H "Authorization: Bearer TOKEN" if authentication is enabled. pageRank_file query: curl -X GET 'http://127.0.0.1:9000/query/social/pageRank_file?maxChange=VALUE&maxIter=VALUE&damping=VALUE&display=VALUE&f=VALUE' . Add -H "Authorization: Bearer TOKEN" if authentication is enabled. pageRank_attr query: curl -X GET 'http://127.0.0.1:9000/query/social/pageRank_attr?maxChange=VALUE&maxIter=VALUE&damping=VALUE&display=VALUE' . Add -H "Authorization: Bearer TOKEN" if authentication is enabled. [ ====================================================================================================== ] 100% ( 3/3 ) $

当某个算法查询被安装完成后,你可以看到它们和其他GSQL查询列在一起。

GSQL > ls
Queries:
 - cc_subquery(vertex v, int numVert, int maxHops) (installed v2)
 - closeness_cent(bool display, int outputLimit) (installed v2)
 - closeness_cent_attr(bool display) (installed v2)
 - closeness_cent_file(bool display, file f) (installed v2)
 - conn_comp() (installed v2)
 - conn_comp_attr() (installed v2)
 - conn_comp_file(file f) (installed v2)
 - label_prop(int maxIter) (installed v2)
 - label_prop_attr(int maxIter) (installed v2)
 - label_prop_file(int maxIter, file f) (installed v2)
 - louvain() (installed v2)
 - louvain_attr() (installed v2)
 - louvain_file(file f) (installed v2)
 - pageRank(float maxChange, int maxIter, float damping, bool display, int outputLimit) (installed v2)
 - pageRank_attr(float maxChange, int maxIter, float damping, bool display) (installed v2)
 - pageRank_file(float maxChange, int maxIter, float damping, bool display, file f) (installed v2)
 - tri_count() (installed v2)
 - tri_count_fast() (installed v2)

不久之后我们将更新算法库,使得大多数数据库纲目的选择可以在算法查询运行的时候执行,从而避免在安装算法时就需要做选择。

运行一个算法查询

运行算法查询与运行GSQL查询的动作是相同的。 例如,如果用户为页面排名算法选择了JSON格式输出,则它在GSQL里的命令如下:

GSQL > RUN QUERY pageRank(0.001, 25, 0.85, 10)

查询安装的同时还会创建一个REST端点。 因此同样的查询也可以写成:

curl -X GET 'http://127.0.0.1:9000/query/alg_graph/pageRank?maxChange=0.001&maxIter=25&damping=0.85&outputSize=10'

GSQL允许用户从一个查询中调用另一个查询。 这意味着用户可以将算法作为另一个更复杂的分析应用的模块。

算法库总览

目前可用算法分为三类:

  • 路径(Path)

  • 中心度(Centrality)

  • 群体度(Community)

此外,每种算法都可能适用于/不适用于无向边(Undirected Edges)、有向边(Directed Edges)及带有权重赋值的边(Weighted Edges)。

  • “即将上线”表示该算法的实现形式即将由TigerGraph发布

  • “n/a”表示该算法一般不会被使用

算法

英文全称

分类

无向边

有向边

权重赋值的边

单起点最短路径

Single-Source Shortest Path

路径

适用

适用

适用

全顶点对最短路径

All Pairs Shortest Path

路径

适用

适用

适用

页面排名

PageRank

中心度

n/a

适用

即将上线

接近中心度

Closeness Centrality

中心度

适用

n/a

即将上线

中介中心度

Betweenness Centrality

中心度

即将上线

n/a

即将上线

弱连通组件

Weakly Connected Components

群体度

适用

n/a

n/a

强连通组件

Strongly Connected Components

群体度

n/a

即将上线

n/a

标签传播

Label Propagation

群体度

适用

n/a

n/a

鲁汶算法

Louvain Modularity

群体度

适用

n/a

n/a

三角计数

Triangle Counting

群体度

适用

n/a

n/a

计算的复杂度

计算复杂度是一个数学术语。它指在某种算法下,由于不同数据量或其他关键参数的值而导致的计算所需要时间的长短程度。 对于图数据库来说,这样的关键参数有两个:

  • V(或n),顶点数目

  • E(或m),边数目

例如符号O(V ^ 2)表示当V变大时,计算所需要的时间与V 的平方成正比。

路径搜寻的算法

这些算法帮助用户找到最短路径或评估某条路径的可行性或质量。

单起点最短路径算法(Single-Source Shortest Path),无权重

该算法从图形中的某一个源顶点出发,并找到通往每个可能的目标顶点的最短路径,且路径未赋予权重值。 也就是说,它总共可以找到n个路径。

如果用户只想知道某两个特定顶点S和T之间的最短无权重路径,可以参阅《GSQL演示案例》( GSQL Demo Examples )。

如果图形中包含带有权重的边,请参阅下一个算法。

算法简述和使用

如果某个图形包含未加权的边,则找到从一个顶点到另一个顶点的最短路径与找到最少跳路径的方法等价。六度分离理论和朋友的朋友理论都是基于这样的算法。未加权最短路径算法能够回答“你们两个如何关联起来?”的问题。 并且这两个顶点实体可以不是人。 最短路径算法在大量应用中都有广泛运用,例如用于估计事件影响,评估知识传播的方法,或者调查犯罪。

当图形未加权时,我们可以使用”贪婪算法”(greedy approach)来找到最短路径。 在计算机科学中,贪婪算法根据当下正在等待选择的选项做出中间选择,然后再也不重新考虑这些选择。 在这种情况下,一旦算法找到了通往顶点T的任何路径,就可以确定这条是最短路径。

格式定义

shortest_ss(VERTEX v, INT maxDepth, BOOL display)
shortest_ss_file(VERTEX v, INT maxDepth, BOOL display,STRING filepath)
shortest_ss_attr(VERTEX v, INT maxDepth, BOOL display)

特征

描述

输出结果

计算从顶点v到每个顶点T的最短距离(整数值)和最短路径(字符串值)

输出结果有三种形式:

• JSON格式流输出

• 写入一个表格类文件

• 保存为两个顶点属性值

输入参数

v: 起始顶点的id

maxDepth: 不搜索长度比maxDepth更大的路径。

如果maxDepth小于零则对搜索没有限制。

display: 如果为true,则JSON输出包含图形的边,从而显示整个图形

filepath (仅适用于文件输出): 输出文件的保存路径

结果大小

V = 顶点的数目

计算复杂度

O(E), E = 边的数目

图形类型

有向边,无向边,无权重边

示例

即将发布

单起点最短路径算法(Single-Source Shortest Path), 含权重

算法简述和使用

在包含加权边的图形中查找最短路径在算法比在未加权图形中更难,因为仅仅找到了通往顶点T的路径,并不能确定它就是最短路径。 如果权重总是正的,那么你必须继续尝试,直到遍历完包含所有T的入射边的路径为止。而如果权重可以是负数,那么它就更加困难了。 用户必须考虑所有可能的路径。

带权重的最短路径算法最常见的应用方式,就是寻找从A地到B地的最短路径。(比如说GPS导航的路径规划)。普遍地来说,任何寻找更优路线的努力都可能应用了该算法。

格式定义

shortest_path_any_wt(VERTEX v, INT maxDepth, BOOL display)
shortest_path_any_wt_file(VERTEX v, INT maxDepth, BOOL display, STRING filepath)
shortest_path_any_wt_attr(VERTEX v, INT maxDepth, BOOL display)

特征

描述

输出结果

计算从顶点v到每个顶点T的最短距离(整数值)和最短路径(字符串值)

输出结果有三种形式:

• JSON格式流输出

• 写入一个表格类文件

• 保存为两个顶点属性值

输入参数

v: 起始顶点的id

maxDepth: 不搜索长度比maxDepth更大的路径。

如果maxDepth小于零则对搜索没有限制。

display: 如果为true,则JSON输出包含图形的边,从而显示整个图形

filepath (仅适用于文件输出): 输出文件的保存路径

结果大小

V = 顶点数目

计算复杂度

O(V*E), V = 顶点数目, E = 边数目

图形类型

有向边,无向边,有权重边

shortest_path_wt查询基于贝尔曼-福特(Bellman-Ford)算法。如果有多条路径拥有相同的总权重,则算法只返回其中一条。

示例

下图中的边即包含正权重和也包含负权重。 从顶点A出发,得到从A到E的最短加权路径是A-D-C-B-E,累积得分为7-3-2-4 = -2。