|  | 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用于获取数据库的元数据信息。
