概述
分布式投影驻留在图数据持久存储的Shard服务器内存中。分布式投影包含全部或部分图数据。“分布式”是指投影中的数据仍分布在多个Shard的内存中。
当图数据迁移并重新分发到不同Shard后,该图的所有分布式投影都将丢失。
显示分布式投影
获取当前图的所有分布式投影信息:
SHOW PROJECTION
show().projection()
语句返回表_projectionList
,包含以下字段:
字段 |
描述 |
---|---|
name |
投影名称 |
graph_name |
加载数据的源图集名称 |
status |
投影的当前状态,包括DONE 、CREATING 、FAILED 和UNKNOWN |
stats |
每个分片的点边统计数据,包括当前图集的主副本address 、edge_in_count 、edge_out_count 和node_count |
config |
分布式投影的配置 |
创建分布式投影
使用语句create.projection()
可在shard服务器上创建一个当前图集的内存投影。创建过程以作业形式执行,稍后可以使用语句show().job(<id?>)
验证投影是否创建成功。
语法
CREATE PROJECTION <projectionName> OPTIONS {
nodes: {
"<schema1>": ["<property1>", "<property2>", ...],
"<schema2>": ["<property1>", "<property2>", ...],
...
},
edges: {
"<schema1>": ["<property1>", "<property2>", ...],
"<schema2>": ["<property1>", "<property2>", ...],
...
},
direction: "<edgeDirection>",
load_id: <boolean>
}
create().projection("<projectionName>", {
nodes: {
"<schema1>": ["<property1>", "<property2>", ...],
"<schema2>": ["<property1>", "<property2>", ...],
...
},
edges: {
"<schema1>": ["<property1>", "<property2>", ...],
"<schema2>": ["<property1>", "<property2>", ...],
...
},
direction: "<edgeDirection>",
load_id: <boolean>
})
参数 | 描述 | 可选 |
---|---|---|
<projectionName> |
投影名称。一个图的分布式投影不能重名,分布式投影与HDC图也不能重名 | 否 |
nodes |
根据schema和属性指定待投影的点。默认加载_uuid ,可通过配置load_id 选择是否加载_id 。使用"*": ["*"] 加载所有点 |
是 |
edges |
根据schema和属性指定待投影的边。默认加载所有系统属性。使用"*": ["*"] 加载所有边 |
是 |
direction |
由于每条边在物理空间存储了两次(终点和一条入边以及起点和一条出边),您可选择使用in 只投影入边,使用out 只投影出边,或使用undirected (默认设置)投影入边和出边。请注意,使用in 或out 会在计算过程中限制图遍历为指定方向 |
否 |
load_id |
设置为false 时,投影各点不加载_id 值以节约内存空间;默认为true |
是 |
示例
将当前图集全部投影到shard服务器上并命名为distGraph
:
create().projection("distGraph", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: true
})
将当前图集投影到shard服务器上并命名为distGraph_1
,其中点@account
和@movie
仅投影指定属性,边@rate
仅投影入边,且不加载点的_id
值:
create().projection("distGraph_1", {
nodes: {
"account": ["name", "gender"],
"movie": ["name", "year"]
},
edges: {"rate": ["*"]},
direction: "in",
load_id: false
})
删除分布式投影
使用语句drop().projection()
可以从shard服务器上删除当前图集的分布式投影。
删除名为distGraph_1
的分布式投影:
drop().projection("distGraph_1")