图数据库测试点可以包括以下几个方面:
-
图结构验证:
验证图数据库是否正确地存储和表示图结构,包括节点和边的关系。 -
图查询测试:
测试图数据库的查询功能,包括节点和边的查询、路径查询、图算法等。 -
图数据导入和导出测试:
测试图数据库的数据导入和导出功能,确保数据能够正确地导入和导出。 -
图数据更新测试:
测试图数据库的数据更新功能,包括节点和边的添加、删除和更新操作。 -
图数据库性能测试:
测试图数据库的性能,包括查询性能、数据导入和导出性能等。 -
图数据库安全性测试:
测试图数据库的安全性,包括用户认证、权限控制等。 -
图数据库并发处理测试:
测试图数据库在并发访问和并发更新情况下的性能和稳定性。 -
图数据库扩展性测试:
测试图数据库在数据量增加和负载增加情况下的性能和扩展性。
主流的图数据库:Neo4j 和 Nebula
Neo4j - 数据模型:https://www.w3cschool.cn/neo4j/neo4j_data_model.html
一、组成部分
1.图空间(space):
图空间用于隔离不同团队或者项目的数据。不同图空间的数据是相互隔离的,可以指定不同的存储副本数、权限、分片等。
2.点(vertex):
点用来保存实体对象,特点如下:
点是用点标识符( VID )标识的。 VID 在同一图空间中唯一。VID 是一个 int64, 或者 fixed_string(N)。
点必须有至少一个标签(Tag),也可以有多个标签。
3.边(edge):
边是用来连接点的,表示两个点之间的关系或行为,特点如下:
两点之间可以有多条边。
边是有方向的,不存在无向边。
四元组 <起点VID、边类型(edge type)、边排序值(rank)、终点VID> 用于唯一标识一条边。边没有EID。
一条边有且仅有一个边类型。
一条边有且仅有一个 rank。其为int64, 默认为0。
4.标签(tag):
标签由一组事先预定义的属性构成。
5.边类型(edge type):
边类型由一组事先预定义的属性构成。
6.属性(properties):
属性是指以键值对(key-value pair)形式存储的信息。
二、数据类型
三、nGQL的符号说明
< > 语法元素的名称。
::= 定义元素的公式。
[ ] 可选元素。
{ } 显示指定元素。
| 所有可选的元素。
… 可以重复多次。
四、nGQL语法
1.创建节点
Cypher 插入特定类型点
CREATE (node:label)
nGQL 插入特定类型点
INSERT VERTEX <tag_name> (prop_name_list) VALUES :(prop_value_list)
2.查看节点
Cypher 查看点
MATCH (n) WHERE condition RETURN properties(n)
nGQL 查看点
FETCH PROP ON <tag_name>
3.删除
Cypher 删除点
MATCH (node:label)
DETACH DELETE node
nGQL 删除点
DELETE VERTEX
4.更新
Cypher 更新点
SET n.prop = V
nGQL 更新点
UPDATE VERTEX SET <update_columns>
5.创建边
Cypher 插入指定边类型的边
CREATE (:)-
[(:)]
->(:)
nGQL 插入指定边类型的边
INSERT EDGE <edge_name> (<prop_name_list>) VALUES <src_vid> -> <dst_vid>:
(<prop_value_list>)
6.删除边
Cypher 删除边
MATCH (:)-[r:relationship-label-name]->()
DELETE r
nGQL 删除边
DELETE EDGE <edge_type> <src_vid> -> <dst_vid>
- 查看边
Cypher 查看指定边
MATCH (n)-[r:label]->()
WHERE condition
RETURN properties®
nGQL 查看指定边
FETCH PROP ON <edge_name> <src_vid> -> <dst_vid>
8.指定边查询
Cypher 指定点查指定边
Match (n)->[r:label]->[]
WHERE id(n) = vid
RETURN r
nGQL 指定点查指定边
GO FROM OVER
9.反方向查询
Cypher 则更直观的将指向箭头反向变成 <- 来表示反向关系,nGQL 则用关键词 REVERSELY 来标识反向关系
Cypher 沿指定点反向查询指定边
MATCH (n)<-[r:label]-()
nGQL 沿指定点反向查询指定边
GO FROM OVER REVERSELY
10.无向遍历
Cypher 使用 -[]- ,nGQL使用关键词 BIDIRECT
Traverse edges with specified vertices Cypher
MATCH (n)-[r:label]-()
Traverse edges with specified vertices nGQL
GO FROM OVER BIDIRECT
11.沿指定点查询指定边
Cypher 沿指定点查询指定边 N 跳
MATCH (n)-[r:label*N]->()
WHERE condition
RETURN r
nGQL 沿指定点查询指定边 N 跳
GO N STEPS FROM OVER
12.返回指定两点路径
Cypher 返回指定两点路径
MATCH p =(a)-[.*]->(b)
WHERE condition
RETURN p
nGQL 返回指定两点路径
FIND ALL PATH FROM TO OVER *
13.创建数据
cypher> CREATE (src:character {name:“saturn”, age: 10000, type:“titan”})
cypher> CREATE (dst:character {name:“jupiter”, age: 5000, type:“god”})
nebula> INSERT VERTEX character(name, age, type) VALUES hash(“saturn”)😦“saturn”, 10000, “titan”), hash(“jupiter”)😦“jupiter”, 5000, “god”);