2019独角兽企业重金招聘Python工程师标准>>>

1.Neo4j简介

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上形成图谱而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性,如:事务,索引等。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

在一个图中包含两种基本的数据类型:Nodes(节点) 和 Relationships(关系)。Nodes 和 Relationships 包含key/value形式的属性。Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构。

目前的客户端接口方式包括:neo4j-shell,REST API,Driver(Java\.NET\JS\Python\Ruby\PHP)等等。截止此时,最新版本为3.2社区版和企业版,其中企业版支持HA集群。Neo4j中的语言采用Cypher,一种类似于SQL的语法格式。

Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。

2. 安装(单机社区版)

1).上Neo4j官网(https://neo4j.com/download)或(http://pacap.paic.com.cn/software/softwarepage/ 搜索neo4j)下载community社区版neo4j-community-3.1.3-unix.tar.gz,上传到Linux服务器(我这里是10.20.26.247),解压(tar -xvf neo4j-community-3.1.3-unix.tar.gz),同时需要安装jdk1.8,这里就不多说了。社区版解压之后目录如下:

注:Neo4j分为企业版和社区版,企业版是需要付费的。社区版是免费的。在基本功能上两个版本没有区别,企业版相比社区版拥有一些高级特性,如集群等。具体可参考官网https://neo4j.com/editions/关于两个版本的区别。对于一般中小型应用,社区版就足够用了,因此,这里选择社区版。当前最新稳定版为3.1.3。大约70多M。

2). 修改conf/neo4j.confj配置文件,将org.neo4j.server.webserver.address=0.0.0.0注释字符去掉(设为0.0.0.0后允许任意访问,默认为只允许本地访问)。

3). 最后进入bin目录,执行./neo4j start启动neo4j的服务即可。

3. 入门

既然是入门,那就从简单开始,一步一步熟悉Neo4j。

3.1 图形操作界面

运行Neo4j后,在浏览器中打开网页:http://10.20.26.247/:7474, 即可进入Neo4j的图形操作界面,默认的账号和密码为neo4j/neo4j。进入后需要修改密码。在里面可以直接操作数据库,也可以查看数据库的状态。如图:

页面顶端可以直接写Cypher语句并运行。

3.2 Cypher基本语句

Cypher是Neo4j的数据库语言,入门的话起码得知道增删改查吧。

·         插入节点。插入一个Person类别的节点,且这个节点有一个属性name,属性值为Andres

[size=1em]CREATE (nerson { name : 'Andres'});
 

·         插入边。插入一条a到b的有向边,且边的类别为Follow

[size=1em]MATCH (aerson),(berson)
[size=1em]WHERE a.name = 'Node A' AND b.name = 'Node B'
[size=1em]CREATE (a)-[r:Follow]->(b);
 

·         更新节点。更新一个Person类别的节点,设置新的name。

[size=1em]MATCH (nerson { name: 'Andres' })
[size=1em]SET n.name = 'Taylor';
 

·         删除节点和与其相连的边。Neo4j中如果一个节点有边相连,是不能单单删除这个节点的。

[size=1em]MATCH (nerson { name:'Andres' })
[size=1em]DETACH DELETE n;
 

·         删除边。

[size=1em]MATCH (aerson)-[r:Follow]->(berson)
[size=1em]WHERE a.name = 'Andres' AND b.name = 'Taylor'
[size=1em]DELETE r;
 

接着就是查询语句了,作为图形数据库,肯定要来点与众不同的查询对吧。

·         最短路径。

[size=1em]MATCH (mserson { name:'Andres' }),(cserson { name:'Taylor' }), p = shortestPath((ms)-[r:Follow]-(cs)) RETURN p;
 

·         查询两个节点之间的关系。

[size=1em]MATCH (aerson { name:'Andres' })-[r]->(b:Person { name:'Taylor' })
[size=1em]RETURN type(r);
 

·         查询一个节点的所有Follower。

