转:图数据库Neo4J的介绍

,图数据库Neo4J的介绍:
http://www.neo4j.org/learn/neo4j
Neo4J是个开源的图数据,很好用,轻便灵活,嵌入式,功能强大,而且相关资料比较齐全。
按照Neo4J官方网站公布,该数据库可以支持数十亿的节点数:
massively scalable, up to several billion nodes/relationships/properties
而且支持分布式部署,Master,Slave。
对Neo4J的性能和可用性的介绍:http://video.neo4j.org/player/6qUmb/native/autoplay/
Neo4J的CEO有个视频简单介绍Neo4J:http://player.vimeo.com/video/56040747

2,安装:
Neo4J的安装使用非常简单。下载一个稳定版本,解压,运行Neo4j.bat(windows版本) 即可。下载地址http://www.neo4j.org/download , 目前比较好用的稳定版本是1.9.1。
然后可以访问WEB管理界面,地址:http://localhost:7474/webadmin

3,Neo4J的使用方式包括:
1)可以写程序,添加,更新,用JAVA,Python,PHP, .NET等语言都可以实现。
2)可以用命令行,添加,更新,查看,Neo4J提供基于WEB的执行界面,提供类SQL语言执行,这些语言包括Cypher,Gremlin等。 
如下图:
 
3)可以基于Neo4J提供的WEB UI界面添加,更新节点和关系,如下:
 
4) 可以使用附加工具(ETL)导入数据。也可以从关系数据库中导入数据。
http://www.neo4j.org/develop/import

4,使用JAVA访问Neo4J:
学习材料:http://www.neo4j.org/develop/java
http://docs.neo4j.org/chunked/stable/tutorials-java-embedded.html
Neo4J中节点,边,都可以任意添加属性,边(关系)的可以自定义,是个枚举值,举例:
firstNode = graphDb.createNode();
firstNode.setProperty( "message", "Hello,  [Node A] ,  " );
secondNode = graphDb.createNode();
secondNode.setProperty( "message", " The Graph DB World! [Node B]  " );
relationship = firstNode.createRelationshipTo( secondNode, RelTypes.KNOWS );
relationship.setProperty( "Reason", "Use Neo4j for testing [Edge] ,  " );

还有一点很重要,Neo4J可以支持自定义节点类,就是说你可以按照你的需要设计Class做节点,也就是说你可以给每个节点增加任意方法,实现任意功能,这个功能的扩展性非常强。
而且Neo4J提供嵌入式程序的能力,你可以把它当做一个Lib来使用,可以在保留其他应用开放方式的情况下,提供图数据库的强大能力。
其例子socnet可以在Neo4J的网站上查找。

5,Cypher介绍:
Cypher是Neo4J自己提供的一种高效类SQL语言,用于图数据和关系查询。关系查询采用一种模式匹配的方式,比较直观。
很好的学习材料:http://www.neo4j.org/learn/cypher
这个Video讲的很清楚:http://player.vimeo.com/video/50389825

创建节点:(每个Node,系统会自动建立一个唯一的id,不可修改。下面的ID是Node的属性。)
create n={name:‘Motion‘,ID:‘M001‘} return n;
创建关系:
start n=node(14),m=node(20) create m-[r:KNOWS]-n return r;

查询:
按id查询(这里的id是系统自动创建的):
start n=node(20) return m;

查询所有节点:
start n=node(*) return n;
查询属性,关系:
start n=node(9) return n,n.name,n.ID,n.level; //查看指定节点,返回需要的属性

start n=node(*) match (n)-[r:SubClassOf]->m return m,n,n.name,n.ID,r; //查找指定关系

按关系查询多个节点:
start a = node(14) match b-[r]<->a return r,b;

start a = node(0) match c-[:KNOWS]->b-[:KNOWS]->a return a,b,c; //查找两层KNOWS关系的节点

start a = node(21) match b-[*]->a return a,b;  //查找所有与a节点有关系的节点

使用Where条件进行查询:(不用建立Index也可以使用)
start n=node(*) where n.name="Activity" return n;
并且可以使用特定符号:
start n=node(*) where n.ID?="A*" return n; 
start n=node(*) where HAS(n.type) return n,n.name,n.ID,n.type; //如果存在属性type,并且以A开头,就输出节点。

配置文件自动建立索引:
修改conf目录下的neo4j.properties文件内容如下,重启Neo4J,对重启后新建的Node生效。
# Enable auto-indexing for nodes, default is false
node_auto_indexing=true

