#gStore-weekly | gStore最新版本1.0之自定义图分析算子

gStore最新版本1.0之自定义图分析算子

在内核版本v1.0中,开放了自定义图分析算子接口,可以通过接口函数获取图数据的结点数、边数、任意给定结点的邻居等,以此为基本单元进行实现;接下来将逐一进行介绍。

1、开放接口

在调用开发接口之前,需要启动ghttp服务,假设ghttp服务的监听端口为9000

请求URL: http://127.0.0.1:9000

参数传递:POST请求,httprequest 中的body中的raw,以JSON结构传递

参数名必选类型说明
operationstring操作名称,固定值为**funcudb**
usernamestring用户名
passwordstring密码(明文或md5加密后的密文)
encryptionstring为空,则密码为明文,为1表示用md5加密
typestring1:新增,2:修改,3:删除,4:编译
funInfoJSONObject算子函数
---- funNamestring函数名称
---- funDescstring描述
---- funArgsstring参数类型(1无K跳参数,2有K跳参数):新增、修改必填
---- funBodystring函数内容(以{}包裹的内容):新增、修改必填
---- funSubsstring子函数(可用于fun_body中调用)
---- funReturnstring返回类型(path:返回路径类结果,value:返回值类结果):新增、修改必填

返回值

参数类型说明
StatusCodeint返回值代码值(具体请参考附表:返回值代码表)
StatusMsgstring返回具体信息

2、函数介绍

2.1 函数定义

当我们创建算子函数时,将会自动生成如下函数定义声明,函数内容为算法的实现(即接口中funBody参数部分),函数的返回值都必须转化为string类型

无K跳参数

#include "../../Query/PathQueryHandler.h"

using namespace std;

extern "C" string funName(std::vector<int> iri_set, bool directed, std::vector<int> pred_set, PathQueryHandler* queryUtil)
{
    //TODO 算法的实现逻辑
}

有K跳参数

#include "../../Query/PathQueryHandler.h"

using namespace std;
extern "C" string funName(std::vector<int> iri_set, bool directed, int k, std::vector<int> pred_set, PathQueryHandler* queryUtil)
{
    //TODO 算法的实现逻辑
}

参数说明:

  • iri_set: 结点IRI集合
  • directed: 是否有向,布尔值(true-表示有向、false-表示无向,所有边视为双边)
  • k: 路径长度上限(查询K跳可达性)
  • pred_set: 谓词集合
  • queryUtil: CSR资源的操作接口,详见【3、PathQueryHandler接口函数】
2.2 返回值

​ 在进行函数定义时,函数的返回结果可选择三种类型:路径键值对

  • **路径:**返回结果需要转换为路径格式,我们指定了以下统一的路径格式(在返回时会转化为json字符串形式)
[
    {
        "src": "<起始结点IRI>",
        "dst": "<目标结点IRI>",
        "edges": [ //边集合
            {"fromNode": 出结点ID, "toNode": 入结点ID, "predIRI": "<构成边的谓词>"},
            ......
        ],
        "nodes": [ //结点集合
            {"nodeIndex": 结点ID, "nodeIRI": "<结点IRI>"},
            ......
        ]
    }
]

备注:如果需要返回路径结果,在自定义函数中,我们把找到的路径结点ID存入vector<int>集合中,再调用

queryUtil->getPathString(std::vector<int> &path_set)接口返回string格式的路径结果集。

  • **值:**返回原始的结果,即直接输出自定义函数返回的字符串值
{
    ......
	"value": "xxx" //function return value
    ......
}
  • **键值对:**以key-value的形式返回结果,key为IRI结点ID, value为结果值(如PageRank算子的排名值)
[
    {"dst": "<结点IRI>", "value": "值"},
    ......
    {"dst": "<结点IRI>", "value": "值"}
]

3、PathQueryHandler接口函数

3.1 获取结点总数
int getVertNum();
  • 描述:获取图中结点的总数
  • 参数:无
  • 返回值:图中结点总数
3.2 获取边总数
int getEdgeNum();
// 获取以集合中的谓词为标签的边的总数
int getSetEdgeNum(const std::vector<int> &pred_set);
  • 描述:获取图中边的总数

  • 参数:

    pred_set: 谓词集合

  • 返回值:图中边总数

