Nebula Graph是一款图数据库软件,如果你需要部署数据库就可以选择这款软件,软件可以将图形数据储存为点、边,方便用户快速建立数据关系,点是用点标识符(VID)标识的,VID在同一图空间中唯一,点必须有至少一个标签,标签可以用于对点进行区分。具有相同标签的点共享相同的属定义,边是用来连接点的,表示两个点之间的关系或行为,边类型用于对边进行区分,具有相同边类型的边共享相同的属定义,通过点和边的储存方式可以让数据之间更容易建立关系,方便以后快速建立数据模型分析事件,快速在数据库查询资源!
Nebula Graph软件功能
Nebula Graph是一款开源的、分布式的、易扩展的原生图数据库,能够承载数十亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。
什么是图数据库
图数据库是专门存储庞大的图形网络并从中检索的数据库。它可以将图形中的数据高效存储为点(vertex)和边(edge),还可以将属(pperty)附加到点和边上。
图数据库适合存储大多数从现实象出的数据类型。世界上几乎所有领域的事物都有内在联系,像关系型数据库这样的建模系统会提取实体之间的关系,并将关系单独存储到表和列中,而实体的类型和属存储在其他列甚至其他表中,这使得数据管理费时费力。
Nebula Graph作为一个典型的原生图数据库,允许将丰富的关系存储为边,边的类型和属可以直接附加到边上。
Nebula Graph的优势
1、开源
Nebula Graph是在Apache 2.0和Commons Clse 1.0条款下开发的。越来越多的人,如数据库开发人员、数据科学家、安全专家、算法工程师,都参与到Nebula Graph的设计和开发中来
2、高能
基于图数据库的特使用C++编写的Nebula Graph,可以提供毫秒级查询。众多数据库中,Nebula Graph在图数据服务领域展现了卓越的能,数据规模越大,Nebula Graph优势就越大。
3、易扩展
Nebula Graph采用shared-nothing架构,支持在不停止数据库服务的情况下扩缩容。
4、易开发
Nebula Graph提供Java、Python、C++和Go等流行编程语言的客户端,更多客户端仍在开发中。
5、高可访问控制
Nebula Graph支持严格的角色访问控制和LDAP(Lightweight Directory Access Ptocol)等外部认证服务,能够有效提高数据安全。
6、生态多样化
Nebula Graph开放了越来越多的原生工具,例如Nebula Graph Studio、nebula-console、Nebula Graph Exchange等。
此外,Nebula Graph还具备与Spark、Flink、HBase等产品整合的能力,在这个充满与机遇的时代,大大增强了自身的竞争力。
7、兼容openCypher查询语言
Nebula Graph查询语言,也称为nGQL,是一种声明的、兼容openCypher的文本查询语言,易于理解和使用。
8、灵活数据建模
您可以轻松地在Nebula Graph中建立数据模型,不必将数据强制转换为关系表之类的结构,而且可以自由增加、更新和删除属。
Nebula Graph软件特色
星云图(Nebula Graph)是一个开放源代码图数据库,能够托管具有数十亿个顶点(节点)和数万亿条边(具有几毫秒的延迟)的超大规模图。它提供了企业级的高能,可以将可以想象得到的最复杂的数据集简化为有意义和有用的。
与其他图形数据库解决方案相比,Nebula Graph具有以下优点:
对称分布
存储与计算分离
横向可扩展
通过RAFT协议实现强大的数据一致
类似于SQL的查询语言
基于角色的访问控制可提供更高级别的安全
Nebula Graph教程
基作语法
本文介绍Nebula Graph基作的语法。
图空间和Schema
一个Nebula Graph实例由一个或多个图空间组成。每个图空间都是物理隔离的,您可以在同一个实例中使用不同的图空间存储不同的数据集。
为了在图空间中插入数据,需要为图数据库定义一个Schema。Nebula Graph的Schema是由如下几部分组成。
Nebula Graph集群的机器状态
首先建议您机器状态,确保所有的Storage服务连接到了Meta服务。执行命令SHOW HOSTS查看机器状态。
在返回结果中,查看Status列,可以看到所有Storage服务都在线。
异步实现创建和修改
Nebula Graph中执行如下创建和修改作,是异步实现的,需要在下一个心跳周期才同步数据。
CREATE SPACE
CREATE TAG
CREATE EDGE
ALTER TAG
ALTER EDGE
CREATE TAG INDEX
CREATE EDGE INDEX
说明:默认心跳周期是10秒。修改心跳周期参数heartbeat_interval_secs,
为确保数据同步,后续作能顺利进行,可采取以下方法之一:
执行SHOW或DESCRIBE命令相应对象的状态,确保创建或修改已完成。如果没有完成,请等待几秒重试。
等待2个心跳周期(20秒)。
创建和选择图空间
nGQL语法
创建图空间
列出创建成功的图空间
示例
1、执行如下创建名为basketballplayer的图空间
2、执行命令SHOW HOSTS分片的分布情况,确保平衡分布。
如果Leader distbution分布不均匀,请执行命令BALANCE LEADER重新分配
3、选择图空间basketballplayer。
您可以执行命令SHOW SPACES查看创建的图空间。
创建标签和边类型
nGQL语法
示例
创建标签player和team,以及边类型follow和serve。说明如下表。
插入点和边
您可以使用,基于现有的标签插入点,或者基于现有的边类型插入边。
nGQL语法
插入点
VID是Vertex ID的缩写,VID在一个图空间中是唯一的。
插入边
示例
插入代表球员和球队的点
插入代表球员和球队之间关系的边。
查询数据
GO可以根据指定的条件遍历数据库。GO从一个或多个点开始,沿着一条或多条边遍历,返回YIELD子句中指定的。
FETCH可以获得点或边的属。
LOOKUP是基于索引的,和WHERE子句一起使用,查找符合特定条件的数据。
MATCH是查询图数据最常用的,但是它依赖索引去匹配Nebula Graph中的数据模型。
nGQL语法
GO示例
从VID为player100的球员开始,沿着边follow找到连接的球员。
从VID为player100的球员开始,沿着边follow查找年龄大于或等于35岁的球员,并返回他们的姓名和年龄,同时重命名对应的列。
从VID为player100的球员开始,沿着边follow查找连接的球员,检索这些球员的球队。为了合并这两个查询请求,可以使用管道符或临时变量。
使用管道符
使用临时变量
说明:当复合作为一个整体提交给时,其中的临时变量会在结束时被释放。
FETCH示例
查询VID为player100的球员的属。
修改点和边
您可以使用或UPSERT修改现有数据。
UPSERT是和的结合体。当您使用UPSERT更新一个点或边,如果它不存在,数据库会自动插入一个新的点或边。
说明:UPSERT作是基于Nebula Graph的分区进行串行作,所以执行速度比单独执行或慢。
nGQL语法
点
示例
用修改某条边的degree属,用FETCH结果
用UPSERT插入一个VID为player111的点
身份验证
身份验证用于将会话映到特定用户,从而实现访问控制。
当客户端连接到Nebula Graph时,Nebula Graph会创建一个会话,会话中存储连接的各种,如果开启了身份验证,就会将会话映到对应的用户。
说明:默认情况下,身份验证功能是关闭的,输入任意用户名和密码都可以连接到Nebula Graph。
Nebula Graph支持两种身份验证方式:本地身份验证和LDAP验证。
本地身份验证
本地身份验证是指在本地存储用户名、加密密码,当用户尝试访问Nebula Graph时,将进行身份验证。
启用本地身份验证
1、编辑配置文件nebula-graphd.conf(默认目录为/usr/local/nebula/etc/),设置--enable_thoze=true并保存退出。
2、重启Nebula Graph服务。
说明:开启身份验证后,默认的God角色为ot,密码为nebula。
LDAP验证
轻型目录访问协议(LDAP)是用于访问目录服务的轻型客户端-协议,可以实现集中管理。 启用LDAP验证后,LDAP中存储的用户优先级高于本地用户。例如本地和LDAP都有一个名为Amber的用户,则优先从LDAP读取该用户的设置和角色。
启用LDAP验证
当前仅企业版支持集成LDAP进行身份验证
用户管理
用户管理是Nebula Graph访问控制中不可或缺的组成部分,本文将介绍用户管理的相关语法。
开启身份验证后,您需要使用已创建的用户才能连接Nebula Graph,而且连接后可以进行的作也取决于该用户拥有的角色权限。
说明:
默认情况下,身份验证功能是关闭的,输入任意用户名和密码都可以连接到Nebula Graph。
修改权限后,对应的用户需要重新登录才能生效。
创建用户(CREATE USER)
执行CREATE USER可以创建新的Nebula Graph用户。当前仅God角色用户(即ot用户)能够执行CREATE USER。
授权用户(GRANT ROLE)
执行GRANT ROLE可以将指定图空间的内置角色权限授予用户。当前仅God角色用户和Admin角色用户能够执行GRANT ROLE。
撤销用户权限(REVOKE ROLE)
执行REVOKE ROLE可以撤销用户的指定图空间的内置角色权限。当前仅God角色用户和Admin角色用户能够执行REVOKE ROLE
修改用户密码(CHANGE PWORD)
执行CHANGE PWORD可以修改用户密码,修改时需要提供旧密码和新密码。
修改用户密码(ALTER USER)
执行ALTER USER可以修改用户密码,修改时不需要提供旧密码。当前仅God角色用户(即ot用户)能够执行ALTER USER。
删除用户(DROP USER)
执行DROP USER可以删除用户。当前仅God角色用户能够执行DROP USER。
说明:删除用户不会自动断开该用户当前会话,而且权限仍在当前会话中生效。
查看用户列表(SHOW USERS)
执行SHOW USERS可以查看用户列表。当前仅God角色用户能够执行SHOW USERS。
内置角色权限
所谓角色,就是一组相关权限的。您可以把角色分配给创建的用户,从而实现访问控制。
内置角色
Nebula Graph内置了多种角色,说明如下:
God
初始最高权限角色,拥有所有作的权限。类似于Linux中的ot和Windows中的。
Meta服务初始化时,会自动创建God角色用户ot,密码为nebula。
注意:请及时修改ot用户的密码,保证数据安全。
一个集群只能有一个God角色用户,该用户可以管理集群内所有图空间。
不支持手动授权God角色,只能使用默认God角色用户ot。
Admin
对权限内的图空间拥有Schema和data的读写权限。
可以将权限内的图空间授权给其他用户。
注意:只能授权低于级别的角色给其他用户。
DBA
对权限内的图空间拥有Schema和data的读写权限。
无法将权限内的图空间授权给其他用户。
User
对权限内的图空间拥有Schema的只读权限。
对权限内的图空间拥有data的读写权限。
Guest
对权限内的图空间拥有Schema和data的只读权限。
说明:
暂不支持自行创建角色,只能使用默认的内置角色。
一个用户在一个图空间内只能拥有一个角色权限
角色权限
各角色的执行权限如下
近期热门