Nebula | |
数据库模式 | Graph |
官网 | https://www.nebula-graph.com.cn/ |
说明文档 | https://docs.nebula-graph.io/ |
安装说明 | http://qa.anyline.org/v/44_3932 |
数据类型说明 | https://docs.nebula-graph.com.cn/3.6.0/3.ngql-guide/3.data-types/1.numeric/ |
DDL说明 | |
元数据说明 | |
示例代码 | |
驱动类 | NebulaDriver |
驱动下载 | |
驱动maven | org.nebula-contrib:nebula-jdbc |
JDBC-URL | jdbc:nebula://{host} |
支持语言 | .Net,C++,Go,Java,PHP,Python |
支持接口 | Browser interface,console (shell),Cypher Query Language,GO Object Graph Mapper,Java Object Graph Mapper,NGBatis ORM framework for NebulaGraph and Spring-Boot,Proprietary native API,Python Object Graph Mapper,Query language nGQL |
注意Nebula有两个适配器
anyline-data-jdbc-nebula(基于JDBC但非官方提供,也不完善)
anyline.datasource.url=jdbc:nebula://localhost:39669
anyline-data-nebula(基于官方提供的java驱动)
anyline.datasource.url=nebula://localhost:9669/simple
因为查询结果并不像关系型数据库那样的简单二维结构,所以有几个重要的参数会影响结果集的数据结构
* 0-不忽略
* 1-忽略
* 2-如果1个结果集则忽略 多个则保留
*/
ConfigTable.IGNORE_GRAPH_QUERY_RESULT_KEY;
/*
* 是否忽略查询结果中的表名,数据可能存在于多个表中
* 0-不忽略 CRM_USER.id
* 1-忽略 id
* 2-如果1个表则忽略 多个表则保留
*/
ConfigTable.IGNORE_GRAPH_QUERY_RESULT_TABLE;
/*
* 是否合并查询结果中的表,合并后会少一层表名被合并到key中(如果不忽略表名)
* 0-不合并 {"HR_USER":{"name":"n22","id":22},"CRM_USER":{"name":"n22","id":22}}
* 1-合并 {"HR_USER.name":"n22","HR_USER.id":22,"CRM_USER.name":"n22","CRM_USER.id":22}}
* 2-如果1个表则合并 多个表则不合并
*/
ConfigTable.MERGE_GRAPH_QUERY_RESULT_TABLE;
在一个图空间中,一个点由点的 ID 唯一标识,即 VID 或 Vertex ID。
VID 数据类型只可以为定长字符串FIXED_STRING(<N>)或INT64。VID 的数据类型必须在创建图空间时定义,且一旦定义无法修改。
一个图空间只能选用其中一种 VID 类型。
VID 在一个图空间中必须唯一,其作用类似于关系型数据库中的主键(索引+唯一约束)。但不同图空间中的 VID 是完全独立无关的。
点 VID 的生成方式必须由用户自行指定,系统不提供自增 ID 或者 UUID。
VID 相同的点,会被认为是同一个点。
NebulaGraph 的数据以点和边的形式存储。每个点可以有 0 或多个标签(Tag);每条边有且仅有一个边类型(Edge Type)。标签定义点的类型以及描述点的属性;边类型定义边的类型以及描述边的属性。在查询时,可以通过指定点的标签或边的类型来限定查询的范围。
NebulaGraph 的核心查询语句可分为:
FETCH PROP ON
LOOKUP ON
GO
MATCH
FIND PATH
GET SUBGRAPH
SHOW
FETCH PROP ON和LOOKUP ON更多用于基础的数据查询;GO和MATCH用于更复杂的查询和图数据遍历;FIND PATH和GET SUBGRAPH用于图数据的路径查询和子图查询;SHOW用于获取数据库的元数据信息。
anyline-data-jdbc-nebula(基于JDBC但非官方提供,也不完善)
anyline.datasource.url=jdbc:nebula://localhost:39669
anyline-data-nebula(基于官方提供的java驱动)
anyline.datasource.url=nebula://localhost:9669/simple
关系型数据库与图数据库的概念关系
|
catalog | schema | database | 表(类) | 行(实例) | 列(属性) | ||||||||||
|
顶点(节点)表(类型) | 边(关系)表(类型) | 顶点(节点) | 边(关系) | ||||||||||||
|
原生 | anyline实现 | 原生 | anyline实现 | 原生 | anyline实现 | 原生 | anyline | 原生 | anyline实现 | 原生 | anyline实现 | 原生 | anyline实现 | 原生 | anyline实现 |
Anyline相关方法名、参数名 |
|
|
|
|
|
|
Table |
|
|
|
|
|
|
|
|
|
relational类型 |
|
|
|
|
|
|
Table |
|
|
|
|
|
|
|
|
|
document类型 |
|
|
|
|
|
|
Collection |
|
|
|
|
|
|
|
|
|
event类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
graph类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kv类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
object类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rdf类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
search类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
spatial类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time series类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vector类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wide-column类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Neo4j |
|
|
|
|
|
|
Label |
|
|
|
|
|
|
|
|
|
Elasticsearch |
|
|
|
|
|
|
Index |
ElasticSearchIndex |
|
|
|
|
|
|
mappings.properties |
Column |
MongoDB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nebula |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Catalog |
SChema | Database | 表 | 行 | 列 | 顶点/节点 | 边/关系 | ||||||||
|
原生 | anyline实现 | 原生 | anyline实现 | 原生 | anyline实现 | 原生 | anyline实现 |
原生 |
anyline实现 |
原生 | anyline实现 | 原生 | anyline实现 | 原生 | anyline实现 |
Anyline相关方法名、参数名 |
|
|
|
|
|
|
Table |
|
|
|
Column |
|
|
|
|
|
relational类型 |
|
|
|
|
|
|
Table |
|
|
|
|
|
|
|
|
|
document类型 |
|
|
|
|
|
|
Collection |
|
|
|
|
|
|
|
|
|
event类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
graph类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kv类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
object类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rdf类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
search类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
spatial类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time series类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vector类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wide-column类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Neo4j |
|
|
|
|
|
|
Label |
|
|
|
Property |
|
Node |
|
Relationship |
|
Elasticsearch |
|
|
|
|
|
|
Index |
ElasticSearchIndex |
|
|
mappings.properties |
Column |
|
|
|
|
MongoDB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nebula | Space |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
关系型 | AnyLine | Nebula | NebulaAdapter | Neo4j | Neo4jAdapter |
Catalog | Catalog | Space | Catalog |
|
|
Table | VertexTable extends GraphTable extends Table | Tag(标签-点类型-点属性集合) |
Tag extends VertexTable |
Label(标签) | Label extends VertexTable |
Table | EdgeTable extends GraphTable extends Table |
Edge Type(边类型-边属性集合) |
EdgeType extends GraphTable |
RelationshipType(关系类型) |
RelationshipType extends EdgeTable |
行 | VertexRow extends GraphRow extneds DataRow |
Vertex(点) |
VertexRow | Node(节点) | NodeRow extends VertexRow |
行 | EdgeRow extends GraphRow extneds DataRow |
Edge(边) |
EdgeRow | Relationship(关系) |
RelationshipRow extends EdgeRow |
Column | Column |
Property(属性) |
Column | Property(属性) | Column |
为什么不用VertexType或VertexCollection?
因为type容易误会成一个属性,collection容易误会成结果集
与关系型不同的是,一个点可以有多个类型,相当于在多个表中,类似于扩展表(就是基础属性在一个Table中,更多属性放在另一个Table中,用同一个主键值)
因为查询结果并不像关系型数据库那样的简单二维结构,所以有几个重要的参数会影响结果集的数据结构
如:MATCH (v:CRM_USER:HR_USER) RETURN v
/*
*是否忽略查询结果中顶层的key,可能返回多个结果集* 0-不忽略
* 1-忽略
* 2-如果1个结果集则忽略 多个则保留
*/
ConfigTable.IGNORE_GRAPH_QUERY_RESULT_KEY;
/*
* 是否忽略查询结果中的表名,数据可能存在于多个表中
* 0-不忽略 CRM_USER.id
* 1-忽略 id
* 2-如果1个表则忽略 多个表则保留
*/
ConfigTable.IGNORE_GRAPH_QUERY_RESULT_TABLE;
/*
* 是否合并查询结果中的表,合并后会少一层表名被合并到key中(如果不忽略表名)
* 0-不合并 {"HR_USER":{"name":"n22","id":22},"CRM_USER":{"name":"n22","id":22}}
* 1-合并 {"HR_USER.name":"n22","HR_USER.id":22,"CRM_USER.name":"n22","CRM_USER.id":22}}
* 2-如果1个表则合并 多个表则不合并
*/
ConfigTable.MERGE_GRAPH_QUERY_RESULT_TABLE;
在一个图空间中,一个点由点的 ID 唯一标识,即 VID 或 Vertex ID。
VID 数据类型只可以为定长字符串FIXED_STRING(<N>)或INT64。VID 的数据类型必须在创建图空间时定义,且一旦定义无法修改。
一个图空间只能选用其中一种 VID 类型。
VID 在一个图空间中必须唯一,其作用类似于关系型数据库中的主键(索引+唯一约束)。但不同图空间中的 VID 是完全独立无关的。
点 VID 的生成方式必须由用户自行指定,系统不提供自增 ID 或者 UUID。
VID 相同的点,会被认为是同一个点。
NebulaGraph 的数据以点和边的形式存储。每个点可以有 0 或多个标签(Tag);每条边有且仅有一个边类型(Edge Type)。标签定义点的类型以及描述点的属性;边类型定义边的类型以及描述边的属性。在查询时,可以通过指定点的标签或边的类型来限定查询的范围。
NebulaGraph 的核心查询语句可分为:
FETCH PROP ON
LOOKUP ON
GO
MATCH
FIND PATH
GET SUBGRAPH
SHOW
FETCH PROP ON和LOOKUP ON更多用于基础的数据查询;GO和MATCH用于更复杂的查询和图数据遍历;FIND PATH和GET SUBGRAPH用于图数据的路径查询和子图查询;SHOW用于获取数据库的元数据信息。