【Nebula笔记】基础操作

目录

一、预备~

二、基础操作

(一) 图空间

1. 创建图空间

2. 清空图空间

3. 其他

4. FAQ

执行DROP SPACE语句删除图空间后,为什么磁盘的大小没变化?

(二) 点类型

1. 创建Tag

2. 删除Tag

3. 更新Tag

4. 其他

(三) 边类型

1. 创建Edge type

2. 删除Edge type

3. 更新Edge type

4. 其他

(四) 点

1. 插入Vertex

2. 删除Vertex

3. 更新Vertex

4. 插入或更新Vertex

(五) 边

1. 插入Edge

2. 删除Edge

3. 更新Edge

4. 插入或更新Edge

(六) 作业管理

1. 支持的作业

SUBMIT JOB STATS

2. 查看作业

查看单个作业运行详情

查看作业列表

3. 停止作业

4. 重新执行作业

5. FAQ

如何排查作业问题

三、查询


相关文档:

  1. nGQL命令汇总:nGQL 命令汇总 - NebulaGraph Database 手册

一、预备~

一个NebulaGraph实例由一个或多个图空间组成。每个图空间都是物理隔离的,用户可以在同一个实例中使用不同的图空间存储不同的数据集。

为了在图空间中插入数据,需要为图数据库定义一个Schema。NebulaGraph的Schema是由如下几部分组成。

组成部分

说明

点(Vertex)

表示现实世界中的实体。一个点可以有一个或多个标签。

标签(Tag)

点的类型,定义了一组描述点类型的属性。

边(Edge)

表示两个点之间有方向的关系。

边类型(Edge type)

边的类型,定义了一组描述边的类型的属性。

二、基础操作

(一) 图空间

1. 创建图空间

CREATE SPACE [IF NOT EXISTS] <graph_space_name> ([partition_num = <partition_number>,][replica_factor = <replica_number>,]vid_type = {FIXED_STRING(<N>) | INT[64]})[COMMENT = '<comment>'];
  • partition_num:分片数,默认为10。建议设置为集群中硬盘数量的20倍(HDD硬盘建议为2倍)
  • replica_factor:副本数,默认为1。建议生产环境为3,测试环境为1,必须为奇数
  • vid_type*:指定点ID的数据类型,可选值为FIXED_STRING(<N>)INT64
  • COMMENT:图空间描述

示例

# 创建示例图中图空间
CREATE SPACE IF NOT EXISTS basketballplayer (vid_type=FIXED_STRING(32)) comment="测试图空间";# 指定分片数量、副本数量和 VID 类型,并添加描述。
CREATE SPACE IF NOT EXISTS my_demo (partition_num=15, replica_factor=1, vid_type=FIXED_STRING(32)) comment="测试图空间";# 克隆图空间
CREATE SPACE IF NOT EXISTS my_demo2 as my_demo;# 查看图空间创建语句
SHOW CREATE SPACE my_demo2;

2. 清空图空间

用于清空图空间中的点和边,但不会删除图空间本身及Schema信息

CLEAR SPACE [IF EXISTS] <space_name>;

建议在执行CLEAR SPACE操作之后,立即执行SUBMIT JOB COMPACT操作以提升查询性能

需要注意的是,COMPACT 操作可能会影响查询性能,建议在业务低峰期(例如凌晨)执行该操作。

💡 只有God 角色的用户可以执行CLEAR SPACE语句

3. 其他

# 切换图空间
USE <graph_space_name>;# 查询全部图空间
SHOW SPACES;# 查看图空间信息
DESC SPACE <graph_space_name>;# 删除图空间
DROP SPACE [IF EXISTS] <graph_space_name>;

4. FAQ

执行DROP SPACE语句删除图空间后,为什么磁盘的大小没变化?