[size=1em]MATCH (:Person { name:'Taylor' })-[r:Follow]->(Person)
[size=1em]RETURN Person.name;
 

还有更多的操作可以参考官方用户手册:官方用户手册

3.3 示例(明星关系图)

在页面最上面的cypher的执行器里面,插入一些数据:

1)      创建索引

[size=1em]CREATE INDEX ON :明星(名称)
 

2)      创建对象及关系

[size=1em]CREATE
[size=1em](陈冠希:明星     {名称: "陈冠希"}),
[size=1em](王菲:明星         {名称: "王菲"}),
[size=1em](李亚鹏:明星     {名称: "李亚鹏"}),
[size=1em](瞿颖:明星         {名称: "瞿颖"}),
[size=1em](张柏芝:明星     {名称: "张柏芝"}),
[size=1em](谢霆锋:明星     {名称: "谢霆锋"}),
[size=1em](周迅:明星         {名称: "周迅"}),
[size=1em](张亚东:明星     {名称: "张亚东"}),
[size=1em](窦唯:明星         {名称: "窦唯"}),
[size=1em](窦鹏:明星         {名称: "窦鹏"}),
[size=1em](李大齐:明星     {名称: "李大齐"}),
[size=1em](朴树:明星         {名称: "朴树"}),
[size=1em](窦颖:明星         {名称: "窦颖"}),
[size=1em](梁朝伟:明星     {名称: "梁朝伟"}),
[size=1em](刘嘉玲:明星     {名称: "刘嘉玲"}),
[size=1em](周迅)-[:旧爱]->(窦鹏),
[size=1em](周迅)-[:旧爱]->(李大齐),
[size=1em](周迅)-[:旧爱]->(朴树),
[size=1em](周迅)-[:旧爱]->(李亚鹏),
[size=1em](周迅)-[:绯闻]->(梁朝伟),
[size=1em](周迅)-[:绯闻]->(谢霆锋),
[size=1em](王菲)-[:离异]->(李亚鹏),
[size=1em](王菲)-[:旧爱]->(谢霆锋),
[size=1em](王菲)-[:离异]->(窦唯),
[size=1em](谢霆锋)-[:旧友]->(陈冠希),
[size=1em](谢霆锋)-[:离异]->(张柏芝),
[size=1em](张亚东)-[:制作人]->(朴树),
[size=1em](张亚东)-[:离异]->(窦颖),
[size=1em](张亚东)-[:制作人]->(王菲),
[size=1em](李亚鹏)-[:旧爱]->(瞿颖),
[size=1em](陈冠希)-[:旧爱]->(张柏芝),
[size=1em](瞿颖)-[:旧爱]->(张亚东),
[size=1em](窦唯)-[:堂兄弟]->(窦鹏),
[size=1em](窦唯)-[:兄妹]->(窦颖),
[size=1em](梁朝伟)-[:夫妻]->(刘嘉玲),
[size=1em](王菲)-[:好友]->(刘嘉玲)
 

1)      查明星之间的关系图:

[size=1em]MATCH (n:明星)   RETURN n
 

2)      查询“周迅”的直接关系:

[size=1em]MATCH m=(:明星 {名称:"周迅"})-[*..1]-() RETURN m
 

3)      查询“周迅和王菲”的最短路径:

[size=1em]MATCH p = AllShortestPaths(
[size=1em](周迅:明星 {名称:"周迅"})-[*..6]-(王菲:明星 {名称:"王菲"})
[size=1em]) RETURN p
 

3.4 Neo4j驱动

Neo4j提供了数种语言的数据库驱动,比如在java中,你可以这样创建一个图:

