基础概念
- 1.扫盲概念:
- GraphDB 是一个企业图形数据存储引擎,它使用C#语言开发,并且是开源的,对于非商业目的可以免费下载,但如果用于商业目的则需要购买商业许可。
- GraphDB是NoSQL数据库的一种,它应用图理论存储实体之间的关系信息。常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。
- 图数据库以图论为基础,并以节点(顶点)、边和属性作为基本概念。
- 点(Node):表示一个实体,例如人,商品,或是一个账户。
- 边 (Edge):也称做关系(relation),表示点和点之间的连接关系,例如用户A买了商品B。通常边是有方向性的,例如用户A购买了商品B,就表示为A->B;如果是用户A和用户C互相都认识,这种关系就是双向的,表示为A<->B。
- 属性(propertis):表示点(Node)和边(Edge)所附带的信息,例如一个用户,他带有的属性可能是年龄30岁,爱好篮球等等。需要注意的是,每个点的属性(properties)是动态的,例如同样是用户A和C,A有属性“年龄30岁”,C却没有。但是它却包含属性“职业工程师”。
- 亮点:
- 完整的ACID支持
- 高可用性
- 轻易扩展到上亿级别的节点和关系
- 通过遍历工具高速检索数据
特点:
SQL就像简单的查询语言Neo4j CQL
它遵循属性图数据模型
它通过使用Apache Lucence支持索引
它支持UNIQUE约束
它它包含一个用于执行CQL命令的UI:Neo4j数据浏览器
它支持完整的ACID(原子性,一致性,隔离性和持久性)规则
它采用原生图形库与本地GPE(图形处理引擎)
它支持查询的数据导出到JSON和XLS格式
它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本
它支持两种Java API:Cypher API和Native Java API来开发Java应用程序
优点:
它很容易表示连接的数据
- 检索/遍历/导航更多的连接数据是非常容易和快速的
它非常容易地表示半结构化数据
Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
它使用简单而强大的数据模型
它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
属性图模型规则:
表示节点,关系和属性中的数据
节点和关系都包含属性
关系连接节点
属性是键值对
节点用圆圈表示,关系用方向键表示。
关系具有方向:单向和双向。
每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”
CQL Cypher查询语言。
CQL
它是Neo4j图形数据库的查询语言。
它是一种声明性模式匹配语言
它遵循SQL语法。
它的语法是非常简单且人性化、可读的格式。
常用的Neo4j CQL命令:
1。CREATE: 创建
- 创建节点,关系和属性
使用场景:
- 创建没有属性的节点
CREATE (<node-name>:<label-name>)
<node-name>
它是我们要创建的节点名称。<label-name>
它是一个节点标签名称
- 使用属性创建节点
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)<node-name>
它是我们将要创建的节点名称。
<label-name>
它是一个节点标签名称<Property1-name>...<Propertyn-name>
属性是键值对。 定义将分配给创建节点的属性的名称<Property1-value>...<Propertyn-value>
属性是键值对。 定义将分配给创建节点的属性的值在没有属性的节点之间创建关系
使用属性创建节点之间的关系
为节点或关系创建单个或多个标签
- 创建没有属性的节点
- 2。MATCH:匹配
- 检索有关节点,关系和属性数据
MATCH (<node-name>:<label-name>)
- 3。RETURN:返回
- 返回查询结果
RETURN <node-name>.<property1-name>,........<node-name>.<propertyn-name>
- 使用场景:
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
- 4.MATCH & RETURN匹配和返回
- 语法:
-MATCH Command RETURN Command
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
- 语法:
- 5.关系基础:
- 没有属性的关系与现有节点
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>- 1.MATCH,CREATE,RETURN 他们是Neo4J CQL关键字。
- 2.
<node1-name>
它用于创建关系的“From Node”的名称。 - 3.
<node1-label-name>
它用于创建关系的“From Node”的标签名称。 - 4.
<node2-name>
它用于创建关系的“To Node”的名称。 - 5.
<node2-label-name>
它用于创建关系的“To Node”的标签名称。 - 6.
<relationship-name>
这是一个关系的名称。 - 7.
<relationship-label-name>
它是一个关系的标签名称。
- 与现有节点的属性的关系
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>- 8.
<define-properties-list>
它是分配给新创建关系的属性(名称 - 值对)的列表。
- 8.
- 使用新节点创建没有属性的关系
CREATE
(<node1-label-name>:<node1-name>)-
[<relationship-label-name>:<relationship-name>]->
(<node1-label-name>:<node1-name>)
RETURN <relationship-label-name>
- 使用新节点创建与属性的关系
CREATE
(<node1-label-name>:<node1-name>{<define-properties-list>})-
[<relationship-label-name>:<relationship-name>{<define-properties-list>}]
->(<node1-label-name>:<node1-name>{<define-properties-list>})
RETURN <relationship-label-name>
- 检索关系节点的详细信息
MATCH
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
- 单个标签到关系
CREATE (<node1-name>:<label1-name>)-
[(<relationship-name>:<relationship-label-name>)]
->(<node2-name>:<label2-name>)
- 没有属性的关系与现有节点
- 6.WHERE:哪里
- 提供条件过滤检索数据
- 简单WHERE子句语法
WHERE <condition>
- 复杂WHERE子句语法
WHERE <condition> <boolean-operator> <condition>
<condition>
语法:<property-name> <comparison-operator> <value>
- WHERE 它是一个Neo4j CQL关键字。
<property-name>
<属性名称> 它是节点或关系的属性名称。<comparison-operator>
<比较运算符> 它是Neo4j CQL比较运算符之一。请参考下一节查看Neo4j CQL中可用的比较运算符。<value>
<值> 它是一个字面值,如数字文字,字符串文字等。
- 使用WHERE子句创建关系:
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<relationship-properties>}]->(<node2-label-name>)
- 5。DELETE:删除
- 删除节点和关系
- 6。REMOVE:移除
- 删除节点和关系的属性
- 7。ORDER BY:以…排序
- 排序检索数据
- Neo4j CQL 函数:
- 1。String:字符串
- 它们用于使用String字面量。
- UPPER 它用于将所有字母更改为大写字母。
- LOWER 它用于将所有字母改为小写字母。
MATCH (e:Employee)
RETURN e.id,LOWER(e.name),e.sal,e.deptno - SUBSTRING 它用于获取给定String的子字符串。
- REPLACE 它用于替换一个字符串的子字符串
- 它们用于使用String字面量。
- 2。Aggregation:聚合
- 它们用于对CQL查询结果执行一些聚合操作。
- COUNT 它返回由MATCH命令返回的行数。
- MAX 它从MATCH命令返回的一组行返回大值。
- MIN 它返回由MATCH命令返回的一组行的小值。
- SUM 它返回由MATCH命令返回的所有行的求和值。
- AVG 它返回由MATCH命令返回的所有行的平均值。
MATCH (e:Employee) RETURN COUNT(*)
- 它们用于对CQL查询结果执行一些聚合操作。
- 3。Relationship:关系
- 他们用于获取关系的细节,如startnode,endnode等。
- 1。String:字符串