如果使用 3.1.0 之前版本的 NebulaGraph , DROP SPACE语句仅删除指定的逻辑图空间,不会删除硬盘上对应图空间的目录和文件。如需删除硬盘上的数据,需手动删除相应文件的路径,文件路径为<nebula_graph_install_path>/data/storage/nebula/<space_id>。其中<space_id>可以通过DESCRIBE SPACE {space_name}查看。

(二) 点类型

1. 创建Tag

CREATE TAG [IF NOT EXISTS] <tag_name>(<prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'][{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] )[TTL_DURATION = <ttl_duration>][TTL_COL = <prop_name>][COMMENT = '<comment>'];
  • prop_name:属性名称
  • data_type:属性类型
  • NULL | NOT NULL:是否支持为NULL,默认为NULL
  • DEFAULT:指定属性默认值
  • COMMENT:指定属性描述信息
  • TTL_DURATION:指定时间戳差值,单位:秒。默认值为0,表示属性永不过期。
  • TTL_COL:指定要设置存活时间的属性。属性的数据类型必须是int或者timestamp。一个 Tag 只能指定一个字段为TTL_COL。更多 TTL 的信息请参见 TTL

示例

# 创建示例图中TAG
CREATE TAG IF NOT EXISTS player(name string COMMENT '姓名', age int DEFAULT 20 COMMENT '年龄') COMMENT='人物';
CREATE TAG IF NOT EXISTS team(name string COMMENT '团队名') COMMENT='团队';# 对字段 create_time 设置 TTL 为 100 秒。
CREATE TAG IF NOT EXISTS woman(name string, age int, married bool, salary double, create_time timestamp) TTL_DURATION = 100, TTL_COL = "create_time";

2. 删除Tag

DROP TAG [IF EXISTS] <tag_name>;

点可以有一个或多个Tag

  • 如果某个点只有一个 Tag,删除这个 Tag 后,用户就无法访问这个点,下次 Compaction 操作时会删除该点,但与该点相邻的边仍然存在——这会造成悬挂边
  • 如果某个点有多个 Tag,删除其中一个 Tag,仍然可以访问这个点,但是无法访问已删除 Tag 所定义的所有属性。

删除 Tag 操作仅删除 Schema 数据,硬盘上的文件或目录不会立刻删除,而是在下一次 Compaction 操作时删除。

NebulaGraph 3.6.0 中默认不支持插入无 Tag 的点。如需使用无 Tag 的点,

在集群内所有 Graph 服务的配置文件(nebula-graphd.conf)中新增:--graph_use_vertex_key=true

在所有 Storage 服务的配置文件(nebula-storaged.conf)中新增:--use_vertex_key=true

3. 更新Tag

ALTER TAG <tag_name><alter_definition> [[, alter_definition] ...][ttl_definition [, ttl_definition] ... ][COMMENT = '<comment>'];alter_definition:
| ADD    (prop_name data_type [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'])
| DROP   (prop_name)
| CHANGE (prop_name data_type [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'])ttl_definition:TTL_DURATION = ttl_duration, TTL_COL = prop_name
  • tag_name:指定修改的Tag名称,一次只能修改一个Tag
  • 可以在一个ALTER TAG语句中使用多个ADDDROPCHANGE,用,分割
  • ⚡当使用CHANGE修改属性的数据类型时
    • 仅允许修改FIXED_STRINGINT类型的长度为更大的长度,不允许减少长度
    • 仅允许修改FIXED_STRING类型为STRING类型、修改FLOAT类型为DOUBLE类型
    • 确保要修改的属性不包含索引,否则ALTER TAG时会报冲突错误[ERROR (-1005)]: Conflict!。删除索引请参见 drop index
    • 确保新增的属性名不与已存在或被删除的属性名同名

示例

CREATE TAG IF NOT EXISTS t1 (p1 string, p2 int);ALTER TAG t1 ADD (p3 int32, p4 fixed_string(10));
ALTER TAG t1 TTL_DURATION = 2, TTL_COL = "p2";
ALTER TAG t1 COMMENT = 'test1';
ALTER TAG t1 ADD (p5 double NOT NULL DEFAULT 0.4 COMMENT 'p5') COMMENT='test2';# 将 TAG t1 的 p3 属性类型从 INT32 改为 INT64,p4 属性类型从 FIXED_STRING(10) 改为 STRING。
nebula> ALTER TAG t1 CHANGE (p3 int64, p4 string);

4. 其他

# 查询当前图空间中全部Tag
SHOW TAGS;# 显示指定Tag信息
DESC[RIBE] TAG <tag_name>;# 删除指定点上的指定Tag
DELETE TAG <tag_name_list> FROM <VID_list>;

(三) 边类型

1. 创建Edge type

CREATE EDGE [IF NOT EXISTS] <edge_type_name>(<prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'][{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] )[TTL_DURATION = <ttl_duration>][TTL_COL = <prop_name>][COMMENT = '<comment>'];
  • prop_name:属性名称
  • data_type:属性类型
  • NULL | NOT NULL:是否支持为NULL,默认为NULL
  • DEFAULT:指定属性默认值
  • COMMENT:指定属性描述信息
  • TTL_DURATION:指定时间戳差值,单位:秒。默认值为0,表示属性永不过期。
  • TTL_COL:指定要设置存活时间的属性。属性的数据类型必须是int或者timestamp。一个 Tag 只能指定一个字段为TTL_COL。更多 TTL 的信息请参见 TTL

示例

# 创建示例图中Edge type
CREATE EDGE IF NOT EXISTS follow (degree int);
CREATE EDGE IF NOT EXISTS serve (start_year int, end_year int);# 对字段 p2 设置 TTL 为 100 秒。
CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int, p3 timestamp) TTL_DURATION = 100, TTL_COL = "p2";

2. 删除Edge type

DROP EDGE [IF EXISTS] <edge_type_name>

一个边只能有一个Edge type,删除这个 Edge type 后,用户就无法访问这个边,下次 Compaction 操作时会删除该边。

3. 更新Edge type

ALTER EDGE <edge_type_name><alter_definition> [, alter_definition] ...][ttl_definition [, ttl_definition] ... ][COMMENT = '<comment>'];alter_definition:
| ADD    (prop_name data_type)
| DROP   (prop_name)
| CHANGE (prop_name data_type)ttl_definition:TTL_DURATION = ttl_duration, TTL_COL = prop_name
  • edge_type_name:指定修改的Edge type名称,一次只能修改一个Edge type
  • 可以在一个ALTER TAG语句中使用多个ADDDROPCHANGE,用,分割
  • ⚡当使用CHANGE修改属性的数据类型时
    • 仅允许修改FIXED_STRINGINT类型的长度为更大的长度,不允许减少长度
    • 仅允许修改FIXED_STRING类型为STRING类型、修改FLOAT类型为DOUBLE类型
    • 确保要修改的属性不包含索引,否则ALTER EDGE时会报冲突错误[ERROR (-1005)]: Conflict!。删除索引请参见 drop index
    • 确保新增的属性名不与已存在或被删除的属性名同名

示例

CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int);ALTER EDGE e1 ADD (p3 int, p4 string);
ALTER EDGE e1 TTL_DURATION = 2, TTL_COL = "p2";
ALTER EDGE e1 COMMENT = 'edge1';

4. 其他

# 查询当前图空间中全部Edge type
SHOW EDGES;# 显示指定Edge type信息
DESC[RIBE] EDGE <edge_type_name>

(四) 点

1. 插入Vertex

一次可以在指定图空间插入一个或多个点

INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...]
VALUES VID: ([prop_value_list])tag_props:tag_name ([prop_name_list])prop_name_list:[prop_name [, prop_name] ...]prop_value_list:[prop_value [, prop_value] ...]   
  • IF NOT EXISTS:仅检测VID + Tag的值是否相同,不会检测属性值;并且会先读取一次数据是否存在,因此对性能会有明显影响
  • tag_name*:点关联的Tag,一个点可以关联多个Tag
  • vid*:点ID,在3.6.0中支持字符串和整数,需要在创建图空间时设置
  • prop_name:需要设置的属性名称
  • prop_value:根据prop_name_list填写的属性值

示例

# 创建示例图中Values
INSERT VERTEX player (name, age) VALUES "player102": ("LaMarcus Aldperties", 33), "player101": ("Tony", 36), "player100": ("Tim", 42);
INSERT VERTEX team (name) VALUES "team201": ("Nuggets"), "team200": ("Warriors");# 一次插入两个 Tag 的属性到同一个点。
INSERT VERTEX  t3 (p1), t4(p2) VALUES "21": (321, "hello");# 多次插入属性值,以最后一次为准
INSERT VERTEX t2 (name, age) VALUES "11":("n3", 14);
INSERT VERTEX t2 (name, age) VALUES "11":("n4", 15);
+-----------------------+
| properties(VERTEX)    |
+-----------------------+
| {age: 15, name: "n4"} |
+-----------------------+# 插入超长值后会被截断
CREATE TAG IF NOT EXISTS t5(p1 fixed_string(5) NOT NULL, p2 int, p3 int DEFAULT NULL);
INSERT VERTEX t5(p1, p2) VALUES "004":("shalalalala", 4);
+------------------------------------+
| properties(VERTEX)                 |
+------------------------------------+
| {p1: "shala", p2: 4, p3: __NULL__} |
+------------------------------------+

2. 删除Vertex

DELETE VERTEX <vid> [ , <vid> ... ] [WITH EDGE];
  • 一次可以删除一个或多个点,可结合管道符使用。2.X默认删除点及关联边,3.6.0默认只删除点
  • WITH EDGE:删除该点关联的出边和入边,否则会存在悬挂边

示例

# 删除 VID 为 `team1` 的点,不删除该点关联的出边和入边。
DELETE VERTEX "team1";# 删除 VID 为 `team1` 的点,并删除该点关联的出边和入边。
DELETE VERTEX "team1" WITH EDGE;# 结合管道符,删除符合条件的点。
GO FROM "player100" OVER serve WHERE properties(edge).start_year == "2021" YIELD dst(edge) AS id | DELETE VERTEX $-.id;
  • GO FROM "player100" OVER serve:从起始顶点 "player100" 出发,沿着 serve 这个边类型进行遍历
  • WHERE properties(edge).start_year == "2021":提取其属性中 start_year 字段值为 "2021" 的边
  • YIELD dst(edge) AS id:从满足条件的边中提取目标顶点(dst(edge))ID,并将这些ID赋值给变量id
  • | DELETE VERTEX $-.id:使用管道符,引用变量id,删除满足条件的顶点

3. 更新Vertex

一次只能针对一个Tag

UPDATE VERTEX ON <tag_name> <vid>
SET <update_prop>
[WHEN <condition>]
[YIELD <output>]
  • tag_name*:指定点的Tag
  • vid*:点ID
  • update_prop*:指定如何修改属性值
  • condition:指定过滤条件
  • output:指定语句的输出格式

示例

# 查看点”player101“的属性。
FETCH PROP ON player "player101" YIELD properties(vertex);
+--------------------------------+
| properties(VERTEX)             |
+--------------------------------+
| {age: 36, name: "Tony"} 			 |
+--------------------------------+# 修改属性 age 的值,并返回 name 和新的 age。
UPDATE VERTEX ON player "player101" SET age = age + 2 WHEN name == "Tony Parker" YIELD name AS Name, age AS Age;
+---------------+-----+
| Name          | Age |
+---------------+-----+
| "Tony"        | 38  |
+---------------+-----+

4. 插入或更新Vertex

插入或更新点属性,如果点存在,则修改点属性;否则插入新的点

一次只能针对一个Tag

UPSERT VERTEX性能远低于INSERT,因为UPSERT是一组分片级别的读取、修改、写入操作

⚡并发UPSERT同一个TAGEDGE TYPE会报错

UPSERT VERTEX ON <tag> <vid>
SET <update_prop>
[WHEN <condition>]
[YIELD <output>]
  • tag*:指定点的Tag
  • vid*:点ID
  • update_prop*:指定如何修改属性值
  • condition:指定过滤条件
  • output:指定语句的输出格式

示例

# 查看点是否存在,结果 “Empty set” 表示顶点不存在。
FETCH PROP ON * "player666" YIELD properties(vertex);
+--------------------+
| properties(VERTEX) |
+--------------------+
+--------------------+
Empty setUPSERT VERTEX ON player "player666" SET age = 30, name = "Joe" YIELD name AS Name, age AS Age;
+----------+----------+
| Name     | Age      |
+----------+----------+
| Joe			 | 30       |
+----------+----------+# 修改已存在的点,查看点player101的属性。
FETCH PROP ON player "player101" YIELD properties(vertex);
+--------------------------------+
| properties(VERTEX)             |
+--------------------------------+
| {age: 38, name: "Tony"} 			 |
+--------------------------------+
UPSERT VERTEX ON player "player101" SET name = "Tony Parker" YIELD name AS Name, age AS Age;
+---------------+-----+
| Name          | Age |
+---------------+-----+
| "Tony Parker" | 38  |
+---------------+-----+

(五) 边

1. 插入Edge

一次可以在指定图空间插入一条或多条边,边是有方向的,从起始点(src_vid)到目的点(dst_vid)

为覆盖式插入。如果已有 Edge type、起点、终点、rank 都相同的边,则覆盖原边。

INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES 
<src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> )
[, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...];<prop_name_list> :[ <prop_name> [, <prop_name> ] ...]<prop_value_list> :[ <prop_value> [, <prop_value> ] ...]
  • IF NOT EXISTS:仅检测edge_type + src_vid + dst_vid + rank的值是否相同,不会检测属性值;并且会先读取一次数据是否存在,因此对性能会有明显影响
  • edge_name*:边关联的Edge type,一个边只能指定一个Edge type
  • src_vid*:起始点ID
  • dst_vid*:目的点ID
  • rank:边的rank(排名)值,默认为0
  • prop_name_list:需要设置的属性名称列表
  • prop_value_list:根据prop_name_list填写的属性值

示例

# 创建示例图中Values
INSERT EDGE follow (degree) VALUES "player102" -> "player101": (75),  "player100" -> "player102": (90),  "player100" -> "player101": (95);
INSERT EDGE serve (start_year, end_year) VALUES "player100" -> "team200": (1997, 2016),  "player101" -> "team201": (1999, 2018);# 插入 rank 为 1 的边。
INSERT EDGE e1 () VALUES "10"->"11"@1:(); # 多次插入属性值。
nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 13);
nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 14);
nebula> FETCH PROP ON e2 "11"->"13" YIELD edge AS e;
+-------------------------------------------+
| e                                         |
+-------------------------------------------+
| [:e2 "11"->"13" @0 {age: 14, name: "n1"}] |
+-------------------------------------------+