[size=1em]package neo4j;
[size=1em]import java.sql.Connection;  
[size=1em]import java.sql.DriverManager;  
[size=1em]import java.sql.ResultSet;  
[size=1em]import java.sql.SQLException;  
[size=1em]import java.sql.Statement;  
[size=1em]   
[size=1em]import org.neo4j.jdbc.Driver;  
[size=1em]//Class.forName("org.neo4j.jdbc.Driver");  
[size=1em]   
[size=1em]//Connect  
[size=1em]   
[size=1em]@SuppressWarnings("unused")
[size=1em]public class Neo4jJdbc {  
[size=1em]   
[size=1em]    public static void main(String[] args) throws SQLException {  
[size=1em]        // TODO Auto-generated method stub  
[size=1em]        Connection con = DriverManager.getConnection("jdbc:neo4j://10.20.26.247:7474/","neo4j","aic1234");  
[size=1em]   
[size=1em]        //Querying  
[size=1em]        try(Statement stmt = con.createStatement())  
[size=1em]        {  
[size=1em]         ResultSet rs = stmt.executeQuery("CREATE (ee1:员工 { 姓名: '小明', 来自: '湖北' , 年龄 : 29 })-[:爱]->(ee2:员工 { 姓名: '小红', 来自: '湖南' , 年龄 : 26 })");  
[size=1em]         while(rs.next())  
[size=1em]         {  
[size=1em]             System.out.println(rs.getString("n"));  
[size=1em]         }  
[size=1em]        }  
[size=1em]           
[size=1em]    }  
[size=1em]   
[size=1em]}
 

执行java代码后在neo4j图形操作页面可以看到新建的关系图:

4. Neo4j常用适用场景

·         社交网络

·         基于图的搜索

·         推荐引擎

·         欺诈检测

·         企业基础设施及网络架构

·         等等等

目前,业内已经有了相对比较成熟的基于图数据库的解决方案,大致可以分为以下几类。

1.金融行业应用

1)反欺诈多维关联分析场景

通过图分析可以清楚地知道洗钱网络及相关嫌疑,例如对用户所使用的帐号、发生交易时的IP地址、MAC地址、手机IMEI号等进行关联分析。

上图在图数据库中一个典型的反洗钱模型

2)反欺诈多维关联分析场景

反欺诈已经是金融行业一个核心应用,通过图数据库可以对不同的个体、团体做关联分析,从人物在指定时间内的行为,例如去过地方的IP地址、曾经使用过的MAC地址(包括手机端、PC端、WIFI等)、社交网络的关联度分析,同一时间点是否曾经在同一地理位置附近出现过,银行账号之间是否有历史交易信息等。

上图为在图数据库中一个典型的金融反欺诈关联分析模型

2.社交网络图谱

在社交网络中,公司、员工、技能的信息,这些都是节点,它们之间的关系和朋友之间的关系都是边,在这里面图数据库可以做一些非常复杂的公司之间关系的查询。比如说公司到员工、员工到其他公司,从中找类似的公司、相似的公司,都可以在这个系统内完成。

上图在图数据库中典型的社交关系网络模型

5.图数据库的优缺点

数十年来,开发者试图使用关系型数据库处理关联的、半结构化的数据集。关系型数据库设计之初是为了处理纸质表格以及表格化结构,它们试图对这种实际中的特殊联系进行建模。然而讽刺的是,关系型数据库在处理联系上做得却并不好。

关系数据库是强大的主流数据库,经过40年的发展和改进,已经非常可靠、强大并且很实用,可以保存大量的数据。如果你想查询关系型数据库里的单一结构或对应数据信息的话,在任何时间内都可以查询关于项目的信息,或者你想查询许多项目在相同类型中的总额或平均值,也将会很快得到答案。

关系型数据库不擅长什么呢?当你寻找数据项、关系模式或多个数据项之间的关系时,它们常会以失败告终。

例如在下面这个例子中,我们希望在一个社交网络里找到最大深度为5的朋友的朋友。假设随机选择两个人,是否存在一条路径,使得关联他们的关系长度最多为5?对于一个包含100万人,每人约有50个朋友的社交网络,我们就以典型的开源图数据库Neo4j参与测试,结果明显表明,图数据库是用于关联数据的最佳选择,如表所示:

