文章目录
前言
Neo4j的设计动机是为了更好地同时也更高效地描述实体之间的关系。在现实生活中,每一个实体都于周围的其他实体有着千丝万缕的关系,这些关系里面所存储的信息甚至要大于身体本身的属性。然后传统的关系型数据库更注重刻画实体内部的属性,实体与实体之间的关系通常都是利用外键来实现。所以在求解关系的时候通常需要join操作,而join操作通常又是耗时的。互联网尤其是移动互联网的爆发式增长本来就使得传统关系型数据库不堪重负,再加上诸如社交网络等应用对于关系的高需求,可以说关系型数据库已经是毫无优势。而图数据库作为重点描述数据之间关系的数据库应运而生,成为了NoSQL中非常重要的一部分。而Neo4j正是图数据库中最为优秀的之一[引]
这里汇总了目前我感兴趣并整理的一些有关Neo4J的知识点
一、Neo4j基础常用语句
MATCH (n:entity{name:'汕头市'}) where n.content = '汕头市' RETURN n
MATCH (n:entity{name:'汕头市'}) where n.content = '汕头市' RETURN n
MATCH (n:entity{name:'广东省'}) where n.type = '广东省' detach delete n
MATCH (n:entity) where n.type = '广东省' detach delete n
#detach 删除一个节点及其所有的关系
MATCH (n:entity{name:'广东省',content:'广东省'}) return n
MATCH (n:entity{name:'广东省',content:'广东省'}) return n
MATCH (n:entity) where n.type contains '.doc' RETURN n
match(x) return count(x)
MATCH (n) where n.type contains '.doc' RETURN count(n)
MATCH (n) where n.type contains '.doc' detach delete n
MATCH (n) where n.type contains '.doc' RETURN count(n)
MATCH (n) where n.name contains '.doc' detach delete n
MATCH (n:entity) where n.node_type <> ' ' RETURN count(n)
MATCH (n:entity) where n.node_type <> ' ' detach delete n
MATCH (n) where n.type contains '地质大辞典' RETURN count(n)
MATCH (n:entity) where n.type contains '测试' detach delete n
MATCH (n:entity) where n.type = '无' detach delete n(?)
待补充
二、常见面试题与基础知识
1.面试题
- 解释Neo4j
A:Neo4J是NoSQL, 无模式, 开源, 流行的图形数据库。它是世界领先的开源图形数据库。 - 为什么Neo4J被称为图数据库?
A:Neo4J之所以称为图数据库, 是因为它在图而不是表中存储数据结构。 - Neo4G用哪种语言编写?
A:Neo4J是用Java语言编写和实现的。 - Neo4J使用哪种查询语言?
A:Neo4J使用Cypher Query Language(CQL)。 - Neo4J的第一个版本是什么?何时发布?
A:Neo4J的第一个版本是Neo4j 1.0, 它于2010年2月发布。 - 为什么使用Neo4J?
A:Neo4J主要用于:实时数据分析、知识图、网络和IT运营、实时推荐引擎、数据管理
身份和访问管理、社交网络、隐私和风险管理 - 解释RDBMS和图形数据库之间的区别?
A: RDBMS和Graph Database都使用不同的方法来存储和检索数据。下表指定了它们之间的区别:
RMDBS | Neo4J |
---|---|
高度结构化的数据 | 允许对数据的简单且多样的管理 |
表格schema需预定义,修改和添加数据结构和类型复杂,对数据有严格的限制 | 数据添加和定义灵活,不受数据类型和数量的限制,无需提前定义 |
关系查询操作耗时 | 常数时间的关系查询操作 |
查询语句更为复杂,尤其涉及到join或union操作时 | 提出全新的查询语言cypher,查询语句更加简单 |
-
Neo4J中的节点, 关系, 属性和标签等构建块的作用是什么?
A:构建块的作用:
节点:它们是等同于表中行的实体。
关系:它连接实体和结构域。
属性:它包含元数据和属性。
标签:按角色分组节点。 -
哪些是流行的图形数据库
A:Neo4J是一个非常受欢迎的图形数据库。其他图数据库是Oracle NoSQL数据库, OrientDB, HypherGraphDB, GraphBase, InfiniteGraph, AllegroGraph等。 -
解释Neo4J的一些功能
A:Neo4J支持UNIQUE约束。
Neo4J将本机图形存储与本机GPE(图形处理引擎)结合使用。
Neo4J支持将查询数据导出为JSON和XLS格式。
Neo4J提供了REST API, 可通过Python, Java, Spring, Scala等任何编程语言进行访问。
Neo4J提供了Java脚本, 可以由任何UI MVC框架(如Node JS)访问。
Neo4J支持两种Java API:Cypher API和Native Java API, 用于开发Java应用程序 -
如何在Neo4J中存储文件?
A:Neo4J将图形数据存储在许多不同的存储文件中, 每个存储文件都包含图形特定部分的数据, 例如关系, 节点, 属性等。 -
Neo4J Graph Database和MySQL之间的区别是什么?
A: Neo4J和MySQL之间的区别:
Neo4J | MySQL |
---|---|
- 什么是CQL?如何在Neo4J中执行CQL命令?
A:CQL代表Cypher Query Language。 ” $”提示用于执行Neo4j中的所有CQL命令。 - 什么是Neo4J中的对象缓存?
A:在Neo4J中, 对象缓存用于存储单个节点, 它们之间的关系以及它们的属性, 其形式经过优化, 可以快速遍历图形。从对象缓存读取的速度比从文件缓冲区缓存读取的速度快5到10倍。 - 如何删除Neo4J中的数据库?
A:在Neo4J中删除命令:
# 删除单个节点:
MATCH (n:Person { name: 'UNKNOWN' }) DELETE n
# 删除所有节点和关系:
MATCH (n) DETACH DELETE n
# 删除具有其关系的节点:
MATCH (n { name: 'Andres' }) DETACH DELETE n
仅删除关系:
MATCH (n { name: 'Andres' })-[r:KNOWS]->() DELETE r
-
是否可以通过互联网查询Neo4j?
A:由于Neo4j具有RESTful API, 因此你可以通过Web查询, 也可以在本地运行它。它运行在Heroku或Cloud中。 -
什么是MATCH命令? Neo4J在哪里使用?
A:MATCH命令与RETURN或UPDATE子句一起使用。不能单独使用, 否则会出错
语法:
MATCH
(
<node-name>:<label-name>
)
MATCH命令不能单独用于从数据库中获取数据, 否则它将显示无效的语法错误。
- Neo4J中SET子句的用途是什么?
A:SET子句用于向现有节点或关系添加新属性。
2.基础知识
1)数据模型
Neo4j被称为property graph,除了顶点(Node)和边(Relationship,其包含一个类型),还有一种重要的部分——属性。无论是顶点还是边,都可以有任意多的属性。属性的存放类似于一个hashmap,key为一个字符串,而value必须是Java基本类型、或者是基本类型数组,比如说String、int或者int[]都是合法的。
2)索引
Neo4j支持索引,其内部实际上通过Lucene实现
3)事务
Neo4j完整支持事务,即满足ACID性质。
ACID是以下四个事务特性的缩写:
原子性 | 一个事务的所有工作要么都(成功)执行,要么都不执行。不会发生只执行一部分的情况。 | 比如说,一个事务开始更新100行记录,但是在更新了20行之后(因为某种原因)失败了,那么此时数据库会回滚(撤销)对那20条记录的修改。 |
一致性 | 事务将数据库从一个一致性状态带入另一个一致性状态。 | 比如说,在一个银行事务(在描述关系数据库事务的特性时,基本上都是用银行事务来作为描述对象的)中,需要从存储账户扣除款项,然后在支付账户中增加款项。如果在这个中转的过程发生了失败,那么绝对不能让数据库只执行其中一个账户的操作,因为这样会导致数据处于不一致的状态(这样的话,银行的账目上,借贷就不平衡了)。 |
隔离性 | 这个特性是说,直到事务结束时(commit/rollback),其他事务(或者会话)对此事务所操作的数据都不可见(但并不是说其他会话的读取会被阻塞)。 | 比如说,一个用户正在修改hr.employees表,但是没有提交,那么其他用户在这个修改没有提交之前是看不到这个修改的。 |
永久性 | 被提交的更改会永久地保存到数据库中(并不是说以后就不可以修改)。 | 事务提交之后,数据库必须通过“恢复机制”来确保事务更改的数据不会丢失。 |
4)遍历和查询
遍历是图数据库中的主要查询方式,所以遍历是图数据中相当关键的一个概念。可以用两种方式来进行遍历查询:第一种是直接编写Java代码,使用Neo4j提供的traversal框架;第二种方式是使用Neo4j提供的描述型查询语言,Cypher。
5) 图算法
Neo4j实现的三种图算法:最短路径(最少数目的关系)、Dijkstra算法(解决有向图中任意两个顶点之间的最短路径问题)以及A*算法(是解决静态路网中求解最短路最有效的方法)。
6) 嵌入式可扩展
Neo4j是一个嵌入式,基于磁盘的,支持完整事务的Java持久化引擎,它在图像中而不是表中存储数据。Neo4j提供了大规模可扩展性,在一台机器上可以处理数十亿节点、关系、属性的图像,可以扩展到多台机器并行运行。相对于关系数据库来说,图形数据库善于处理大量复杂、互连接、低结构化的数据,这些数据变化迅速,需要频繁的查询——在关系数据库中,这些查询会导致大量的表连接,因此会产生性能上的问题。Neo4j重点解决了拥有大量连接的传统RDBMS在查询时出现的性能衰退问题。通过围绕图形进行数据建模,Neo4j会以相同的速度遍历节点与边,其遍历速度与构成图形的数据量没有任何关系。
7) Neo4j优缺点
优点:
1、数据的插入,查询操作很直观,不用再像之前要考虑各个表之间的关系。
2、提供的图搜索和图遍历方法很方便,速度也是比较快的。
3、更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在MySql中存储的话需要许多表,并且表之间联系较多(即有不少的操作需要join表)。
缺点:
1、当数据过大时插入速度可能会越来越慢。.
2、超大节点。当有一个节点的边非常多时(常见于大V),有关这个节点的操作的速度将大大下降。
3、数据库内存占用量,而是需要计算后为其”预留“内存…
注:鉴于其明显的优缺点,Neo4j适合存储”修改较少,查询较多,没有超大节点“的图数据。
8) 应用场景
适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别
例如:社会关系,公共交通网络,地图及网络拓谱。
Neo4j不适用于:
1、记录大量基于事件的数据(例如日志条目或传感器数据)
2、对大规模分布式数据进行处理,类似于Hadoop
3、二进制数据存储
4、适合于保存在关系型数据库中的结构化数据
三、cypher语法
参考 https://www.cnblogs.com/huangwentian/p/14448399.html