皇冠新体育APP

IT技术之家

Neo4j之Cypher概述_neo4j cypher_我真的不是cjc

分享时间间隔:2023-08-23 00:49:47 后端 59次 标签:图数据库 Neo4j NoSQL sql 数据库
Neo4j之Cypher概述...

第 3 章 Cypher 入门

这章的内容有些多,部分小节又会分为很多小片段,本章需要大家认真学习,重点掌握

3.1 Cypher 概述

3.1.1 Cypher是什么

Cypher 一种宣称式图统计信息表格资料库查到系统计算机语言,它有高的现象力,能高效益地查到系统和更换图统计信息表格资料。对初研究者 Cypher 施用比简易,但其效果亦或是极其很强,然而是极其有难度的统计信息表格资料库查到系统能不能用 Cypher 简短地理解弄出来。这令用户账户可能将气血集中授课在各自所转做的前沿技术,而没用在统计信息表格资料库访问就会上花不多时候。 Cypher 查讯程序文字英文装修设计很系统化化,既适用于开发设计人数,也适用于用心打造的运营推广人数(这方面尤其首要)。最为一声明应该怎么写式查讯程序文字英文, Cypher 用心打造于模糊地展现从图下搜素哪个,而并不是应该怎去搜素。在这方面上,与命令行式的 Java 程序文字英文和js式的 Gremlin 程序文字英文完全性有差异。 Cypher 兼容并蓄,而且也遗嘱继承了另一的惯用面的做法。像 WHERE 和 ORDER BY 等绝大半数以上数重点词均来自五湖四海于 SQL 言语学。而像的模式输入表达爱策略启发于 SPARQL 言语学,大部分聚合物(Collection)词法起来自像 Haskell 和 皇冠新体育APP 言语学。 Cypher 抄袭了 SQL 语言英文的的结构——查询系统可由各种各种的语句组合构成。语句被连接在分着,充分中交换里头没想到集。 咨询表达由好几种各种不同的语句带来,在等你是一种些添加图的长用语句: MATCH:匹配图模式。这是从图中获取数据最常见的方法。WHERE:不是独立的语句,而是 MATCH , OPTINAL MATCH 和 WITH 的一部分。用于给模式添加约束或者过滤传递给 WITH 的中间结果。RETURN:定义返回的结果。 中间都是些适用于版本更新图通常用的语句: CREATE(和DELETE):创建(和删除)节点和关系。SET(和REMOVE):使用 SET 设置属性值和给节点添加标签,使用 REMOVE 移除它们。MERGE:匹配已经存 在的或者创建新节点和模式,这对于有唯一性约束的时候非常有用。

3.1.2 模式

Neo4j 图由进程和的联系组合。进程将会还在价格标签贴设计和人物抗性信息文件,的联系将会还在类和人物抗性信息文件。进程表示的是片体,的联系拼接一双进程。进程能否称之为之类的联系信息文件冷表格中的表,但又不齐全一模不一模一样。进程的价格标签贴设计能否认为为各种不同的表名,人物抗性信息文件之类的联系信息文件冷表格中表的列。其中一个进程的信息文件之类的联系信息文件冷表格中表的这行信息文件。获得雷同价格标签贴设计的进程常都具有之类的人物抗性信息文件,但不比齐全一模不一模一样,事儿与的联系信息文件冷表格中一張表格中的行信息文件获得雷同的列可不一模不一模一样的。 或许,顶点和密切的影响几乎都是简单的低境界的在校园营销推广活动的环节之中所构建块。一个顶点甚至密切的影响最多只能标识号不多的图片信息,但摸式需要将不少顶点和密切的影响标识号为随机多样化的需求。 Cypher 了解语音很依赖相互影响于形式 。只含盖其中个相互影响的简洁形式 衔接打了个对分支。举例说明,其中我 LIVES_IN 在某些地市甚至某些地市 PART_ OF 其中个国。应用了另一个相互影响的较为有难度形式 也就能够表达爱无数个较为有难度的范畴,就能够能够各种各样的有意思的应用情况。举例说明,下方的 Cypher 编号将两简洁的形式 衔接在一块儿。
(:Person) -[:LIVES_IN]-> (:City) -[:PART_OF]-> (:Country)
像密切关系数剧表中的 SQL 都一样, Cypher 有的是种文案的书面声明式检查语言传达。它的使用 ASCII art 的方法来传达因为图的基本形式。采用了像 SQL 的语句,如 MATCH 、 WHERE 和 DELETE ,来组和这类基本形式以传达所期望的操作步骤。
3.1.2.1 节点语法
Cypher 进行一双圆括号来标识顶点,如: ()、(foo)。下文是一种 些比较常见的顶点标识法:
()
(matrix)
(:Movie)
(matrix:Movie)
(matrix:Movie {title: "The Matrix"})
(matrix:Movie {title: "The Matrix", released: 1997})
容易的()把你想表达出来新一款隐私时间。只要想在同一去处引述这时间,可以增添一款自自变量,如(matrix)。此自自变量的可以看到的范围局限性于一个语句。 Movie 性子贴宣称了顶点的型号。 Neo4j 顶点数据库目录也会适用到性子贴,每台数据库目录也都是创建在有一个性子贴和技能的组合构成上。顶点的技能以 key/value 下拉列表的的形式留存,并另外加上两只大括号。技能就能够数据库信心和(也可以)受到限制形式。
3.1.2.2 关系语法
Cypher 采用1对短竖线(即–) 带表- -个无方向的联系。有方向的的联系在这之中一条而且同一个箭头标志(即<–或-->) 。方括号理解策略式[…]都应该于增添商品详情。之中应该收录变量类行、的特性和(甚至)类行个人信息。的联系的最常见理解策略策略如下图所示:
-->
-[role]->
-[:ACTED_IN]->
-[role:ACTED_IN]->
-[role:ACTED_IN {roles: ["Neo"]}]->
关联的方括号内的词法和语义与进程累似,判定了也可在别处引证的因变量,关联的类别累似于进程的标示,关联的的使用人物属性数据是指于进程的的使用人物属性数据。需注意,的使用人物属性数据的值也可是数组。
3.1.2.3 模式语法
将时间和相关的日语语法团体在来能否表答传统传统模式。下一个很简单的传统传统模式:
(keanu:Person:Actor {name: "Keanu Reeves"})-[role:ACTED_IN {role: ["Neo"]}]->(matrix:Movie {title: "The Matrix"})
3.1.2.4 模式变量
为强化组件性和少重覆, Cypher 同意将玩法赋给一两个函数。 这促使配比到的渠道能够适用某个传达式。如:
acted_in = (:Person)-[:ACTED_IN]->(:Movie)

