概述
嬴图数据库的一个实例包含一或多个图(也称图集),每个图代表一个由相互连接的点、边组成的数据集或域。
嬴图中的图集或为Schema-Free(无Schema限制),或为Schema-Constrained(有Schema限制)。
显示图集
获取数据库中的图集信息:
// Shows all graphsets
show().graph()
//Shows all graphsets with additional details (total_nodes, total_edges, etc.)
show().graph().more()
// Shows the specified graphset
show().graph("myGraph")
// Shows the specified graphset with additional details (total_nodes, total_edges, etc.)
show().graph("myGraph").more()
语句返回以下表格:
_graph
表包含数据库中的所有图集。_graph_shard_<N>
表包含存储在Shard<N>
上的图集。
表中各字段提供了图集的基础信息:
字段 |
描述 |
---|---|
id |
图集的唯一ID |
name |
图集的唯一名称 |
description |
对图集的描述 |
status |
图集当前状态,包括NORMAL 、LOADING_SNAPSHOT 、CREATING 、DROPPING 和SCALING |
shards |
图数据分布所在Shard的ID |
partition_by |
计算分片键哈希值的函数,对图数据分片至关重要 |
meta_version |
Meta服务器使用的版本号,用于和分片服务器同步图集上的DDL(数据定义语言)操作 |
total_nodes |
图集的总点数。仅当调用more() 方法时,在表_graph 上出现 |
total_edges |
图集的总边数。仅当调用more() 方法时,在表_graph 上出现 |
schema_free |
图是否为Schema-Free |
创建图集
使用语句create().graph()
可创建一个图集。
create().graph("<name>", "<desc?>")
.schemaFree()
.shards(<shardList>)
.partitionByHash(<hashFunc>, <shardKey?>)
方法 | 参数 | 描述 |
---|---|---|
graph() |
<name> |
图集的唯一名称。命名规范如下:
|
<desc?> |
可选。对图集的描述 | |
schemaFree() |
/ | 可选。用来说明图是否为Schema-Free。一个Schema-Free的图,无需在插入数据前显式定义Schema。您可直接向图中插入点和边,对应的Schema和属性会自动创建 |
shards() |
<shardList> |
可选。图数据分布存储的Shard ID列表;默认为所有Shard |
partitionByHash() |
<hashFunc> |
可选。计算分片键哈希值的函数(Crc32 、Crc64WE 、Crc64XZ 或CityHash64 ),对图数据分片至关重要。默认为Crc32 。了解更多信息,请参阅Crc和CityHash |
<shardKey?> |
可选。用作分片键的点属性。目前仅支持_id |
创建图g1
,使用CityHash64
函数,根据点的_id
将数据分发至分片[1,2,3]
中:
create().graph("g1").shards([1,2,3]).partitionByHash(CityHash64, _id)
创建图g2
:
create().graph("g2")
创建Schema-Free的图g3
:
create().graph("g3").schemaFree()
修改图集名称和描述
使用语句alter().graph().set()
可以修改图集的名称和描述。
修改图集myGraph
的名称和描述:
alter().graph("myGraph").set({name: "superGraph", description: "Graph used for transactions"})
修改图集myGraph
的名称:
alter().graph("myGraph").set({name: "superGraph"})
修改图集myGraph
的描述:
alter().graph("myGraph").set({description: "Graph used for transactions"})
删除图集myGraph
的描述:
alter().graph("myGraph").set({description: ""})
迁移图集数据
由于图数据分布在多个Shard上,数据迁移有时是有必要的。比如,现有Shard过载时需迁移至更多Shard,或需要将数据分布到其他地理区域。将数据迁移至更少的Shard则可以释放未充分利用的资源,降低消耗,简化数据管理。使用alter().graph().shards().partitionConfig()
语句可迁移图集数据。
alter().graph("<graphName>").shards(<shardList>).partitionConfig({strategy: "<rsStrat>"})
方法 |
参数 |
描述 | 可选 |
---|---|---|---|
graph() |
<graphName> |
指定图集 | 否 |
shards() |
<shardList> |
图集数据存储所在Shard的非空ID列表。该列表不能与当前Shard列表相同,且需和partitionConfig() 中的strategy 集保持一致 |
否 |
partitionConfig() |
配置映射 | 指定迁移strategy ,包括:
balance |
是 |
假设图集myGraph
当前分布在Shard [1,2]
上,将其迁移至Shard [1,4,5]
:
alter().graph('myGraph').shards([1,4,5]).partitionConfig({strategy: "balance"})
将myGraph
从Shard [1,2]
迁移至Shard [3]
:
alter().graph('myGraph').shards([3]).partitionConfig({strategy: "balance"})
将myGraph
从Shard [1,2]
快速迁移至Shard [1,2,4]
:
alter().graph('myGraph').shards([1,2,4]).partitionConfig({strategy: "quickly_expand"})
将myGraph
从Shard [1,2]
快速迁移至Shard [1]
:
alter().graph('myGraph').shards([1]).partitionConfig({strategy: "quickly_shrink"})
删除图集
使用单个语句drop()
即可删除一个或多个图集。串联使用graph()
方法指定每个图集。删除图集意味着将整个图集从数据库删除。
删除图集myGraph
:
drop().graph("myGraph")
删除两个图集:
drop().graph("myGraph_1").graph("myGraph_2")
默认情况下,无法删除已创建HDC图的图集。可使用force()
方法绕过该限制,强制删除图集:
drop().graph("myGraph_1").graph("myGraph_2").force()
清空图集
使用truncate().graph()
语句清空图集。此操作只删除图集中的点边数据,但保留图集本身及其定义的图类型。
用户可选择清空整个图集、所有点、所有边或指定Schema的点或边。请注意,清空点时,与其相连的边也会同时被清空。
// Truncates the graphset 'myGraph' (all nodes and edges will be deleted)
truncate().graph("myGraph")
// Truncates all @user nodes (edges attached to them will be deleted too)
truncate().graph("myGraph").nodes(@user)
// Truncates all nodes (all edges will be deleted too)
truncate().graph("myGraph").nodes("*")
// Truncates all @link edges
truncate().graph("myGraph").edges(@link)
// Truncates all edges
truncate().graph("myGraph").edges("*")
清理图集
使用compact().graph()
语句清理图集。此操作清理服务器磁盘上的无效和冗余的图数据,但不会改变其他有效数据。图集清理操作以作业形式进行,稍后可使用show().job(<id?>)
验证操作是否完成。
清理图集myGraph
:
compact().graph("myGraph")
冗余数据可能由一些数据操作产生,如更新或删除数据后仍保留的历史记录。建议定期清理图集,回收存储空间,提升查询效率。