2. 删除Edge

DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid>[@<rank>] ...]
  • 一次可以删除一条或多条边,可结合管道符使用
  • 如何需要删除一个点的所有出边,请删除这个点,详见:删除Vertex
  • ⚡如果不指定rank,则仅删除rank为0的边,需要删除所有的 rank,见如下示例。

示例

# 删除单条边
DELETE EDGE serve "player100" -> "team204";# 结合管道符,删除两点之间同类型的所有rank的边。
GO FROM "player100" OVER follow WHERE dst(edge) == "player101" YIELD src(edge) AS src, dst(edge) AS dst, rank(edge) AS rank | DELETE EDGE follow $-.src -> $-.dst @ $-.rank;
  • GO FROM "player100" OVER follow WHERE dst(edge) == "player101":从开始节点player100遍历目标节点为player101的follow类型的边
  • YIELD src(edge) AS src, dst(edge) AS dst, rank(edge) AS rank:返回遍历结果并赋值变量
  • | DELETE EDGE follow $-.src -> $-.dst @ $-.rank:使用管道符,引用变量,删除满足条件的全部边

3. 更新Edge

UPDATE EDGE ON <edge_type>
<src_vid> -> <dst_vid> [@<rank>]
SET <update_prop>
[WHEN <condition>]
[YIELD <output>]
  • edge_type*:指定边的Edge type
  • src_vid*:边的起始ID
  • dst_vid*:边的目的ID
  • rank:边的rank(排名)值
  • update_prop*:指定如何修改属性值
  • condition:指定过滤条件
  • output:指定语句的输出格式

