Neo4j与Cypher

tech2022-08-09  136

一、Neo4j简介

Neo4j是开源的高性能图数据库,也是当前最流行的图数据库。你可能了解过elasticsearch,MongoDB,redis,etcd,HBase这类NoSQL,但你不一定了解过Neo4j,因为它确实比较小众。如果你已经了解过TigerGraph或者Titan,那也一定要掌握Neo4j,未来的图数据库领域,毫不夸张的说:Neo4j is always the best.

二、图、图数据库

图包含两种基本的数据类型:Nodes(节点) 和 Relationships(关系)。Nodes 和 Relationships 包含key/value形式的属性。Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构。属性(schema)并不是固定的,意味着可以随时拓展,相对于传统的关系型数据库来说,具有更好的便利行和扩展能力。

图形数据库是NoSQL数据库的一种类型,是以图形结构的形式存储数据的数据库。 它以节点,关系和属性的形式存储应用程序的数据。 正如RDBMS以表的“行,列”的形式存储数据,GDBMS以“图形”的形式存储数据。最常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。

三、Cypher是什么

Cypher是Neo4j进行图查询的语言,类似与SQL,也是声明式的查询语言。它的特点:

1.Cypher语句可以创建节点,创建关系,定义标签和属性,相当于SQL中的DDL。

2.Cypher可以对节点的某个属性创建索引,创建唯一约束,相当于SQL中的DDL。

3.Cypher可以通过指定的条件来查询节点和关系,相当于SQL中的DQL。

4.Cyper可以随时为节点新增(/修改/删除)标签,新增(/修改/删除)关系,新增(/修改/删除)属性,相当于SQL中的DML。

5.Cypher语句中允许使用变量,用来表示命名、绑定元素和参数。

6.Cypher中的常用关键字函数有如下几种,关键字和函数名不区分大小写。

1)创建:CREATE

2)匹配:MATCH,OPTIONAL MATCH

3)删除:DELETE,REMOVE,DROP

4)修改:SET

5)关键字:where,and,or,in,union,union all

6)函数:id(),labels(),relationships(),shortestpath(),startNode(),endNode()

四、Neo4j数据元素的基本概念

Node:节点,或者称为实体。节点的创建通过( )来表示

Label:标签,一个节点可以拥有多个标签。

Relationship:关系,节点之间可以用单向的箭头表示的相关逻辑。关系的创建通过 [ ] 来表示。

Relationship Type:关系类型,关系的分类。关系类型相对于关系,如同标签相对于节点。一条关系只可以指定一个关系类型,如果两个节点之间有多条关系,那么可以建立多条关系,并指定不同的关系类型。

Property:属性,用过key-value形式的键值对表示一个属性。节点和关系都可以设置属性。Property Key即属性的键。

Path:路径,一条路径就是包含一系列节点和节点关系的连续组合。

为方便理解上述的定义,通过一个简单的案例来演示,执行如下的Cypher,看看Neo4j究竟做了什么。

CREATE (database:Database {name:"Neo4j"})-[r:SAYS]->(message:Message {name:"Hello World!"}) RETURN database, message, r

可以通过Neo4j的浏览器界面看到执行后的结果,左侧标红的部分是新创建的Node Label, Relationship Type,Property Key

这里,创建database和message两个节点时,顺便创建了两个Label:Database和Message,创建了一条由database指向message的关系r,它的关系类型是SAYS,其中database节点的拥有一个属性,键为name,值为Neo4j,message节点也同样拥有一个属性,键为name,值为Hello World。而database和message只是节点的别名,r是关系的别名,Neo4j不会对别名做存储,所以无任何实际意义。

执行下面的Cypher一样可以查询出刚刚创建的节点和关系:

match (n:Database)-[r:SAYS]->(m:Message) RETURN n, m, r

下面的文章Cypher实战将详细演示Cypher语法。

最新回复(0)