(一)概念
1、图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)和边(Edge),还可以将属性(Property)附加到点和边上。
2、nebula 框架
3、特性
3.1、开源
3.2、高性能
3.3、易扩展
3.4、易开发
3.5、高可靠并发控制
3.6、生态多样性
3.7、兼容openCypher查询语言
3.8、面向未来硬件,读写平衡
3.9、灵活数据建模
4、场景
4.1、欺诈检测
4.2、实时推荐
4.3、知识图谱
4.4、社交网络
5、数据模型
数据模型是一种组织数据并说明它们如何相互关联的模型(schema)
5.1、图空间(space)
图空间用于隔离不同团队或者项目的数据。不同图空间的数据是相互隔离的,可以指定不同的存储副本数、权限、分片等。
5.2、点(Vertex)
点用来保存实体对象
点是用点标识符(VID
)标识的。VID
在同一图空间中唯一。VID 是一个 int64, 或者 fixed_string(N)。
点必须有至少一个Tag,也可以有多个Tag。但不能没有Tag。
5.3、边(Edge)
边是用来连接点的,表示两个点之间的关系或行为
两点之间可以有多条边。
边是有方向的,不存在无向边。
四元组 <起点VID、Edge type、边排序值(Rank)、终点VID>
用于唯一标识一条边。边没有EID。
一条边有且仅有一个Edge type。
一条边有且仅有一个rank。其为int64, 默认为0。
5.4、标签(Tag)
Tag由一组事先预定义的属性构成。
5.5、边类型(Edge type)
Edge type由一组事先预定义的属性构成。
5.6、属性(Properties)
属性是指以键值对(Key-value pair)形式存储的信息。
6、有向属性图
指点和边构成的图,这些边是有方向的,点和边都可以有属性。
7、路径
图论中一个非常重要的概念是路径,路径是指一个有限或无限的边序列,这些边连接着一系列点。
路径的类型分为三种:walk
、trail
、path
7.1、walk类型
walk
类型的路径由有限或无限的边序列构成。遍历时点和边可以重复
GO
语句采用的是walk
类型路径。
7.2、trail类型
trail
类型的路径由有限的边序列构成。遍历时只有点可以重复,边不可以重复。柯尼斯堡七桥问题的路径类型就是trail
。
MATCH
、FIND PATH
和GET SUBGRAPH
语句采用的是trail
类型路径。
7.3、path类型
path
类型的路径由有限的边序列构成。遍历时点和边都不可以重复。
8、VID
在Nebula Graph中,一个点由点的ID唯一标识,即VID或Vertex ID。
VID通常会被(LSM-tree方式)索引并缓存在内存中,因此直接访问VID的性能最高
VID的生成工作完全交给应用端,有一些通用的建议:
(最优)通过有唯一性的主键或者属性来直接作为VID;属性访问依赖于VID;
通过有唯一性的属性组合来生成VID,属性访问依赖于属性索引。
通过snowflake等算法生成VID,属性访问依赖于属性索引;
如果个别记录的主键特别长,但绝大多数记录的主键都很短的情况,不要将FIXED_STRING(<N>)
的N
设置成超大,这会浪费大量内存和硬盘,也会降低性能。此时可通过BASE64,MD5,hash编码加拼接的方式来生成。
如果用hash方式生成int64 VID:在有10亿个点的情况下,发生hash冲突的概率大约是1/10。边的数量与碰撞的概率无关。
VID的数据类型必须在创建图空间时定义,且一旦定义无法修改