示例

# 用 GO 语句查看边的属性值。
GO FROM "player100" OVER serve YIELD properties(edge).start_year, properties(edge).end_year;
+-----------------------------+---------------------------+
| properties(EDGE).start_year | properties(EDGE).end_year |
+-----------------------------+---------------------------+
| 1997                        | 2016                      |
+-----------------------------+---------------------------+# 修改属性 start_year 的值,并返回 end_year 和新的 start_year。
UPDATE EDGE ON serve "player100" -> "team200"@0 SET start_year = start_year + 1 WHEN end_year > 2010 YIELD start_year, end_year;
+------------+----------+
| start_year | end_year |
+------------+----------+
| 1998       | 2016     |
+------------+----------+

4. 插入或更新Edge

插入或更新边属性,如果边存在,则修改边属性;否则插入新的边

UPSERT EDGE性能远低于INSERT,因为UPSERT是一组分片级别的读取、修改、写入操作

⚡并发UPSERT同一个TAGEDGE TYPE会报错

UPSERT EDGE ON <edge_type>
<src_vid> -> <dst_vid> [@rank]
SET <update_prop>
[WHEN <condition>]
[YIELD <properties>]
  • edge_type*:指定边的Edge type
  • src_vid*:边的起始ID
  • dst_vid*:边的目的ID
  • rank:边的rank(排名)值
  • update_prop*:指定如何修改属性值
  • condition:指定过滤条件
  • output:指定语句的输出格式

