概述
HDC投影驻留在HDC(高密度计算)服务器的内存中,其中包含从分片服务器物理存储中加载的图集的全部或部分数据。
HDC投影支持所有图算法和数据检索图查询。
管理HDC投影
显示HDC投影
调用hdc.graph.show()
过程获取当前图集的所有HDC投影信息:
CALL hdc.graph.show()
获取其中一个特定HDC投影信息,如名为hdcGraph_1
的投影:
CALL hdc.graph.show("hdcGraph_1")
语句返回表_projectList
,包含以下字段:
字段 |
描述 |
---|---|
project_name |
投影名称 |
project_type |
投影类型;HDC投影的类型为hdc |
graph_name |
加载数据的源图集名称 |
status |
投影的当前状态,包括DONE 、CREATING 、FAILED 和UNKNOWN |
stats |
投影包含的点边统计数据,包括schema(标签)、属性和总数 |
is_default |
说明该投影是否为当前图集的默认HDC投影 |
hdc_server_name |
托管投影的HDC服务器名称 |
hdc_server_status |
HDC服务器的当前状态,包括ACTIVE 和DEAD |
config |
HDC投影的配置 |
当使用hdc.graph.show("<projectName>")
获取特定投影信息时,会额外返回两个表:
_graph_from_<hdcName>
:显示<hdcName>
上创建的所有HDC投影_algoList_from_<hdcName>
:列出安装在<hdcName>
上的所有算法
其中,<hdcName>
是投影所在的HDC服务器名称。
创建HDC投影
调用hdc.graph.create().to()
过程可在HDC服务器上创建一个当前图集的内存投影。创建过程以作业形式执行,稍后可使用语句CALL job.show()
来验证投影是否创建成功。
CALL hdc.graph.create("<hdcName>", "<projectName>", {
nodes: {
"<label?>": ["<property1?>", "<property2?>", ...],
"<label2?>": ["<property1?>", "<property2?>", ...],
...
},
edges: {
"<label1?>": ["<property1?>", "<property2?>", ...],
"<label2?>": ["<property1?>", "<property2?>", ...],
...
},
direction: "<edgeDirection?>",
load_id: <boolean?>,
update: "<dataSyncMode>",
query: "query",
default: <boolean?>
})
参数 | 描述 | 可选 | |
---|---|---|---|
<hdcName> |
托管投影的HDC服务器名称 | 否 | |
<projectName> |
投影名称。HDC服务器上的HDC投影名称必须唯一,且不可与同一图集下的分布式投影重名 | 否 | |
配置映射 | nodes |
根据标签和属性指明待投影的点。默认加载_uuid ,可通过load_id 配置是否加载_id 。设置为 "*": ["*"] 时加载所有点 |
是 |
edges |
根据标签和属性指明待投影的边。默认加载所有系统属性。设置为"*": ["*"] 时加载所有边 |
是 | |
direction |
由于每条边在物理空间存储了两次(终点和一条入边以及起点和一条出边),您可选择使用in 只投影入边,使用out 只投影出边,或使用undirected (默认项)投影入边和出边。注意,使用in 或out 会在计算过程中将图遍历限制为指定的方向 |
是 | |
load_id |
设置为false 时,投影各点不加载_id 值以节约内存空间;默认为true |
是 | |
update |
设置数据同步模式。目前仅支持static 模式(默认),在该模式下,物理存储中的任何数据变更均不会同步至投影中 |
是 | |
query |
这是一个保留参数,用于设置一个查询语句来指定要投影的数据。目前仅可设置为query |
否 | |
default |
设置为true 时,指定本投影为当前图集的默认HDC投影;默认为false |
是 |
示例
将当前图集全部投影到hdc-server-1
上并命名为hdcGraph
:
CALL hdc.graph.create("hdc-server-1", "hdcGraph", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: true,
update: "static",
query: "query",
default: true
})
将当前图集投影到hdc-server-1
上并命名为hdcGraph_1
,其中点@account
和@movie
仅投影指定属性,边 @rate
仅投影入边,且不加载点的_id
值:
CALL hdc.graph.create("hdc-server-1", "hdcGraph_1", {
nodes: {
"account": ["name", "gender"],
"movie": ["name", "year"]
},
edges: {"rate": ["*"]},
direction: "in",
load_id: false,
update: "static",
query: "query",
default: false
})
删除HDC投影
调用hdc.graph.drop()
过程可以从HDC服务器上删除当前图集的HDC投影。
以下示例删除了名为hdcGraph_1
的HDC投影:
CALL hdc.graph.drop("hdcGraph_1")
示例图集和投影
在一个空图集中,运行以下语句创建示例图集:
INSERT (a:entity {_id: "A"}),
(b:entity {_id: "B"}),
(c:entity {_id: "C"}),
(d:entity {_id: "D"}),
(a)-[:link {weight:1}]->(b),
(a)-[:link {weight:1.5}]->(c),
(a)-[:link {weight:0.5}]->(d),
(b)-[:link {weight:2}]->(c),
(c)-[:link {weight:0.5}]->(d)
为全图创建名为hdcGraph
的HDC投影:
CALL hdc.graph.create("hdc-server-1", "hdcGraph", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: true,
update: "static",
query: "query",
default: false
})
执行查询
暂不支持在HDC投影上执行GQL查询。
执行算法
HDC算法在HDC投影上执行。HDC算法支持以下六种执行模式:文件回写、数据库回写、统计回写、完整返回、流式返回和统计返回。
回写模式
调用algo.<algoName>("<projectName>", {params:{}, write_params:{}})
过程在HDC投影上以回写模式(文件回写、数据库回写和统计回写)执行算法。
文件回写
在投影hdcGraph
上执行度中心性算法,计算所有点的出度并将结果回写到文件degree.txt
中:
CALL algo.degree("hdcGraph", {
params: {
return_id_uuid: "id",
direction: "out"
},
write_params: {
file: {
filename: "degree.txt"
}
}
})
结果:
_id,degree_centrality
D,0
B,1
A,3
C,1
数据库回写
在投影hdcGraph
上执行度中心性算法,计算所有点的度并将结果回写到点属性degree
中:
CALL algo.degree("hdcGraph", {
params: {},
write_params: {
db: {
property: "degree"
}
}
})
统计回写
在投影hdcGraph
上执行三角形计算算法,计算图中三角形的个数并将统计概述写至作业中:
CALL algo.triangle_counting("hdcGraph", {
params: {
result_type: 1
},
write_params: {
stats: {}
}
})
结果:
triangle_count |
---|
2 |
返回模式
调用algo.<algoName>("<projectName>", {params:{}, return_params:{}})
过程在HDC投影上以返回模式(完整返回、流式返回和统计返回)执行算法。
完整返回
在投影hdcGraph
上执行度中心性算法,计算所有点的出度并返回结果:
CALL algo.degree("hdcGraph", {
params: {
return_id_uuid: "id",
direction: "out"
},
return_params: {}
}) YIELD r
RETURN r
结果:
_id | degree_centrality |
---|---|
D | 0 |
B | 1 |
A | 3 |
C | 1 |
流式返回
在投影hdcGraph
上执行度中心性算法,计算所有点的出度并返回结果:
CALL algo.degree("hdcGraph", {
params: {
return_id_uuid: "id",
direction: "out"
},
return_params: {
type: "stream"
}
}) YIELD r
RETURN r
结果:
_id | degree_centrality |
---|---|
D | 0 |
B | 1 |
A | 3 |
C | 1 |
统计返回
在投影hdcGraph
上执行三角形计算算法,计算图中三角形的个数并返回统计概述:
CALL algo.triangle_counting("hdcGraph", {
params: {
result_type: 1
},
return_params: {
type: "stats"
}
}) YIELD s
RETURN s
结果:
triangle_count |
---|
2 |
图遍历方向
在创建HDC投影时,若direction
选项设定为in
或out
,图遍历会被对应限制在入边或出边上。若在查询或算法中遍历缺失的方向,则会引发报错或生成空结果。
创建HDC投影hdcGraph_in_edges
,其中包含所有点和入边:
CALL hdc.graph.create("hdc-server-1", "hdcGraph_in_edges", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "in",
load_id: true,
update: "static",
query: "query",
default: false
})
本条查询中,度中心性算法计算投影hdcGraph_in_edges
上所有点的出度,结果均为0。
CALL algo.degree("hdcGraph_in_edges", {
params: {
return_id_uuid: "id",
direction: "out"
},
return_params: {}
}) YIELD r
RETURN r
结果:
_id | degree_centrality |
---|---|
D | 0 |
B | 0 |
A | 0 |
C | 0 |
投影不包含点ID
在创建HDC投影时,若load_id
选项设定为false
,则投影不包含点的_id
值。若在查询或算法中引用了_id
,则会引发报错或生成空结果。算法回写文件会用_uuid
值替代_id
值。
创建图集的HDC投影hdcGraph_no_id
,其中不包含点的_id
值:
CALL hdc.graph.create("hdc-server-1", "hdcGraph_no_id", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: false,
update: "static",
query: "query",
default: false
})
度中心性算法计算投影hdcGraph_no_id
上所有点的度,由于投影不包含点的_id
值,结果中对应列的值均为空:
CALL algo.degree("hdcGraph_no_id", {
params: {
return_id_uuid: "id",
},
return_params: {}
}) YIELD r
RETURN r
结果:
_id | degree_centrality |
---|---|
2 | |
2 | |
3 | |
3 |
度中心性算法计算投影hdcGraph_no_id
上所有点的度,并将结果回写至文件degree.txt
上,其中点的_id
被替换成_uuid
:
CALL algo.degree("hdcGraph_no_id", {
params: {
return_id_uuid: "id"
},
write_params: {
file: {
filename: "degree.txt"
}
}
})
结果:
_uuid,degree_centrality
288232575174967298,2
3530824306881724417,2
10016007770295238657,3
12033620403357220866,3
投影不包含属性
如果创建HDC投影时未包含某些属性,则在查询或算法引用这些属性时会引发报错或生成空结果。
创建图集的HDC投影hdcGraph_no_weight
,其中包含所有点以及边@link
的系统属性:
CALL hdc.graph.create("hdc-server-1", "hdcGraph_no_weight", {
nodes: {"*": ["*"]},
edges: {"link": []},
direction: "undirected",
load_id: true,
update: "static",
query: "query",
default: false
})
度中心性算法根据边属性@link.weight
加权计算投影hdcGraph_no_weight
上所有点的度。由于weight
属性缺失,查询会引发报错:
CALL algo.degree("hdcGraph_no_weight", {
params: {
edge_schema_property: "@link.weight"
},
return_params: {}
}) YIELD r
RETURN r