ios 挑战赛 和 电脑端lol排位挑战赛一样吗

Neo4j&的一些使用心得
由对图数据的处理需求,看到了图数据库(GraphDataBase)这种比较新的数据库模式,并且通过比较发现用的相对多的要属Neo4j了,现在来看网上对Neo4j的介绍还比较少,内容主要来源于三个地方:官方网站&;中文社区&和Neo4j
google网上论坛。而中文社区的内容基本上是对官网内容的翻译,可以中英文对照着看,以加快理解。
&在各种官方资料中都说Neo4j的性能优良,可以支持几十亿个节点和上百亿的关系,于是怀着兴奋和期望开始了对它的研究。
Neo4j有两种运行模式,即程序嵌入式模式和服务器模式。对于项目的长期使用来说显然是服务器模式更加适合。所以在对嵌入式模式进行了简单的了解之后就开始对其服务器模式进行研究。对于官网中已经介绍的内容本文就不再赘述了,而目前能搜索到的资料基本上也是这些内容的重复,本文中讲一些我使用过程中遇到的问题和经验。
首先当然是去官网上下载安装包。我选择的是neo4j-enterprise-1.8.M07-windows版本,按照官网的教程逐步进行安装,启动。这个时候遇到了第一个问题,就是neo4j.bat
install执行之后,服务可以安装上去,但是无论如何都无法启动。提示:失败 1053
服务没有及时响应启动或控制请求
在网上翻看了很多资料,基本上都是修改服务的超时时间,但是此时对这个问题无效。最后在google论坛上看到相似内容,可能是电脑安装的Java
jdk版本问题,于是把jdk 1.7 换回到jdk
1.6,再启动果然问题解决了。所以如果要使用Neo4j的服务器模式运行,最好还是首先确定自己电脑安装的是jdk
服务运行起来之后就是研究它的功能和用法了。我用的是Java,所以一切内容都是以Java为语言基础的。服务器模式提供了REST
API,但是由于水平有限,要自己通过Java使用这些API实在是不容易。于是寻找针对REST API的封装工具。这里介绍了如何在Java中使用REST
API,其中用到了Jersey,但是在网页上所给的例子中我发现了一个问题,在查询某个点的时候,他的参数用到了之前创建点的时候的临时变量URI
firstNode,这就意味着如果所有点已经创建完毕,而我想通过某个点的属性查询到它的话就没有办法了。遗憾的是Java使用REST
API这部分只有这一页的例子,其他地方也没有搜索到相关资料。这种方法只能先告一段落。
还有另外一种方法是通过Java-REST-Binding&它集成了REST
API 可以通过Java远程连接Neo4j服务器GraphDatavaseService gds=new
RestGraphDatabase("http://10.108.xxx.xx:7474/db/data");同时还支持Neo4j-core-API,这样就可以像使用嵌入式模式那样的代码形式对数据库进行响应操作,而且嵌入式模式下的代码实例相对较多。这样就可以很方便的进行创建节点,添加属性和关系,查询,创建索引等操作。
与MongoDB的可视化操作工具MongoVUE相似的是,针对Neo4j也有一个工具-neoclipse。cfeibiao的博客有对它的基本介绍。
如果你的数据库已经对应点的属性建立了索引,则可以通过某个点的属性值对其进行查询,比如“name”属性的“张三”。另外还支持cyper语言查询。
另外一种检测工具就是web控制台,可以通过http://ip地址:7474/webadmin访问。
最终,一个致命的问题就是速度问题。从现有的MongoDB中把数据转存到Neo4j中,包括查重、设置属性、关系、建立索引等操作,完成一个点需要将近1秒的时间,这是无法忍受的速度。。。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识。今天接着上篇文章来看下neo4j的cpyher查询的一些基本概念和语法。
一,Node语法
在cypher里面通过用一对小括号()表示一个节点,它在cypher里面查询形式如下:
1,() 代表匹配任意一个节点
2, (node1) 代表匹配任意一个节点,并给它起了一个别名
3, (:Lable) 代表查询一个类型的数据
4, (person:Lable) 代表查询一个类型的数据,并给它起了一个别名
5, (person:Lable {name:"小王"}) 查询某个类型下,节点属性满足某个值的数据
6, (person:Lable {name:"小王",age:23}) 节点的属性可以同时存在多个,是一个AND的关系
二,关系语法
关系用一对-组成,关系分有方向的进和出,如果是无方向就是进和出都查询
1,--& 指向一个节点
2,-[role]-& 给关系加个别名
3,-[:acted_in]-& 访问某一类关系
4,-[role:acted_in]-& 访问某一类关系,并加了别名
5,-[role:acted_in {roles:["neo","hadoop"]}]-&
访问某一类关系下的某个属性的关系的数据
三,模式语法
模式语法是节点和关系查询语法的结合,通过模式语法我们可以进行我们想要的任意复杂的查询
四, 模式变量
为了增加模块化和减少重复,cypher允许把模式的结果指定在一个变量或者别名中,方便后续使用或操作
path = (: Person)-[:ACTED_IN]-&(:Movie)
path是结果集的抽象封装,有多个函数可以直接从path里面提取数据如:
nodes(path):提取所有的节点
rels(path): 提取所有的关系 和relationships(path)相等
length(path): 获取路径长度
cypher语句也是由多个关键词组成,像SQL的
select name, count(*) from talbe where age=24 group by name having count(*) &2
order by count(*) desc
多个关键字组成的语法,cypher也非常类似,每个关键词会执行一个特定的task来处理数据
match: 查询的主要关键词
create: 类似sql里面的insert
filter,project,sort,page等都有对应的功能语句
通过组合上面的一些语句,我们可以写出非常强大复杂的语法,来查询我们想要检索的内容,cypher会 自动解析语法并优化执行。
一些实际的用法例子:
执行成功,在neo4j的web页面我们能看到下面的信息
+-------------------+
当然cypher也可以一次创建多个数据,并同时添加关系
match (p: Person) 查询Person类型的所有数据
match (p: Person {name:"sun"}) 查询名字等于sun的人
match( p1: Person {name:"sun"} )-[rel:friend]-&(p2) return&&, p2.age 查询sun的朋友的名字和年龄
match (old) ... create (new) create (old)-[rel:dr]-&(new) return new 对已经存在的节点和新建的节点建立关系
3,查询或更新
merge 语法可以对已经存在的节点不做改变,对变化的部分会合并
MERGE (m:Movie { title:"Cloud Atlas" })
ON CREATE SET m.released = 2012
merge .... on create set ... return 语法支持合并更新
4,筛选过滤
cypher过滤也是用的和SQL一样的关键词where
match (p1: Person) where p1.name="sun" return p1;
等同下面的
match (p1: Person {name:"sun"}) return p1
注意where条件里面支持 and , or ,xor,not等boolean运算符,在json串里面都是and
除此之外,where里面查询还支持正则查询
match (p1: Person)-[r:friend]-&(p2: Person)
where p1.name=~"K.+" or p2.age=24 or "neo" in r.rels
return p1,r,p2
关系过滤匹配使用not
MATCH (p:Person)-[:ACTED_IN]-&(m)
WHERE NOT (p)-[:DIRECTED]-&()
RETURN p,m
5,结果集返回
MATCH (p:Person)
RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,"n/a") AS nickname, { name: p.name,
label:head(labels(p))} AS person
结果集返回做去重
match (n) return distinct n.
6,聚合函数
cypher支持count,sum,avg,min,max
match (: Person) return count(*)
聚合的时候null会被跳过 count 语法 支持 count( distinct role )
7,排序和分页
MATCH (a:Person)-[:ACTED_IN]-&(m:Movie)
RETURN a,count(*) AS appearances
ORDER BY appearances DESC SKIP 3 LIMIT 10;
8, 收集聚合结果
MATCH (m:Movie)&-[:ACTED_IN]-(
9, union 联合
支持两个查询结构集一样的结果合并
MATCH (actor:Person)-[r:ACTED_IN]-&(movie:Movie)
RETURN actor.name AS name, type(r) AS acted_in, movie.title AS title
UNION (ALL)
MATCH (director:Person)-[r:DIRECTED]-&(movie:Movie)
RETURN director.name AS name, type(r) AS acted_in, movie.title AS title
with语句给cypher提供了强大的pipeline能力,可以一个或者query的输出,或者下一个query的输入 和return语句非常类似,唯一不同的是,with的每一个结果,必须使用别名标识。
通过这个功能,我们可以轻而易举的做到在查询结果里面在继续嵌套查询。
MATCH (person:Person)-[:ACTED_IN]-&(m:Movie)
WITH person, count(*) AS appearances, collect(m.title) AS movies
WHERE appearances & 1
RETURN person.name, appearances, movies
注意在SQL里面,我们想过滤聚合结果,需要使用having语句但是在cypher里面我们可以配合with语句使用 where关键词来完成过滤
11,添加约束或者索引
唯一约束(使用merge来实现) CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE
添加索引(在图谱遍历时,快速找到开始节点),大幅提高查询遍历性能 CREATE INDEX ON :Actor(name)
添加测试数据:
使用索引查询:
阅读(...) 评论()由对图数据的处理需求,看到了图数据库(GraphDataBase)这种比较新的数据库模式,并且通过比较发现用的相对多的要属Neo4j了,现在来看网上对Neo4j的介绍还比较少,内容主要来源于三个地方:官方网站&;中文社区&和Neo4j
google网上论坛。而中文社区的内容基本上是对官网内容的翻译,可以中英文对照着看,以加快理解。
&&&&&&&在各种官方资料中都说Neo4j的性能优良,可以支持几十亿个节点和上百亿的关系,于是怀着兴奋和期望开始了对它的研究。
&&&&&&Neo4j有两种运行模式,即程序嵌入式模式和服务器模式。对于项目的长期使用来说显然是服务器模式更加适合。所以在对嵌入式模式进行了简单的了解之后就开始对其服务器模式进行研究。对于官网中已经介绍的内容本文就不再赘述了,而目前能搜索到的资料基本上也是这些内容的重复,本文中讲一些我使用过程中遇到的问题和经验。
&&&&&&首先当然是去官网上下载安装包。我选择的是neo4j-enterprise-1.8.M07-windows版本,按照官网的教程逐步进行安装,启动。这个时候遇到了第一个问题,就是neo4j.bat install执行之后,服务可以安装上去,但是无论如何都无法启动。提示:失败 1053 服务没有及时响应启动或控制请求&在网上翻看了很多资料,基本上都是修改服务的超时时间,但是此时对这个问题无效。最后在google论坛上看到相似内容,可能是电脑安装的Java
jdk版本问题,于是把jdk 1.7 换回到jdk 1.6,再启动果然问题解决了。所以如果要使用Neo4j的服务器模式运行,最好还是首先确定自己电脑安装的是jdk 1.6&
&&&&服务运行起来之后就是研究它的功能和用法了。我用的是Java,所以一切内容都是以Java为语言基础的。服务器模式提供了REST API,但是由于水平有限,要自己通过Java使用这些API实在是不容易。于是寻找针对REST API的封装工具。这里介绍了如何在Java中使用REST
API,其中用到了Jersey,但是在网页上所给的例子中我发现了一个问题,在查询某个点的时候,他的参数用到了之前创建点的时候的临时变量URI firstNode,这就意味着如果所有点已经创建完毕,而我想通过某个点的属性查询到它的话就没有办法了。遗憾的是Java使用REST API这部分只有这一页的例子,其他地方也没有搜索到相关资料。这种方法只能先告一段落。
&&&&还有另外一种方法是通过Java-REST-Binding&它集成了REST API 可以通过Java远程连接Neo4j服务器GraphDatavaseService
gds=new RestGraphDatabase(&http://10.108.xxx.xx:7474/db/data&);同时还支持Neo4j-core-API,这样就可以像使用嵌入式模式那样的代码形式对数据库进行响应操作,而且嵌入式模式下的代码实例相对较多。这样就可以很方便的进行创建节点,添加属性和关系,查询,创建索引等操作。
&&&&与MongoDB的可视化操作工具MongoVUE相似的是,针对Neo4j也有一个工具-neoclipse。cfeibiao的博客有对它的基本介绍。
&&&&如果你的数据库已经对应点的属性建立了索引,则可以通过某个点的属性值对其进行查询,比如“name”属性的“张三”。另外还支持cyper语言查询。
&&&&另外一种检测工具就是web控制台,可以通过http://ip地址:7474/webadmin访问。
&&&&最终,一个致命的问题就是速度问题。从现有的MongoDB中把数据转存到Neo4j中,包括查重、设置属性、关系、建立索引等操作,完成一个点需要将近1秒的时间,这是无法忍受的速度。。。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:37258次
排名:千里之外
原创:16篇
转载:167篇
(8)(18)(7)(15)(6)(12)(32)(4)(15)(15)(13)(1)(11)(29)Neo4j集群环境搭建
引言: Neo4j是目前主流的图,它本身也提供了高可用的集群解决方案,本文将尝试搭建高可用的neo4j环境。
1. 什么是图数据库?
  图形数据库(graphic database)是利用计算机将点、线、画霹图形基本元素按一定数据结同灶行存储的数据集合。
  图形数据库将地图与其它类型的平面图中的图形描述为点、线、面等基本元素,并将这些图形元素按一定数据结构(通常为拓扑数据结构)建立起来的数据集合。包括两个层次:第一层次为拓扑编码的数据集合,由描述点、线、面等图形元素间关系的数据文件组成,包括多边形文件、线段文件、结点文件等。文件间通过关联数据项相互联系;第二层次为坐标编码数据集合,由描述各图形元素空间位置的坐标文件组成。图形数据库是地理信息中对矢量结构地图数字化数据进行组织的主要形式。
2. Neo4j简介
Neo4j是目前主流的一个图数据库,相比传统的关系型数据库,它可以快速的进行基于人际社交网络类的查询查询和检索;它同时提供了cypher语言来方便进行图数据库的操作和查询,该查询语言类似SQL语言。
3. neo4j可高用环境搭建
系统环境: Ubuntu 14.04, JDK 1.7
3.1 下载neo4j enterprise版本
wget http://dist.neo4j.org/neo4j-enterprise-2.0.4-unix.tar.gz
3.2 解压缩neo4j企业版本
tar xvfz neo4j-enterprise-2.0.4-unix.tar.gz
mv neo4j-enterprise-2.0.4-unix neo4j
3.3 复制3个版本到/opt目录
sudo cp -fr neo4j /opt/neo4j1
sudo cp -fr neo4j /opt/neo4j1
sudo cp -fr neo4j /opt/neo4j1
3.4 修改neo4j1的配置信息
Neo4j.properties
neo4j-server.properties
3.5 修改neo4j2的配置文件,保证其与其他的不冲突
 neo4j.properties
neo4j-server.properties
3.6 修改neo4j3的配置信息,确保其与1,2的端口不冲突
 neo4j.properties
neo4j-server.properties
3.7 系统启动(基于neo4j1)
3.8 管理界面运行图 (http://ip:7474) 
 这里的高可用方案是利用多个节点之间的同步来实现所谓的高可用性,各个节点之间的数据完全一样。高可用方案只在其商用版本中可用。更多的信息,请访问其官网。更多公众号:woshigcs关注互联网,关注大数据,关注求职招聘和职业发展,关注攻城师生活的方方面面,除了技术和工作,我们还可以有更多的话题!最新文章相关作者文章搜狗:感谢您阅读图形数据库之Neo4j学习(一) 本文版权归原作者所有,本文由网友投递产生,如有侵权请联系 ,会第一时间为您处理删除。

我要回帖

更多关于 王者荣耀排位挑战赛 的文章

 

随机推荐