示例

# 查看点是否有 serve 类型的出边,结果 “Empty set” 表示没有 serve 类型的出边。
GO FROM "player666" OVER serve YIELD properties(edge).start_year, properties(edge).end_year;
+-----------------------------+---------------------------+
| properties(EDGE).start_year | properties(EDGE).end_year |
+-----------------------------+---------------------------+
+-----------------------------+---------------------------+
Empty setUPSERT EDGE on serve "player666" -> "team200" SET start_year = 2020, end_year = 2021 YIELD start_year, end_year;
+------------+----------+
| start_year | end_year |
+------------+----------+
| 2020		   | 2021     |
+------------+----------+

(六) 作业管理

1. 支持的作业

SUBMIT JOB STATS

对当前图空间进行统计

其他作业操作详见官方文档

2. 查看作业

查看单个作业运行详情
SHOW JOB <job_id>;

参数

说明

Job Id(TaskId)

第一行显示作业 ID,最后一行显示作业相关的任务总数,其他行显示作业相关的任务 ID。

Command(Dest)

第一行显示执行的作业命令名称,最后一行显示作业相关的成功的任务数。其他行显示任务对应的 nebula-storaged 进程。

Status

显示作业或任务的状态,最后一行显示作业相关的失败的任务数。详情请参见作业状态。

