图数据库初试之Neo4j

自从进入了移动互联网时代,各种新事物出现的速度都好像坐上了宇宙飞船,几乎隔几天一个新概念。就拿数据库而言,什么Oracle、DB2、SQL Server、MySQL,这些你都得知道,然后是以MongoDB、HBase等为代表的NoSQL数据库,这几年图数据库也很快流行起来,它是如此的热门,以至于不赶紧学学好像没法跟大家交流了一般,虽然它也属于NoSQL。

练习完本文,大概需要20分钟。

基本概念

图数据库,这是一个很容易被误解的概念,好多人都下意识的以为,这是存储图片的数据库,其实不然。

传统的关系型数据库数据模型就是二维表,存储时每一条记录按行存储;到了NoSQL,有些存储的是文档,如MongoDB中,有些存储的键值对,如Redis,而图数据库,存储的则是点边关系。

所谓图,回想离散数学、数据结构之类的基础课,会想起它的定义,G = (V, E),简单来说,一个图有两个必要的组成要素,点集合和边集合,点的集合是为点集,点之间的连接关系构成了边集。典型的比如社交网络,每一个人都可以看成一个点,而他们之间的朋友关系,则可以看成是边。

为什么说图数据库这几年很热门,一个很重要的原因可能是,单一数据中的规律已经有太多的模型和算法可以处理了,而好多隐藏的规律,则蕴含在数据之间的连接中。拿一个欺诈检测中最典型的例子来说,好多不法分子申请信用卡,一个典型的特点是,他们会填写好多相同的地址和电话,如果单纯地分析信用卡申请单,很难判断他们是否欺诈,但如果利用图数据库,以申请人和地址作为点,以拥有某通信地址为边构建图,则很容易发现欺诈。(大家不要钻牛角尖啊,我只是举例说用图数据库很容易发现这种欺诈模式,并没有说你不能用其他的技术发现。)

还有一个传统关系型数据库和其他NoSQL数据库致命的弱点是,在一个图(也有的资料叫网络,这两者的区别以后有机会再解释)中,寻找二度及以上的关系,效率非常低。相比大家都听说过“小世界”理论,也就是说,世界上的任何两个人之间,只需要6个人就可以建立联系,也叫六度分割理论,这只是个假说,后来有研究人员研究过Facebook等的数据发现,真实的值,比6还要小,大概在4左右,不得不感叹,这个世界真小!言归正传,要想用关系型数据库寻找6度关系,大家想想那个计算量,简直大得惊人,而使用图数据库,则简单地多,因为它存储的就是点边关系,寻找几度关系这类为题,不过是图的遍历而已!

安装

一般这种新兴软件的安装都很简单,本文以macOS为例,其他平台请参考官方文档。

使用安装文件安装

访问https://neo4j.com/download/,选择For Individuals(Community版,免费),下载相应平台的安装文件即可。

使用HomeBrew安装

使用HomeBrew安装同样非常简单

$ brew install neo4j

使用如下命令启动

$ brew services neo4j start

启动后,打开浏览器,访问http://localhost:7474,即可看到Neo4j的web console,官方称之为Neo4j Browser。使用neo4j/neo4j分别作为用户名和密码。登录后会要求你更改用户名和密码

NOTE

万一遗忘密码,可以到Neo4j的数据目录下,删除<Neo4j_database_location>/data/dbms/auth,这样下次登录时会重置密码。

界面探索

启动后界面类似下图所示,做出的的边栏我点开了,右侧上方的命令条很重要,接下来的命令都要在此输入,整个界面还是比较易用的。

接下来介绍Cypher语句,这可谓是Neo4j的关键。

Cypher语句

Cypher语句是Neo4j的图查询语言。以下例子来自Neo4j Browser,启动后在命令栏输入:play cypher即可,可以参照例子进行学习,也可以参考本文练习。

CREATE

在上方命令条中输入如下语句

CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })

CREATE是创建记录的关键词;()指定一个节点;ee:Person,ee是一个变量,Person是一个Label;{}为节点添加属性

结果如下图

MATCH

MATCH关键词可以用于进行模式匹配(Pattern Matching),例如查找节点或者关系

MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;

MATCH节点或关系的匹配模式,类似SQL中的select;(ee:Person)一个Label为Person的单节点模式,匹配到的结果将赋值给变量ee;WHERE对结果的约束,类似SQL中的where语句;ee.name = "Emil"ee的属性name是Emil;RETURN请求特定结果。

MATCH语句不仅可以用于查询节点,还可以用于查询关系,例如如下的语句

MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee, friends

在上面这条语句中

MATCH语句描述了从已知节点到待寻找节点的模式;(ee)是一个指代已知节点的变量;-[:KNOWS]-匹配了KNOWS的关系(双向匹配);(friends)包含所有Emil的朋友

复合语句

除了上面这种简单的CREATE语句,还可以组合其他关键词添加更复杂的记录,我暂且叫它复合语句吧。

在上方命令条中输入如下语句

MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)

执行结果显示Added 4 labels, created 4 nodes, set 14 properties, created 7 relationships, completed after 13 ms.

分析Cypher语句

使用PROFILEEXPLAIN可以用于分析Cypher语句,加深对查询的理解

PROFILE MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer

使用Cypher语句进行推荐

模式匹配还能用来进行推荐。例如Johan正在学习冲浪,他想寻找一个新的已经在学习冲浪的朋友

MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer

可以从结果看到,该语句找到一个Johan的朋友Alison

小结

