赞
踩
随着技术的发展,我们对数据的需求已经不再局限于对数据本身的获取了,我们还需要获取数据与数据间的关系(也就是连接数据)。
简单地说,我们可以说图数据库主要用于存储更多的连接数据(因为图结构相比其他数据结构而言,能保存更多的数据间的关系)。
如果我们使用 RDBMS 数据库来存储更多连接的数据,那么它们不能提供用于遍历大量数据的适当性能。 在这些情况下,Graph Database 提高了应用程序性能。
如今,大多数社交网络应用程序(如Facebook,Google +,LinkedIn,Twitter,Yammer 等)和视频托管应用程序(如 Google YouTube,Flickr,Yahoo Video等)都在使用更多连接的数据。
Neo4j图数据库遵循属性图模型来存储和管理其数据。
属性图模型规则
在属性图数据模型中,关系应该是定向的。如果我们尝试创建没有方向的关系,那么它将抛出一个错误消息。
在Neo4j中,关系也应该是有方向性的。如果我们尝试创建没有方向的关系,那么Neo4j会抛出一个错误消息,“关系应该是方向性的”。
Neo4j图数据库将其所有数据存储在节点和关系中。我们不需要任何额外的RDBMS数据库或无SQL数据库来存储Neo4j数据库数据。
图形数据库数据模型的主要构建块是:
简单的属性图的例子
这里我们使用圆圈表示节点。 使用箭头的关系。 关系是有方向性的。 我们可以用Properties(键值对)来表示Node的数据。 在这个例子中,我们在Node的Circle中表示了每个Node的Id属性。
说到Neo4j的基本使用的话,就离不开CQL(Cypher查询语言), 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。
常用的CQL命令
CQL命令 | 用法 |
---|---|
CREATE 创建 | 创建节点,关系和属性 |
MATCH 匹配 | 检索有关节点,关系和属性数据 |
RETURN 返回 | 返回查询结果 |
WHERE 哪里 | 提供条件过滤检索数据 |
DELETE 删除 | 删除节点和关系 |
REMOVE 移除 | 删除节点和关系的属性 |
ORDER BY以…排序 | 排序检索数据 |
SET 组 | 添加或更新标签 |
常用的CQL函数
定制列表功能 | 用法 |
---|---|
String 字符串 | 它们用于使用String字面量。 |
Aggregation 聚合 | 它们用于对CQL查询结果执行一些聚合操作。 |
Relationship 关系 | 他们用于获取关系的细节,如startnode,endnode等。 |
Neo4j CQL数据类型
Neo4j CQL支持以下数据类型:
CQL数据类型 | 用法 |
---|---|
boolean | 用于表示布尔文字:true,false。 |
byte | 用于表示8位整数。 |
short | 用于表示16位整数。 |
int | 用于表示32位整数。 |
long | 用于表示64位整数。 |
float | I用于表示32位浮点数。 |
double | 用于表示64位浮点数。 |
char | 用于表示16位字符。 |
String | 用于表示字符串。 |
创建没有属性的节点
下面我们创建一个叫做teacher的Teacher标签类型的节点
Create (teacher:Teacher)
下面我们创建一个多标签的节点create (man:Sing:Jump:BasketBall {name: "坤"}) return man
创建具有属性的节点
下面我们创建一个带有属性的节点: create (teacher:Teacher {name: "张志红", somatotype: "strong"})
创建具有关系的节点
下面我们创建一个带有关系的节点,可达鸭要去唐老师课堂上听课
create(student:Student {name: "可达鸭"})-[hc:HaveClass] -> (teacher:Teacher {name: "唐老鸭"}) return student
我们可以使用match命令查询刚刚新增的张志红老师match(teacher:Teacher) where teacher.name = "张志红" return teacher
**注:**match命令需要和return命令一起使用不然会提示错误
我们也可以使用命令检索出他们的属性match(teacher:Teacher) where teacher.name = "张志红" return teacher.name, teacher.somatotype
Neo4j支持以下布尔运算符在Neo4j CQL WHERE子句中使用以支持多个条件。
布尔运算符 | 描述 |
---|---|
AND | 它是一个支持AND操作的Neo4j CQL关键字。 |
OR | 它是一个Neo4j CQL关键字来支持OR操作。 |
NOT | 它是一个Neo4j CQL关键字支持NOT操作。 |
XOR | 它是一个支持XOR操作的Neo4j CQL关键字。 |
Neo4j 支持以下的比较运算符,在 Neo4j CQL WHERE 子句中使用来支持条件。
布尔运算符 | 描述 |
---|---|
= | 它是Neo4j CQL“等于”运算符。 |
<> | 它是一个Neo4j CQL“不等于”运算符。 |
< | 它是一个Neo4j CQL“小于”运算符。 |
> | 它是一个Neo4j CQL“大于”运算符。 |
<= | 它是一个Neo4j CQL“小于或等于”运算符。 |
>= | 它是一个Neo4j CQL“大于或等于”运算符。 |
使用where命令我们可以做很多操作
例如:过滤特定属性的节点数据,以及给已经新增的的节点添加关系
删除节点。
删除节点及相关节点和关系。
现在我们就使用delete命令删除节点
match(n:Teacher) return n
match(n:Teacher) delete n
match(n:Teacher) - [r] -() delete r
match(n:Teacher) delete n
删除节点或关系的标签
删除节点或关系的属性
首先我们创建测试数据create(man:Sing:Jump:BasketBall {time: "两年半", hairstyle: "中分", job: "内娱"})
我们查询出数据有很个标签match(n:Sing) where ID(n) = 4 return n
删除节点或者关系的标签
现在删除打篮球的标签,因为发现“cai”打篮球并不是他的特长match(n:Sing) where ID(n) = 4 remove n:BasketBall
删除节点或关系的属性
现在删除hairstyle
属性,没有什么原因match(n:Sing) where ID(n) = 4 remove n.hairstyle
向现有节点或关系添加新属性
添加或更新属性值
create(book:Book {name: "完美世界"}) return book
match(book:Book) where book.name = "完美世界" set book.author = "辰东" return book
match(n:Book) return n.author, n.name order by n.name asc
match(n:Book) return n.author, n.name order by n.name desc
union:将两个查询语句的数据合并,会去重复
union all:将两个查询语句的数据合并,但不会去重
match(b:Book) return b.author as person, b.name as name union match(m:Movie) return m.protagonist as person, m.name as name
match(b:Book) return b.author as person, b.name as name union all match(m:Movie) return m.protagonist as person, m.name as name
limit 就类似与我们MySQL的limit,就是返回条数据
skip 就类似与我们MySQL的offset,就是偏移量
下面我们就查询第二条数据开始的两条数据 match(b:Book) return b.author as person skip 1 limit 2
只有在新增的数据不存在的时候,才能新增进去
MATCH (n:Book) RETURN n LIMIT 25
merge(book:Book {author: "辰东", name: "完美世界"}) return book
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。