上图为图数据库与关系型数据库执行时间对比

在深度为2时(即朋友的朋友),假设在一个在线系统中使用,无论关系型数据库还是图数据库,在执行时间方面都表现得足够好。虽然Neo4j的查询时间为关系数据库的2/3,但终端用户很难注意到两者间毫秒级的时间差异。当深度为3时(即朋友的朋友的朋友),很明显关系型数据库无法在合理的时间内实现查询:一个在线系统无法接受30s的查询时间。相比之下,Neo4j的响应时间则保持相对平坦:执行查询仅需要不到1s,这对在线系统来说足够快了。

在深度为4时,关系型数据库表现出很严重的延迟,使其无法应用于在线系统。Neo4j所花时间也有所增加,但其时延在在线系统的可接受范围内。最后,在深度为5时,关系型数据库所花时间过长以至于没有完成查询。相比之下,Neo4j则在2 s左右的时间就返回了结果。在深度为5时,事实证明几乎整个网络都是我们的朋友,因此在很多实际用例中,我们可能需要修剪结果,并进行时间控制。

虽然图数据库也能够处理“大数据”,但它毕竟不是Hadoop、HBase或Cassandra,通常不会在图数据库中直接处理海量数据(以PB为单位)的分析。但如果你乐于提供关于某个实体及其相邻数据的关系(比如可以提供一个Web页面或某个API返回其结果),那么它是一种良好的选择。无论是简单的CRUD访问,或是复杂的、深度嵌套的资源视图都能够胜任。

综上所述,虽然关系型数据库对于保存结构化数据来说依然是最佳的选择,但图数据库更适合于管理半结构化数据、非结构化数据以及图形数据。如果数据模型中包含大量的关联数据,并且希望使用一种直观、有趣并且快速的数据库进行开发,那么可以考虑尝试图数据库。

在实际的生产环境下,一个真正成熟、有效的分析环境是应该包括关系型数据库和图数据库的,根据不同的应用场景相互结合起来进行有效分析。

整体而言,图数据库还有很多问题未解决,许多技术还需发展,比如超级节点问题和分布式大图的存储。可以预见的是,随着互联网数据的膨胀,图数据库将迎来发展契机,基于图的各种计算和数据挖掘岗位也会越来越热。

Graph Database是一个很特殊的数据库类型,和RDBMS还有其他的NoSQL都不同。可以说,是最直观表达真实世界的一种数据库,可以使用的场景也非常明确。图数据库不是应用于海量数据库的分析,而是使用在Relationship的Traverse上。主要应用场景有:
1、推荐引擎
2、反欺诈、反洗钱
3、运维组件依赖管理
4、社交网络关系查询

图数据库也有很多实现方法。Neo4J属于Native Graph Database。除此之外,还有很多基于RDBMS和NoSQL数据库实现的Graph Engine。所以图数据库分为两个层面,一个是Graph Storage,一个是Graph Processing Engine。Graph Storage包括Native Storage,也包括基于PG、MongoDB、Cassandra等的Storage。

现在图数据库还没有形成一个标准,Neo4J在这个领域算是领军产品,但其他的产品也在层出不穷。从架构设计到访问语言都没有统一。

转载于:https://my.oschina.net/u/3298482/blog/903888