Start Time

显示作业或任务开始执行的时间,最后一行显示作业相关的正在进行的任务数。

Stop Time

显示作业或任务结束执行的时间,结束后的状态包括FINISHED、FAILED或STOPPED。

Error Code

显示作业或任务的错误码。

状态说明

状态

说明

QUEUE

作业或任务在等待队列中。此阶段Start Time为空。

RUNNING

作业或任务在执行中。Start Time为该阶段的起始时间。

FINISHED

作业或任务成功完成。Stop Time为该阶段的起始时间。

FAILED

作业或任务失败。Stop Time为该阶段的起始时间。

STOPPED

作业或任务停止。Stop Time为该阶段的起始时间。

REMOVED

作业或任务被删除。

查看作业列表
SHOW JOBS;

3. 停止作业

STOP JOB <job_id>;

4. 重新执行作业

RECOVER JOB [<job_id>];
  • 重新执行当前图空间内状态为FAILEDSTOPPED的作业,未指定job_id时,会从最早的作业开始尝试重新执行

5. FAQ

如何排查作业问题

SUBMIT JOB操作使用的是HTTP端口,请检查Storage服务机器上的HTTP端口是否正常工作。可以执行如下命令调试:

curl "http://{storaged-ip}:19779/admin?space={space_name}&op=compact"