# The node property keys to be auto-indexed, if enabled
node_keys_indexable=name,ID
# Enable auto-indexing for relationships, default is false
relationship_auto_indexing=true

# The relationship property keys to be auto-indexed, if enabled
relationship_keys_indexable=KNOWS,SubClassOf

建立索引后可以用node_auto_index按属性值查询:
start n=node:node_auto_index(name="C") return n,n.name;

修改属性值:
start a = node(*) where a.name="a" set a.name="A" return a,a.name ;
start n=node(0) set n.name="Root",n.ID="001" ; //给默认的根节点添加name,ID属性,便于查询。

删除:
删除所有节点和关系:
START n=node(*) 
match n-[r]-()
delete n,r;

6,图形化显示数据:
Neo4J自身提供WEB界面的图数据图形化展现工具,很Cool。这个Video讲的具体:https://player.vimeo.com/video/58016492

在WEB管理http://localhost:7474/webadmin的“Data Browser”图形化显示区点 Style,NewProfile,编辑自己的Profile,注意Add filter的 Nodes要放在前面,不然不生效,Rules是顺序执行 的,显示多个属性可以用;号做换行符。

看我做的一个User Model Ontology 关系模型:

User Model 与数据源的Ontology关系,左边圆圈是UserModel,右边方框是数据源:

在Data Browser上直接输入节点编号,如10,点图形化显示,就可以图形化看到该节点和有关系的节点,点每个节点,就可以逐步显示所有节点和关系,非常方便:

7,备份Neo4j的数据:
1)停掉数据库.
2)备份D:\Neo4J\neo4j-enterprise-1.9.1\data目录下graph.db目录中的所有内容.
3)在服务器上拷贝graph.db目录中的内容到新的服务器的相同目录中,启动即可.

8,为什么使用图数据库?
这个问题,欢迎你跟我交流。图数据库的扩展性,灵活性非常好,适合用于复杂关系管理和关系查询推理,社交关系应用就是一个可选的应用场景。 而我选择图数 据库,起因是研究语义网和Ontology的应用,语义网和Ontology的数据结构(三元组)就是图结构数据,而基于RDF构建的语义网,过于复杂, 效率很低,实际上不如基于图数据库的构建方便好用,而且Neo4J支持RDF,SPARQL等扩展。另外,我认为OWL,实用价值不大,OWL几乎就是用 XML来描述一种面向对象的编程语言,而这种编程语言如果表示能力过强(OWL Full),根本无法实现,如果表示能力过弱(OWL Lite),其实 没有多少实用意义。而且,我觉得Tim Berners-Lee的语义网,即基于RDF的语义WEB,用RDF描述语义的这种思路走向了以前基于规则的 NLP的思路,虽然加上Human Computation 众包的模式,但还是很难走通。我更关注的是本体关系,知识库的构建,而且知识本体主要是 Meta Data,不需要很多数据,尽量不要保存instance data,获取instance data可以关联其他数据库的数据源进行查询(这 种数据Key-Value或Table保存即可)。
简单的关系推理,属性传递,其实就是查询,Neo4J中Cypher也可以完成。所以,我倾向于用图数据库来构建知识库 knowledge base ("KB"),或knowledge graph ("KG")。知识库对于知识关联查询进行相关搜索或关联推荐,比较有 价值。而且,从知识本体关系库中可以推理得到规则, 比 如,If Place is Meeting Room and Date is Workday and Than Activity is Meeting.  这 样的规则是可以从本体关系中查询得到的,规则可以在很大程度上弥补基于统计的计算学习的许多不足。 更大的作用,我觉得图数据库是一种 “合理的知识保存 和描述的方式”,有利于知识的持续积累和不断演进。另外,在未来,知识本体,与模型算法建立关系,如果能在合适的关系条件下,使用正确的算法模型,那将发 挥真正的巨大作用,那就离”智能“很近了。

带图片的全文,参看这里 http://blog.csdn.net/ub1010/article/details/9263325

时间: 2024-10-06 01:43:33

转:图数据库Neo4J的介绍的相关文章

neo4j 图数据库安装及介绍

neo4j 图数据库安装及介绍 一.neo4j图数据库介绍 图数据库,顾名思义就是利用了"图的数据结构来作为数据存储逻辑体现的一种数据库",所以要想学好图数据库当然需要了解一些关于图数据结构的算法!同样的作为图数据结构中很多常用的算法在图数据库中是默认提供支持的,对数据进行查询.计算的操作,比如常见的最短路径算法.pagerank算法等等这些算法,都是图数据结构中常见的算法!当然了neo4j作为一个图数据库当然也会提供这些算法的实现,方便使用者对数据进行操作! 那么图数据结构具体又包含

