图数据库neo4j的基本使用
它是Neo4j图形数据库的查询语言。它是一种声明性模式匹配语言它遵循SQL语法。它的语法是非常简单且人性化、可读的格式。常用的CQL命令CQL命令用法CREATE 创建创建节点,关系和属性MATCH 匹配检索有关节点,关系和属性数据RETURN 返回返回查询结果WHERE 哪里提供条件过滤检索数据DELETE 删除删除节点和关系REMOVE 移除删除节点和关系的属性ORDER BY以…排序排序检索
图数据库neo4j的基本使用
认识图数据库
什么是neo4j图数据库
随着技术的发展,我们对数据的需求已经不再局限于对数据本身的获取了,我们还需要获取数据与数据间的关系(也就是连接数据)。
简单地说,我们可以说图数据库主要用于存储更多的连接数据(因为图结构相比其他数据结构而言,能保存更多的数据间的关系)。
如果我们使用 RDBMS 数据库来存储更多连接的数据,那么它们不能提供用于遍历大量数据的适当性能。 在这些情况下,Graph Database 提高了应用程序性能。
如今,大多数社交网络应用程序(如Facebook,Google +,LinkedIn,Twitter,Yammer 等)和视频托管应用程序(如 Google YouTube,Flickr,Yahoo Video等)都在使用更多连接的数据。
Neo4j属性图数据模型
Neo4j图数据库遵循属性图模型来存储和管理其数据。
属性图模型规则
- 表示节点,关系和属性中的数据
- 节点和关系都包含属性
- 关系连接节点
- 属性是键值对
- 节点用圆圈表示,关系用方向键表示。
- 关系具有方向:单向和双向。
- 每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”
在属性图数据模型中,关系应该是定向的。如果我们尝试创建没有方向的关系,那么它将抛出一个错误消息。
在Neo4j中,关系也应该是有方向性的。如果我们尝试创建没有方向的关系,那么Neo4j会抛出一个错误消息,“关系应该是方向性的”。
Neo4j图数据库将其所有数据存储在节点和关系中。我们不需要任何额外的RDBMS数据库或无SQL数据库来存储Neo4j数据库数据。
图形数据库数据模型的主要构建块是:
- 节点
- 关系
- 属性
简单的属性图的例子
这里我们使用圆圈表示节点。 使用箭头的关系。 关系是有方向性的。 我们可以用Properties(键值对)来表示Node的数据。 在这个例子中,我们在Node的Circle中表示了每个Node的Id属性。
Neo4j的特点
- 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的优点
- 它很容易表示连接的数据
- 检索/遍历/导航更多的连接数据是非常容易和快速的
- 它非常容易地表示半结构化数据
- Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
- 使用简单而强大的数据模型
- 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
Neo4j的缺点或限制
- AS的Neo4j 2.1.3最新版本,它具有支持节点数,关系和属性的限制。
- 它不支持Sharding。
Neo4j的基本使用
说到Neo4j的基本使用的话,就离不开CQL(Cypher查询语言), 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。
什么是CQL
- 它是Neo4j图形数据库的查询语言。
- 它是一种声明性模式匹配语言
- 它遵循SQL语法。
- 它的语法是非常简单且人性化、可读的格式。
常用的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 | 用于表示字符串。 |
CQL的使用示例
CREATE命令(新增)
创建没有属性的节点
下面我们创建一个叫做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命令查询刚刚新增的张志红老师match(teacher:Teacher) where teacher.name = "张志红" return teacher
**注:**match命令需要和return命令一起使用不然会提示错误
我们也可以使用命令检索出他们的属性match(teacher:Teacher) where teacher.name = "张志红" return teacher.name, teacher.somatotype
WHERE命令(条件)
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命令(删除)
删除节点。
删除节点及相关节点和关系。
现在我们就使用delete命令删除节点
- 我们可以先查询一下看看我们将要删除的数据
match(n:Teacher) return n
- 现在我们使用命令删除这些节点(叮叮车的这些节点就是Teacher标签的数据)
match(n:Teacher) delete n
- 看图1我们知道有些节点拥有关系,控制台告诉我们不能删除,所以需要将关系先删除
match(n:Teacher) - [r] -() delete r
- 现在我们执行删除命令
match(n:Teacher) delete n
REMOVE命令(删除)
删除节点或关系的标签
删除节点或关系的属性
首先我们创建测试数据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
SET命令(设置)
向现有节点或关系添加新属性
添加或更新属性值
- 我们创建一个节点
create(book:Book {name: "完美世界"}) return book
- 现在我们给他加上一个作者的属性
match(book:Book) where book.name = "完美世界" set book.author = "辰东" return book
ORDER BY(排序)
- 我们对数据进行升序查询
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(合并)
union:将两个查询语句的数据合并,会去重复
union all:将两个查询语句的数据合并,但不会去重
- 使用union进行数据合并
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
- 使用union all进行数据合并
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和SKIP子句(可以用来分页查询)
limit 就类似与我们MySQL的limit,就是返回条数据
skip 就类似与我们MySQL的offset,就是偏移量
下面我们就查询第二条数据开始的两条数据 match(b:Book) return b.author as person skip 1 limit 2
MERGE命令
只有在新增的数据不存在的时候,才能新增进去
- 我们先查询出所有数据
MATCH (n:Book) RETURN n LIMIT 25
- 此时我们使用merge命令新增数据
merge(book:Book {author: "辰东", name: "完美世界"}) return book
- 使用第一步的命令再次查询,发现数据并没有新增
更多推荐
所有评论(0)