短短二三十分钟,相信你已经大概了解了Neo4j,接下来还会介绍更加深入的例子,结合客户端驱动(如Python)操作Neo4j,同时还会在后期结合一个具体的例子讲解Neo4j,感兴趣的欢迎关注哦。同时,大家也可以扫描二维码关注我的微信公众号哦。

图数据库初探之Neo4j的更多相关文章

  1. 图数据库对比:Neo4j vs Nebula Graph vs HugeGraph

    本文系腾讯云安全团队李航宇.邓昶博撰写 图数据库在挖掘黑灰团伙以及建立安全知识图谱等安全领域有着天然的优势.为了能更好的服务业务,选择一款高效并且贴合业务发展的图数据库就变得尤为关键.本文挑选了几款业 ...

  2. 图数据库ubentu环境neo4j安装

    1.下载进入官网下载https://neo4j.com/download-center/#releases 2.设置依赖仓库 wget -O - https://debian.neo4j.org/ne ...

  3. (三)图数据库neo4j的安装配置

    (一)neo4j安装 neo4j有社区版本和企业版,社区版本是免费的,企业版本是收费的.在linux上安装如下步骤: 1.将下载的neo4j-enterprise-3.4.0-unix.tar.gz包 ...

  4. neo4j(图数据库)是什么?

    不多说,直接上干货! 作为一款强健的,可伸缩的高性能数据库,Neo4j最适合完整的企业部署或者用于一个轻量级项目中完整服务器的一个子集存在. 它包括如下几个显著特点: 完整的ACID支持 高可用性 轻 ...

  5. JanusGraph : 图和图数据库的简介

    JanusGraph:图数据库系统简介 图(graph)是<数据结构>课中第一次接触到的一个概念,它是一种用来描述现实世界中个体和个体之间网络关系的数据结构. 为了在计算机中存储图,< ...

  6. Neo4j图数据库管理系统开发笔记之一:Neo4j Java 工具包

    1 应用开发概述 基于数据传输效率以及接口自定义等特殊性需求,我们暂时放弃使用Neo4j服务器版本,而是在Neo4j嵌入式版本的基础上进行一些封装性的开发.封装的重点,是解决Neo4j嵌入式版本Emb ...

  7. Neo4j图数据库管理系统开发笔记之三:构建安全的RMI Service(Server)

    RMI Server(服务端)主要包括以下功能:远程用户权限验证管理.远程服务接口实现类.Neo4j实体映射转换等.项目目录结构如下图所示: 3.2.1 远程用户权限验证管理 3.2.1.1 用户权限 ...

  8. Neo4j图数据库管理系统开发笔记之二:管理系统Server端界面一览

    最近在neo4j java api和rmi的基础上,设计了一套neo4j管理工具,分为server端和client端,中间用rmi进行通信.基本功能包括图数据库基本信息维护管理(创建.编辑.删除.统计 ...

  9. Neo4j图数据库简介和底层原理

    现实中很多数据都是用图来表达的,比如社交网络中人与人的关系.地图数据.或是基因信息等等.RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘.NoSQL数据库的兴起,很好地解决了海 ...

随机推荐

  1. JSP学习笔记(一)

    JSP是基于JAVA语言的,区分大小写,HTML不区分大小写 如何建立Web服务目录? 1.在Webapps下面建立Web服务目录MYJSP 在Webapps下面新建文件夹MYJSP,将写好的jsp文 ...

  2. EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传

    本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376 EasyCamera开源摄像机拥有获取摄像机实时快照并上传至EasyDarwin云平 ...

  3. 九度OJ 1121:首字母大写 (字符串处理)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2865 解决:1007 题目描述: 对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母. 在字符串中,单词 ...

  4. Cocos2d-JS 项目接入 触控广告平台(基于anysdk2.0.2)

    本文以Cocos2d-JS项目作为示例,讲解如何集成AnySDK-JS. 一.如何创建项目我就省略了,直接进入主题. 1.1 首先,我需要下载anysdk框架包,下载地址:http://www.any ...

  5. Linux环境下安装Tomcat

    一.准备安装的tar包 1.将安装包放在服务器上:apache-tomcat-7.0.81.tar.gz 2.将安装包解压:tar -zxvf apache-tomcat-7.0.81.tar.gz ...

  6. tableView滑动时cell消失

    最近做的工程中,出现个奇怪的问题吗,就是上下滑动tableView的时候,cell还未出屏幕就消失了,找了很久找到了原因,是因为界面中需要的cell有很多种,而有的cell的高度是一开始算出来或是固定 ...

  7. 恶心的struts标签,等我毕业设计弄完了,瞧我怎么收拾你。

    1.从java action中到页面中获取变量值的struts标签 获取从bean中定义的对象中属性的值: <s:property value="#request.cardTo.acc ...

  8. php排序方法之插入排序

    //插入排序法 $arr = array(3,55,45,2,67,76,6.7,-65,85,4); function insertSort($arr){ for ( $i=0; $i<cou ...

  9. 在KitKat(Android 4.4.2) 推送网址给手机

    弱者才会回避问题. 最近想把网址推送给手机实现后台下载,打算故技重施,用短信传送然后中断广播的方法实现隐蔽传送.试了半天发现怎么现在拦不住短信了.查了一下才发现原来Android4.4增加了一个安全机 ...

  10. <十三>UML核心视图静态视图之业务用例图

    一:uml的核心视图 --->如果说UML是一门语言,上一章学习的参与者等元素是uml的基本词汇,那么视图就是语法.uml通过视图将基元素组织在一起,形成有意义的句子. --->uml可视 ...