Hello World 之Spring Boot 调用图数据库Neo4j

明日歌 [清]钱鹤滩 明日复明日,明日何其多! 我生待明日,万事成蹉跎 1. 图数据库Neo4j之爱的初体验 ----与君初相识,犹似故人归 在如今大数据(big data)横行的时代,传统的关系型数据库如oracle,mysql在大数据量,高并发的场景下显得力不从心.于是乎,NoSQL横空出世,如column-based的cassandra数据库,document-based的MongoDB,还有今天介绍的小众的graph-based的图数据数据库Neo4j. 图数据库名字的由来其实与其在底层

开源软件:NoSql数据库 - 图数据库 Neo4j

转载自原文地址:http://www.cnblogs.com/loveis715/p/5277051.html 最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有意思的.因此在这里给大家做一个简单的介绍. NoSQL数据库相信大家都听说过.它们常常可以用来处理传统的关系型数据库所难以解决的一系列问题.通常情况下,这些NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种.这四种类型的数据库分别使用

图数据库Neo4j在GIS系统的应用

1. 概述 1.1. 图数据库简介 图数据库(Graph Database)是基于图论实现的一种新型的NoSQL数据库.他的数据存储结构和数据的查询方式都是以图论为基础的,图论中图的基本元素为节点和边,在图数据库中对应的就是节点和关系. 在图数据库中,数据与数据之间的关系通过节点和关系构成一个图结构并且在此结构上实现数据库的所有特性,如对图数据对象进行创建.读取.更新.删除(Create.Read.Update.Delete,简称CRUD)等操作的能力,还有处理事务的能力和高可用性等. 1.2.

主流图数据库Neo4J、ArangoDB、OrientDB综合对比:架构分析

1: 本地存储方式 2: 内置查询语言分析 3: 性能分析 4: 图算法支持 本地存储方式 Neo4J neo4j数据库支持最大多少个节点?最大支持多少条边? 目前累积统计它有34.4亿个节点,344亿的关系,和6870亿条属性. 在数据库中,读/写性能跟节点/边的数量有关吗? 这个问题意味着两个不同的问题.单次读/写操作不依赖数据库的大小.不管数据库是有10个节点还是有1千万个都一样. - 然而,有一个事实是如果数据库太大,你的内存可能无法完全缓存住它,因此,你需要频繁的读写磁盘.虽然很多用户

图数据库-Neo4j使用

Cypher 查询语言简单使用 3.1.基本语法 Node语法: Cypher使用一对圆括号来表示一个节点:提供了多种格式如下: () 匿名节点 (matrix)  为节点添加一个ID (:Movie) Movie label标签,声明的是节点类型.noe4j的索引使用label,每个索引由标签和属性组成 (matrix:Movie) (matrix:Movie {title: "The Matrix"}) 节点属性(如:title)代表一个key\value 的List (matri

Neo4j:图数据库GraphDB(二)

接着上一篇,继续介绍图数据库Neo4j: http://www.cnblogs.com/rongyux/p/5537028.html 三 高级查找操作 1过滤   name = "Tom Hanks"的人 MATCH (n:Person) WHERE n.name = "Tom Hanks" RETURN n; 另一种写法: MATCH (n:Person {name:"Tom Hanks"}) RETURN n; 2 排序Order, 限制Li

越来越火的图数据库究竟是什么?

随着社交.电商.金融.零售.物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算.大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,亟需一种支持海量复杂数据关系运算的数据库,图数据库应运而生. 世界上很多著名的公司都在使用图数据库.比如: 社交领域:Facebook, Twitter,Linkedin用它来管理社交关系,实现好友推荐 零售领域:eBay,沃尔玛使用它实现商品实时推荐,给买家更好的购物体验 金融领域:摩根大通,花旗和瑞银等银行在用图数据

Neo4j图数据库介绍

图数据库在图中存储数据,图是最通用的数据结构.图中可以存储节点和关系,节点和关系都可以保存属性.这种存储图的数据模型被称为属性图. 图数据库中的基本元素 节点往往用来表示实体,节点可以被多个标签进行标记.最简单的一个属性图是只有一个节点的图,这个节点可以有多个键值对标记的属性.关系通过连接节点来组织节点,一个联系有两个节点,开始节点和结束节点.这一点说明关系是有方向的.利用关系可以将节点组织成链表,树,图等数据结构.标签用来赋予节点角色和类型.一个节点可以有多个标签. 图数据中的高级属性 一个遍