3.3 获取结点下标
// 获取结点在入边CSR的offset_list中对应的下标 
int getInIndexByID(int vid, int pred);

// 获取结点在出边CSR的offset_list中对应的下标 
int getOutIndexByID(int vid, int pred);
  • 描述:已知结点ID、谓词编号,获取此结点在出边或入边CSR的offset_list(即存储结点在总的邻接列表adjacency_list中下标的数组)中对应的下标。主要在获取结点邻居数的图访问接口中被调用。

  • 参数:

    vid: 结点ID

    pred: 谓词编号

  • 返回值:vid在入或出边CSR的offset_list中对应的下标

3.4 获取结点邻居数
// 获取结点入边所关联的邻居数
int getInSize(int vid, int pred);
// 获取结点以集合中的谓词为标签的入边所关联的邻居数(不考虑去重)
int getSetInSize(int vid, const std::vector<int> &pred_set);
// 获取结点总的入边数(可选是否去重)
int getTotalInSize(int vid, bool distinct);

// 获取结点出边所关联的邻居数
int getOutSize(int vid, int pred);
// 获取结点以集合中的谓词为标签的出边所关联的邻居数(不考虑去重)
int getSetOutSize(int vid, const std::vector<int> &pred_set);
// 获取结点总的出边数(可选是否去重)
int getTotalOutSize(int vid, bool distinct);
  • 描述:指定结点和某个谓词,仅返回以此谓词为标签的入边/出边所关联的邻居数。

  • 参数:

    vid: 结点ID

    pred: 谓词编号

    pred_set: 谓词编号集合

    distinct: 是否去重(true则要求去重)

  • 返回值:vid入或出边所关联的邻居数

3.5 获取结点邻居ID
// 获取结点入边邻居ID
int getInVertID(int vid, int pred, int pos);
int getInVertID(int vid, int pos);

// 获取结点出边邻居ID
int getOutVertID(int vid, int pred, int pos);
int getOutVertID(int vid, int pos);
  • 描述:获取指定结点入或出边邻居ID,一般与获取邻居数的函数配合使用。

  • 参数:

    vid: 结点ID

    pred: 谓词编号

    pos: 取第pos个邻居(邻居之间没有固定的排序标准)

  • 返回值:vid入或出边邻居ID

3.6 路径集合转字符串
string getPathString(std::vector<int> &path_set);
  • 描述:路径集合转字符串,值之间用,分割

  • 参数:

    path_set: 路径编号集合

  • 返回值:以,分割的字符串

4、执行示例

当我们完成自定义图分析算子的创建、编译后,就可以通过SPARQL语句去执行算子函数,通过统一入口PFN函数进行调用:

# 无K跳参数
SELECT (PFN(iri_set, directed, pred_set, fun_name) AS ?z) WHERE { };

# 有k跳参数
SELECT (PFN(iri_set, directed, k, pred_set, fun_name) AS ?z) WHERE { };

参数说明:

  • iri_set: 参数和结点IRI集合,如: {<Francis>, <Bob>}{<Eve>, ?x}
  • directed: 是否有向,布尔值(true-表示有向、false-表示无向,所有边视为双边)
  • k: 路径长度上限(查询K跳可达性)
  • path_set: 谓词集合(当参数设置为空{},则装载所有谓词),如: {<喜欢>,<关注>}{}
  • fun_name: 自定义函数名称,如: shortestPath

5、可视化管理

除了通过开放接口对自定义图分析算子进行管理外,在最新版本的gstore-workbench中还提供了可视化的管理方式,更加简单和高效:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUTZD3Zs-1661392337956)(D:\BaiduSyncdisk\weekly\2022-08-22gstore最新版本1.0之自定义图分析算子\5-1.png)]

th_set</font>: *谓词集合(当参数设置为空{},则装载所有谓词),如:* {<喜欢>,<关注>}{}`

  • fun_name: 自定义函数名称,如: shortestPath

5、可视化管理

除了通过开放接口对自定义图分析算子进行管理外,在最新版本的gstore-workbench中还提供了可视化的管理方式,更加简单和高效:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值