大数据时代的新型数据库-图数据库Neo4j介绍相关推荐

  1. 大数据时代的新型数据库 — 图数据库 Neo4j 的应用

    概览 微云数聚(北京)科技有限公司是一家实力雄厚的大数据技术公司,由移动互联网技术专家团队.大数据专业团队和建模博士团队组成.微云数聚专注于研究图数据库技术及其应用,是世界领先的图数据库Neo4j在中 ...

  2. 大数据时代第一部分思维导图_大数据时代总结思维导图模板分享

    现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物.数据涉及了方方面面,那主要介绍哪些呢?下面是分享的大数据时代思维导图模板 ...

  3. 大数据时代总结思维导图模板分享

    现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物.数据涉及了方方面面,那主要介绍哪些呢?下面是分享的大数据时代思维导图模板 ...

  4. 大数据时代如何建设动漫品牌

    麦咭.酸奶.中国娃娃.春节娃娃--这些听起来熟悉或陌生的名字,在8月28日举办的中国(天津)动漫品牌峰会上屡被提到,成为大数据时代下动漫品牌建设与发展的例证. 继一年前的首届中国动漫品牌峰会提出&qu ...

  5. 《腾云:云计算和大数据时代网络技术揭秘》.pdf

    关注"Java后端技术全栈" 回复"面试"获取全套面试资料 什么是大数据? 最有名的回答莫过于"5V特点": 1)Volume:数据量大,包 ...

  6. 武新博士:新型MPP数据库将支撑起大数据时代

    大数据这个领域过去5年发展很快.热度很高,但是总的来说目前还在起步阶段.本次研讨会我会先谈谈数据,以及大数据对数据处理技术的压力,然后为大家分享一下为什么这几年数据处理技术上的创新很多. 1. 数据价 ...

  7. 图数据库——大数据时代的高铁

    如果把传统关系型数据库比做火车的话,那么到现在大数据时代,图数据库可比做高铁.它已成为NoSQL中关注度最高,发展趋势最明显的数据库. 简介 在众多不同的数据模型里,关系数据模型自20世纪80年代就处 ...

  8. 图数据库――大数据时代的高铁

    如果把传统关系型数据库比做火车的话,那么到现在大数据时代,图数据库可比做高铁.它已成为 NoSQL 中关注度最高,发展趋势最明显的数据库. 简介 在众多不同的数据模型里,关系数据模型自20世纪80年代 ...

  9. 大数据时代数据库-云HBase架构生态实践

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 2018第九届中国数据库技术大会,阿里云高级技术专家.架构师封神(曹龙)带来题为大数据时代数据库-云HBase架构&a ...

最新文章

  1. 面试官:Mysql 中主库跑太快,从库追不上怎么整?
  2. 【centos7】添加开机启动服务/脚本
  3. arraylist 线程安全_数据结构之Array、ArrayList、List、LinkedList对比分析
  4. php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解
  5. C++模板的一些基础知识
  6. 工作流实战_16_flowable 办理任务
  7. python celery应用场景_python celery 模块
  8. android 串口通信丢包,新手求教为什么串口接收数据总丢包
  9. SAP License:SAP精细化的应收付及要素为根设计思想
  10. [转载] python set 集合详解
  11. GIL与线程进程小知识点
  12. redis数据类型:hashes
  13. 直接利用工具将prn文件打印到打印机的方法
  14. 已知三角形顶点坐标,求其外接圆的公式
  15. Unity场景打包AssetBundle并加载
  16. Q1净亏损同比扩大222% 四通一达业绩垫底百世还能逆袭吗?
  17. Nginx 安全漏洞
  18. win10装系统输入用户名就卡死
  19. KMP Seek the Name,Seek the Fame
  20. 参考文献格式详细解释和引用(常见)

热门文章

  1. sublime怎么真机同步到海马玩模拟器
  2. 阿里否认投资今日头条;小米为上市作人事调整;iPhone X销量大幅下滑丨价值早报...
  3. Form2(子窗体)调用Form1(父窗体)的控件
  4. Changhong/长虹IHO-3000_强刷卡刷刷机包(可救砖)
  5. python自动玩游戏_超牛!用Python自动玩转2048游戏
  6. java中play方法的两个参数_如何避免在play2中到处传递参数?
  7. pink老师前端入门视频教程笔记(中)
  8. jzoj 3813. 我要的幸福 (Standard IO)
  9. 从零学易语言编程系列教程
  10. sql线上线下数据库同步方式