三、查询

💡查询当前图空间中全部点

MATCH (v) RETURN v;

💡查询当前图空间中全部点和边

MATCH ()-[e]->() RETURN e;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git如何在某个commitId的状态提交到一个分支

有些时候&#xff0c;我们在使用子仓库&#xff0c;或者其他情况&#xff0c;会有一个状态是当前的git仓库是在一个commitId上&#xff0c;而没有在一个分支上&#xff1a; 这时如果想要把基于这个commitId创建一个分支&#xff0c;可以使用下面这个命令&#xff1a; git push…

HCIA实验

实验目的&#xff1a; 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置IP地址&#xff0c;之后不能再对其进行任何配置&#xff1b; 2、R1-R5为局域网&#xff0c;私有IP地址192.168.1.0/24&#xff0c;请合理分配&#xff1b; 3、R1、R2、R4&#x…

前端理论总结(html5)——form表单的新增特性/h5的新特性

form表单的新增特性 range&#xff1a;范围 color&#xff1a;取色器 url&#xff1a;对url进行验证 tel&#xff1a;对手机号格式验证 email&#xff1a;对邮箱格式验证 novalidate &#xff1a;提交表单时不验证 form 或 input 域 numbe…

i5 1240p和r7 8840HS差距 酷睿i51240p和r7 8840HS参数对比

r7 8840HS采用 Zen 4架构 4 nm制作工艺8核 16线程主频 3.3GHz睿频5.1GHz 三 级缓存16MB TDP 功耗 28w 搭载AMD Radeon 780M核显 选r7 8840HS还是i5-1240P这些点很重要 http://www.adiannao.cn/dy i5-1240P处理器具有4个性能核心&#xff0c;8个效能核心&#xff0c;总计12核心…

JUC-多线程

目录 进程 线程 线程的串行 区别 多线程 进程 是指计算机中已执行的程序&#xff0c;曾经是分时系统的基本运作单位在面向进程设计的系统&#xff08;如早期的UNIX&#xff0c;Linux 2.4及更早的版本&#xff09;中&#xff0c;是程序的基本执行实体在面向线程设计的系统…

【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程

培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;在培训中我们的应急…

jdbc连接回顾

不使用任何工具类手动连接 package com.oracle.jdbc;import java.sql.*;/***jdbc查询 jdbc数据库下&#xff0c;user表中所有数据并打印在控制台* jdbc操作数据库步骤* 1注册驱动* 2创建数据库连接对象* 3获取传输器对象* 4执行sql* 5处理结果集* 6释放资源*/public cla…

OSCP靶场--Crane