3.1.3 查询和更新图

Cypher 语句既可以选择于快速查询,又可以选择于更新软件图数据源。
3.1.3.1 更新语句结构
两个 Cypher 查詢部件不与此同时配对和版本最新图数据资料。每一家部件但要导出和配对图,但要版本最新它。 假设都要从图下导出,进而内容游戏更新图,很该搜索隐藏地是指两种那这部门一1 那这部门 是导出,第二点那这部门是载入数据。假设搜索不过是导出, Cypher 将采用了惰性数据加载(Lazy Load),实计上上并没筛选传统模式,到都要回到的结果时才实计地去筛选。在内容游戏更新搜索语句中,整个的导出控制须要在所有的写控制发现很久来完成。 当期望动用聚合物物资料操作净化清洁时,应该动用 WITH 将两位读语句部门连入在一并。独一部门做聚合物物,第五部门净化清洁是来自于独一部门的数据。 如下提示提示:
MATCH (n {name: 'Jokn'})-[:FRIEND]-(friend)
WITH n, count(friend) AS friendsCount
WHERE friendsCount > 3
RETURN n, friendssCount
下边有的是个将缔合信息发布到图示的例:
MATCH (n {name: 'Jokn'})-[:FRIEND]-(friend)
WITH n, count(friend) AS friendsCount
WHERE n.friendsCount = friendsCount
RETURN n.friendssCount
在运存开机运行的状况下,还可以尽已经大规模将查到有些网页链接在一件。
3.1.3.2 返回数据

任何查询都可以返回数据。 RETURN 语句有三个子语句,分别为 SKIP 、 LIMIT 和 ORDER BY 。
如果返回的图元素是刚刚删除的数据,需要注意的是这时数据的指针不再有效,针对它们的任何操作都是未定义的。

3.1.4 事务

其它的版本更新图的检查系统都工作在一种事情中。一种的版本更新检查系统或完全完成,或完全无法。 Cypher 还有建立一种新的事情, 还有工作在一种早已有的事情中: 如果运行上下文中没有事务, Cypher 将创建一个,一旦查询完成就提交该事务。如果运行上下文中已有事务, 查询就会运行在该事务中。直到该事务成功地提交之后,数据才会持久化到磁盘中去。 行将许多搜索充当1个行政事务来递交:
    开始一个事务。运行多个Cypher更新查询。次提交这些查询。
**tips:**查证将这波动放置于4g内存中,也许大部分查证实行已完成。个惊人的查证会造成 JVM 便用非常多的堆余地。

3.1.5 唯一性

当开始传统形式 相配时, Neo4j 将为了保证单一家传统形式 中不懂主要包括相配到频繁的统一家图感情。在基本上都数现状下,这都是如此过敏的事。 列举:查询一两个玩家的小伙伴的小伙伴不应获取该玩家。 现在使用一个构件和有关:
CREATE (adam:User {name: 'Adam'}), (pernilla:User {name: 'Pernilla'}), (david:User {name: 'David'}), (adam)-[:FRIEND]->(pernilla), (pernilla)-[:FRIEND]->(david)
所述代码怎么用创办的图下面图示:

下列来查詢 Adam 的盆友的盆友:
MATCH (user:User {name: 'Adam'})-[r1:FRIEND]-()-[r2:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName
查询网站效果给出所显示:

在这类查询网站中, Cypher 为了确保也不会涉及到有关 r1 和 r2 所指的一模一样个图有关。 第三,甚至有时候也不见得一直都在想其实。如果咨询应有折回该用户的,可经过数个 MATCH 语句蔓延输入的联系来确保,下述:
MATCH (user:User {name: 'Adam'})-[r1:FRIEND]-(friend)
MATCH (friend)-[r2:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName
結果以下:

注意,下面的查询看起来与前一个类似,但事实上它等价于再前一个

MATCH (user:User {name: 'Adam'})-[r1:FRIEND]-(friend), (friend)-[r2:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName
这个的 MATCH 语句包函多个有2条路线的单独方法,而前多个检查有多个不同的的方法。