内容简介:<span><span>LOAD CSV WITH HEADERS FROM "file</span>:<span>///asoiaf-all-edges.csv" AS row MERGE (src:Character {name: row.Source}) MERGE (tgt:Character {name: row.Target}) MERGE (src)-[r:INTERACTS]->(tgt)SET r.weight = toInt(row.weight)</span>
点击上方 蓝字 每天学习数据库
万众瞩目的《权力的游戏》第八季,伴随着“史诗级大烂尾”的哀怨声,终于完结了!
面对剧中错综复杂的人物关系,新粉们是不是已经捋不清楚了?不过,看到人物、节点、关系、属性,这些熟悉的名词,各位想到了什么?
是的, 图数据库! 一向以处理“关系的连接”称霸江湖的图数据库
接下来我们试一试好玩的,用图数据库Neo4j,来梳理一下权游的人物关系图。
Ps:贴心的小编在后面奉上了 Neo4j最全的安装配置教程 !快快收藏起来~
首先总览一下剧中人物关系图,几行代码就可清楚地展示所有人物间的连接,这就是图数据库的魅力所在。
<span><span>LOAD CSV WITH HEADERS FROM "file</span>:<span>///asoiaf-all-edges.csv" AS row MERGE (src:Character {name: row.Source}) MERGE (tgt:Character {name: row.Target}) MERGE (src)-[r:INTERACTS]->(tgt)SET r.weight = toInt(row.weight)</span></span>
<span><span>MATCH</span> <span>p=(:Character)-[:INTERACTS]-(:Character)</span></span>
<span><span>RETURN</span> <span>p</span></span>
<span><span>LIMIT</span> <span>50</span></span>
图1.《权利 的游戏》人物关系图
关键人物 怎么看呢?
关键节点:如果一个节点,位于其它两个节点所有的最短路径上,即称为关键节点。下图是我们找出的网络中所有的关键节点:
MATCH (a:Character), (b:Character) WHERE id(a) > id(b)MATCH p=allShortestPaths((a)-[:INTERACTS*]-(b)) WITH collect(p) AS paths, a, bUNWIND nodes(head(paths)) as c // first pathWITH * WHERE NOT c IN [a,b] AND all(path IN tail(paths) WHERE c IN nodes(path))RETURN a.name, b.name, c.name AS PivotalNode, length(head(paths)) as pathLength, length(paths) as pathCount SKIP 490 LIMIT 10
图2. 关键节点
接下来我们用拿"Anguy"和"Aeron-Greyjoy"来校验一下,查看两个节点的最短路径。
MATCH (a:Character {name: "Eustace-Brune"}), (b:Character {name: "Cressen"})MATCH p=allShortestPaths((a)-[:INTERACTS*]-(b))RETURN p
可看到结果刚好就是"Arya-Stark"和"Theon-Greyjoy"
图3. 关键节点校验
Amazing,如此“凌乱”的关系网,Neo4j秒秒钟可以理清,点个赞!
这么好用的图数据库,我们怎么上手呢?莫着急, 接下来就是关于Neo4j的简介,以及 史上最全的Neo4j安装配置教程 ,满满都是干货,快一起实践起来 吧~
Neo4j数据库的优势
Neo4j是基于 Java 语言编写图形数据库,是一种基于图论实现的新型 NoSQL 数据库。这种数据库在处理社交推荐,物流运输,欺诈检测,关系分析等领域有巨大优势。
-
在创建节点的时候就已经把关系给建立起来,避免了在复杂查询场景下的处理
-
基于JVM实现
-
提供一套易于理解的查询语言Cypher以及内置的可视化UI
-
很好的支持ACID,有事务机制
-
它很容易表示连接的数据
-
检索/遍历/导航更多的连接数据是非常容易和快速的
-
它非常容易地表示半结构化数据
-
Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
-
它使用简单,功能强大的数据模型。
-
它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
-
Neo4j是原生的图数据库引擎,由于底层直接以图的形式存储节点和关系,可以使用图结构的自然伸展特性来设计免索引邻近节点遍历的查询算法。Neo4j具有非常高效的查询性能,相比于RDBMS可以提高数倍乃至数十倍的查询速度。
Neo4j安装及实践
首先,奉上使用教程,Neo4j教程地址:http://neo4j.com.cn/public/cypher/default.html,接下来正式开始安装~
系统:Win10 64位
第一步: 安装Java JDK
Neo4j是用Java语言编写的图形数据库,因此运行时需要启动JVM进程,故需安装JAVA SE的JDK, 注意,此处有坑!
Neo4j企业或社区版目前不兼容Java 11及以上 !例如安装Java 12,在验证Neo4j的安装和配置是否成功时,是会报错的,如下图:
避坑结束~此处我们下载 Java 8 , 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载可能需注册登录Oracle账户,按流程创建/登录即可~
Ps: 不知如何安装&配置Java SE JDK的同学,参考https://blog.csdn.net/qq_35246620/article/details/61208961
已成功配置的老司机,可直接跳第二步!安装完成后,cmd输入java -version检查是否安装好
第二步:下载安装Neo4j
从官网下载最新版 Neo4j 社区版(Community)
下载好后解压到自己想放的盘里,例如:F:\neo4j-community-3.5.6
Neo4j应用程序有如下主要的目录结构:
-
bin目录:用于存储Neo4j的可执行程序;
-
conf目录:用于控制Neo4j启动的配置文件;
-
data目录:用于存储核心数据库文件;
-
plugins目录:用于存储Neo4j的插件;
Neo4j的环境配置:
点击此电脑,右键“属性”,进入高级系统设置,点击环境变量
新建系统变量NEO4J_HOME,变量值你自己的Neo4j主目录
设置完成,点击确定。同样再找到系统变量Path,最后加入 %NEO4J_HOME%\bin
接下来 检查Neo4j环境变量配置成功与否 。
打开命令提示符,输入echo %NEO4J_HOME% 和 echo %Path% ,如果显示你刚刚设置的值,那么你的配置已成功完成。
启动服务并验证,以cmd管理员身份运行neo4j.bat console,并回车(一定要以管理员身份进入cmd,否则会出现警告)
此时可 访问服务器了, 通过浏览器输入 http://localhost:7474/ , 初始的用户名和密码 均是neo4j,输入密码,点击connect
初次使用系统会要求你改密码,输入新密码即可~
至此,Neo4j的安装已全部完成。
现在可以来测试一下~
登录 http://localhost:7474/ 后,点击左侧数据库图标,可看到操作数据的面板
在命令框内输入命令,例如:
create (n:Person{name:'grace',title:'Product Operation Manager'}) return n;
点击右侧run图标, 可看到4种视图模式:Graph、Table、Text和Code,不同模式效果如下图所示:
给看到这步的自己点个赞吧!快快试起来,小伙伴们可在留言区一起交流~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Agile Web Application Development with Yii 1.1 and PHP5
Jeffrey Winesett / Packt Publishing / 2010-08-27
In order to understand the framework in the context of a real-world application, we need to build something that will more closely resemble the types of applications web developers actually have to bu......一起来看看 《Agile Web Application Development with Yii 1.1 and PHP5》 这本书的介绍吧!