OSCP靶场–Crane 考点(CVE-2022-23940sudo service提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.229.146 -sC -sV --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-25 08:07 EDT Nmap scan report for 192.16…

python环境移植(本机windows到离线windows环境)

Python环境整体迁移(包括无网络情况)_python 迁移 新老无法联网-CSDN博客

Java 算法和数据结构 答案整理,最新面试题

Java中如何使用动态规划求解背包问题&#xff1f; 1、定义子问题&#xff1a; 首先确定动态规划状态&#xff0c;通常以物品数量和背包容量为变量定义子问题&#xff0c;例如dp[i][j]表示前i件物品放入容量为j的背包所能获得的最大价值。 2、确定状态转移方程&#xff1a; 基…

vue 重新渲染dom

当我们用 v-if"pane_persuser" 之类的属性值&#xff08;true和false&#xff09;在父页面来控制子页面弹窗打开关闭时&#xff0c;在第二次打开子页面时&#xff0c;子页面并不会重新执行mounted&#xff0c;也就不会重新执行我们写的某些函数来加载界面的值&#x…

数字和

输入一个整数 n,求各个位上的数字和,最长 200 位 输入 123456789987654321123456789987654321 输出 180 样例输入 45676475645643535479097091092198721753297409443093983432 样例输出 268 代码 #include<bits/stdc.h> using namespace std; int main(){ …

手撕算法-盛最多水的容器

描述 分析 两个板之间能盛下的水的量&#xff0c;取决于短板。想让两个板之间能盛下更多的水&#xff0c;需要改变短板的长度。就像水桶效应&#xff1a;那么用两个指针指向容器的两个板&#xff0c;然后每次移动较短的板即可。移动较短的板&#xff0c;可能会增大容积&#x…

计算机网络常见题(持续更新中~)

1 描述一下HTTP和HTTPS的区别 2 Cookie和Session有什么区别 3 如果没有Cookie,Session还能进行身份验证吗&#xff1f; 4 BOI,NIO,AIO分别是什么 5 Netty的线程模型是怎么样的 6 Netty是什么&#xff1f;和Tomcat有什么区别&#xff0c;特点是什么&#xff1f; 7 TCP的三次…

解决 cv2.imread读取带中文路径图片问题

http://t.csdnimg.cn/i8CXn 1.问题&#xff1a; # 中草药数据集样本可视化展示 import cv2 import matplotlib.pyplot as plt %matplotlib inline plt.title("heshouwu") plt.imshow(cv2.imread(r"D:\home\aistudio\data1\archive\train\何首乌\heshouwu_0001.…

[C语言]结构体、位段、枚举常量、联合体

目录 结构体 结构体的使用方法 结构体所占用的大小 位段 位段的使用方法 位段所占用的大小 枚举常量 枚举常量的使用方法 枚举常量的优势 联合体 联合体的使用方法 结构体 结构体的使用方法 结构体是一些值的集合&#xff0c;我们可以定义一个结构体&#xff0c;里…

ARMday5

风扇蜂鸣器 1.main.c #include"led.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//外设初始化all_pplout_init();while(1){BUZZER_ON();delay(2000);BUZZER_OFF();delay(2000);MOTOR_ON();delay(2000)…

突破编程_C++_C++11新特性(多线程编程的互斥锁 mutex )

1 std::mutex 的基础概念 1.1 std::mutex 的定义与声明 std::mutex 是 C11 标准库中的一个互斥量&#xff08;mutex&#xff09;类&#xff0c;用于保护共享资源的并发访问。在多线程环境中&#xff0c;当多个线程试图同时访问和修改同一资源时&#xff0c;可能会发生数据竞争…

MySQL存储引擎的区别与选择

MySQL存储引擎是数据库用来处理不同表类型的内核组件&#xff0c;每个引擎都有独特的特性和适用场景。以下是MySQL中几种常见存储引擎的主要区别与选择建议&#xff1a; ### 1. InnoDB - 特性 - 支持事务处理&#xff08;ACID属性&#xff09;&#xff0c;适合对数据完整性…

数据结构入门框架

博主b站入口&#xff1a;Uncertanity的个人空间 参考资料&#xff1a; 《大话数据结构》程杰 《数据结构C语言(第二版)》严蔚敏