Neo4j初探

Neo4j初探

 

· 简介

· 1适用场景 

1.1首先看一下是否能满足我们的需求

1.2几个真实的例子

1.3本质

· 2 Lisence

· 3下载&安装

· 4 Cypher 

4.1操作符

· 5 Neo4j操作 

5.1 IDE环境集成了十分友好的数据库操作命令行,并且有示例,有cypher语言语法说明等等

5.2在应用程序中和数据库进行交互

· 50 To be continue..

 

简介

Neo4j version 2.0 was released in December, 2013.

最新版版本号2.0,13年12月发布。

Neo4j was developed by Neo Technology, Inc., based in the San Francisco Bay Area, US and Malmö, Sweden.

Neo4j由Neo科技有限公司开发,公司地址分布在旧金山海湾区和瑞典的马莫(?)。 

Neo Technology board of directors consists of Rod Johnson, (founder of the Spring Framework), Magnus Christerson (Vice President of Intentional Software Corp), Nikolaj Nyholm (CEO of Polar Rose), Sami Ahvenniemi (Partner at Conor Venture Partners) and Johan Svensson (CTO of Neo Technology).

公司领导,等等等等一堆人,这些不重要。

1 适用场景

1.1 首先看一下是否能满足我们的需求

1.1.1 毫秒级的性能(以前是分钟)

1.1.2 大大加快开发周期

1.1.3 超强的业务响应能力

1.1.4 能够在企业级和生产环境使用

1.2 几个真实的例子

1.2.1 社交。用于计算用户之间的社会关系映射

1.2.2 建议。根据浏览记录投放广告这种

1.2.3 地理。地图上的路线是否连通,区域之间的交叉查询,数学上的“七桥问题”,物流,旅行,电话电缆布线,都可以用图形数据库来求解

1.2.4 Master数据管理。Mater数据是交易数据之外的经营企业的关键数据。主数据管理旨在简化数据共享,并通过将软件与数据管理技术相结合为企业中的每个人提供一个单一一致的关键数据。IBM有专业专门的MDM

1.3 本质

求解某些能够用平面几何建模的问题

2 Lisence

各种版本描述与比较:

                


开源版免费。企业版需要联系销售购买。开源版本少的功能包括:缓存、集群、在线备份、高级监控、Linux认证、紧急补丁、商业邮件支持、商业电话支持、支持时间(前面3个都是形容的找人解决问题那种)、证书(开源版啥都没有)。

本文选用个人版作为研究的材料。

个人版需要先注册。

3 下载&安装

在官网上下载neo4j-community_windows_2_0_1.exe,选择一个保存数据库的目录,完成安装。

安装后在浏览器输入http://localhost:7474/browser/,访问db。Neo4j相当于一个REPL + 轻量化IDE + 图形虚拟的一个混合。在浏览器里可以进行数据库操作,同时可以看到数据库关系的图形化展示。安装后的Neo4j里面自带一个movie的例子,可以作为示例进行学习。

4 Cypher

“Cypher”是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。Cypher还在继续发展和成熟,这也就意味着有可能会出现语法的变化。同时也意味着作为组件没有经历严格的性能测试。Cypher设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员(我认为这个很重要)。它的构念是基于英语单词和灵巧的图解。

4.1 操作符

 

Cypher的操作符有三类:数学、等式和关系

 

数学操作符:+,-,*,/和%。其中只有+能作用在字符串和集合上

 

等式操作符:=,<>,<,>,<=,>= 

 

因为Neo4j是一种模式自由的图数据库,Cypher还有2个特殊的操作符?和!

 

他们是被用在属性上面处理缺省值,在一个不存在的属性上进行比较,一般会报错。一般在对属性值做比较前需要先判断这个属性是否存在,而在使用?的情况下,如果属性缺失,比较总是返回true,相反,使用!,比较总是返回false

 

例如:

 

WHERE n.prop? = "foo"

 

此断言类似oracle的语法实现为:WHERE n.prop is null or n.prop = "foo"

 

它在属性n.prop缺失下返回true

 

WHERE n.prop! = "foo"

 

此断言类似oracle的语法实现为:WHERE n.prop is not null and n.prop = "foo"

 

它在属性n.prop缺失下返回false

4.2 

 关键字:

Cypher通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL。正则表达式匹配实现实用Scala programming language语言。

5 Neo4j操作

5.1 IDE环境集成了十分友好的数据库操作命令行,并且有示例,有cypher语言语法说明等等

5.2 在应用程序中和数据库进行交互

下图是成功创建一个图形的操作过程:

方法全部都是使用POST,URL填数据库的地址,Body填入类似如下的内容:

 展开源码 

{"statements":[{"statement":"CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})\nCREATE (Keanu:Person {name:'Keanu Reeves', born:1964})\nCREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})\nCREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})\nCREATE (Hugo:Person {name:'Hugo Weaving', born:1960})\nCREATE (AndyW:Person {name:'Andy Wachowski', born:1967})\nCREATE (LanaW:Person {name:'Lana Wachowski', born:1965})\nCREATE (JoelS:Person {name:'Joel Silver', born:1952})\nCREATE\n (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),\n (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),\n (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),\n (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),\n (AndyW)-[:DIRECTED]->(TheMatrix),\n (LanaW)-[:DIRECTED]->(TheMatrix),\n (JoelS)-[:PRODUCED]->(TheMatrix)\n \nCREATE (Emil:Person {name:\"Emil Eifrem\", born:1978})\nCREATE (Emil)-[:ACTED_IN {roles:[\"Emil\"]}]->(TheMatrix)\n\nCREATE (TheMatrixReloaded:Movie {title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})\nCREATE\n (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixReloaded),\n (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrixReloaded),\n (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrixReloaded),\n (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrixReloaded),\n (AndyW)-[:DIRECTED]->(TheMatrixReloaded),\n (LanaW)-[:DIRECTED]->(TheMatrixReloaded),\n (JoelS)-[:PRODUCED]->(TheMatrixReloaded)\n \nCREATE (TheMatrixRevolutions:Movie {title:'The Matrix Revolutions', released:2003, tagline:'Everything that has a beginning has an end'})\nCREATE\n (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixRevolutions),\n (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrixRevolutions),\n (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrixRevolutions),\n (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrixRevolutions),\n (AndyW)-[:DIRECTED]->(TheMatrixRevolutions),\n (LanaW)-[:DIRECTED]->(TheMatrixRevolutions),\n (JoelS)-[:PRODUCED]->(TheMatrixRevolutions)\n \nCREATE (TheDevilsAdvocate:Movie {title:\"The Devil's Advocate\", released:1997, tagline:'Evil has its winning ways'})\nCREATE (Charlize:Person {name:'Charlize Theron', born:1975})\nCREATE (Al:Person {name:'Al Pacino', born:1940})\nCREATE (Taylor:Person {name:'Taylor Hackford', born:1944})\nCREATE\n (Keanu)-[:ACTED_IN {roles:['Kevin Lomax']}]->(TheDevilsAdvocate),\n (Charlize)-[:ACTED_IN {roles:['Mary Ann Lomax']}]->(TheDevilsAdvocate),\n (Al)-[:ACTED_IN {roles:['John Milton']}]->(TheDevilsAdvocate),\n (Taylor)-[:DIRECTED]->(TheDevilsAdvocate)\n \nCREATE (AFewGoodMen:Movie {title:\"A Few Good Men\", released:1992, tagline:\"In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.\"})\nCREATE (TomC:Person {name:'Tom Cruise', born:1962})\nCREATE (JackN:Person {name:'Jack Nicholson', born:1937})\nCREATE (DemiM:Person {name:'Demi Moore', born:1962})\nCREATE (KevinB:Person {name:'Kevin Bacon', born:1958})\nCREATE (KieferS:Person {name:'Kiefer Sutherland', born:1966})\nCREATE (NoahW:Person {name:'Noah Wyle', born:1971})\nCREATE (CubaG:Person {name:'Cuba Gooding Jr.', born:1968})\nCREATE (KevinP:Person {name:'Kevin Pollak', born:1957})\nCREATE (JTW:Person {name:'J.T. Walsh', born:1943})\nCREATE (JamesM:Person {name:'James Marshall', born:1967})\nCREATE (ChristopherG:Person {name:'Christopher Guest', born:1948})\nCREATE (RobR:Person {name:'Rob Reiner', born:1947})\nCREATE (AaronS:Person {name:'Aaron Sorkin', born:1961})\nCREATE\n (TomC)-[:ACTED_IN {roles:['Lt. Daniel Kaffee']}]->(AFewGoodMen),\n (JackN)-[:ACTED_IN {roles:['Col. Nathan R. Jessup']}]->(AFewGoodMen),\n (DemiM)-[:ACTED_IN {roles:['Lt. Cdr. JoAnne Galloway']}]->(AFewGoodMen),\n (KevinB)-[:ACTED_IN {roles:['Capt. Jack Ross']}]->(AFewGoodMen),\n (KieferS)-[:ACTED_IN {roles:['Lt. Jonathan Kendrick']}]->(AFewGoodMen),\n (NoahW)-[:ACTED_IN {roles:['Cpl. Jeffrey Barnes']}]->(AFewGoodMen),\n (CubaG)-[:ACTED_IN {roles:['Cpl. Carl Hammaker']}]->(AFewGoodMen),\n (KevinP)-[:ACTED_IN {roles:['Lt. Sam Weinberg']}]->(AFewGoodMen),\n (JTW)-[:ACTED_IN {roles:['Lt. Col. Matthew Andrew Markinson']}]->(AFewGoodMen),\n (JamesM)-[:ACTED_IN {roles:['Pfc. Louden Downey']}]->(AFewGoodMen),\n (ChristopherG)-[:ACTED_IN {roles:['Dr. Stone']}]->(AFewGoodMen),\n (AaronS)-[:ACTED_IN {roles:['Man in Bar']}]->(AFewGoodMen),\n (RobR)-[:DIRECTED]->(AFewGoodMen),\n (AaronS)-[:WROTE]->(AFewGoodMen)\n \nCREATE (TopGun:Movie {title:\"Top Gun\", released:1986, tagline:'I feel the need, the need for speed.'})\nCREATE (KellyM:Person {name:'Kelly McGillis', born:1957})\nCREATE (ValK:Person {name:'Val Kilmer', born:1959})\nCREATE (AnthonyE:Person {name:'Anthony Edwards', born:1962})\nCREATE (TomS:Person {name:'Tom Skerritt', born:1933})\nCREATE (MegR:Person {name:'Meg Ryan', born:1961})\nCREATE (TonyS:Person {name:'Tony Scott', born:1944})\nCREATE (JimC:Person {name:'Jim Cash', born:1941})\nCREATE\n (TomC)-[:ACTED_IN {roles:[ ... Firebug request size limit has been reached by Firebug. ... })\nCREATE\n (BillPax)-[:ACTED_IN {roles:['Bill Harding']}]->(Twister),\n (HelenH)-[:ACTED_IN {roles:['Dr. Jo Harding']}]->(Twister),\n (ZachG)-[:ACTED_IN {roles:['Eddie']}]->(Twister),\n (PhilipH)-[:ACTED_IN {roles:['Dustin \"Dusty\" Davis']}]->(Twister),\n (JanB)-[:DIRECTED]->(Twister)\n \nCREATE (CastAway:Movie {title:'Cast Away', released:2000, tagline:'At the edge of the world, his journey begins.'})\nCREATE (RobertZ:Person {name:'Robert Zemeckis', born:1951})\nCREATE\n (TomH)-[:ACTED_IN {roles:['Chuck Noland']}]->(CastAway),\n (HelenH)-[:ACTED_IN {roles:['Kelly Frears']}]->(CastAway),\n (RobertZ)-[:DIRECTED]->(CastAway)\n \nCREATE (OneFlewOvertheCuckoosNest:Movie {title:\"One Flew Over the Cuckoo's Nest\", released:1975, tagline:\"If he's crazy, what does that make you?\"})\nCREATE (MilosF:Person {name:'Milos Forman', born:1932})\nCREATE\n (JackN)-[:ACTED_IN {roles:['Randle McMurphy']}]->(OneFlewOvertheCuckoosNest),\n (DannyD)-[:ACTED_IN {roles:['Martini']}]->(OneFlewOvertheCuckoosNest),\n (MilosF)-[:DIRECTED]->(OneFlewOvertheCuckoosNest)\n \nCREATE (SomethingsGottaGive:Movie {title:\"Something's Gotta Give\", released:1975})\nCREATE (DianeK:Person {name:'Diane Keaton', born:1946})\nCREATE (NancyM:Person {name:'Nancy Meyers', born:1949})\nCREATE\n (JackN)-[:ACTED_IN {roles:['Harry Sanborn']}]->(SomethingsGottaGive),\n (DianeK)-[:ACTED_IN {roles:['Erica Barry']}]->(SomethingsGottaGive),\n (Keanu)-[:ACTED_IN {roles:['Julian Mercer']}]->(SomethingsGottaGive),\n (NancyM)-[:DIRECTED]->(SomethingsGottaGive),\n (NancyM)-[:PRODUCED]->(SomethingsGottaGive),\n (NancyM)-[:WROTE]->(SomethingsGottaGive)\n \nCREATE (BicentennialMan:Movie {title:'Bicentennial Man', released:1999, tagline:\"One robot's 200 year journey to become an ordinary man.\"})\nCREATE (ChrisC:Person {name:'Chris Columbus', born:1958})\nCREATE\n (Robin)-[:ACTED_IN {roles:['Andrew Marin']}]->(BicentennialMan),\n (OliverP)-[:ACTED_IN {roles:['Rupert Burns']}]->(BicentennialMan),\n (ChrisC)-[:DIRECTED]->(BicentennialMan)\n \nCREATE (CharlieWilsonsWar:Movie {title:\"Charlie Wilson's War\", released:2007, tagline:\"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire.\"})\nCREATE (JuliaR:Person {name:'Julia Roberts', born:1967})\nCREATE\n (TomH)-[:ACTED_IN {roles:['Rep. Charlie Wilson']}]->(CharlieWilsonsWar),\n (JuliaR)-[:ACTED_IN {roles:['Joanne Herring']}]->(CharlieWilsonsWar),\n (PhilipH)-[:ACTED_IN {roles:['Gust Avrakotos']}]->(CharlieWilsonsWar),\n (MikeN)-[:DIRECTED]->(CharlieWilsonsWar)\n \nCREATE (ThePolarExpress:Movie {title:'The Polar Express', released:2004, tagline:'This Holiday Season... Believe'})\nCREATE\n (TomH)-[:ACTED_IN {roles:['Hero Boy', 'Father', 'Conductor', 'Hobo', 'Scrooge', 'Santa Claus']}]->(ThePolarExpress),\n (RobertZ)-[:DIRECTED]->(ThePolarExpress)\n \nCREATE (ALeagueofTheirOwn:Movie {title:'A League of Their Own', released:1992, tagline:'Once in a lifetime you get a chance to do something different.'})\nCREATE (Madonna:Person {name:'Madonna', born:1954})\nCREATE (GeenaD:Person {name:'Geena Davis', born:1956})\nCREATE (LoriP:Person {name:'Lori Petty', born:1963})\nCREATE (PennyM:Person {name:'Penny Marshall', born:1943})\nCREATE\n (TomH)-[:ACTED_IN {roles:['Jimmy Dugan']}]->(ALeagueofTheirOwn),\n (GeenaD)-[:ACTED_IN {roles:['Dottie Hinson']}]->(ALeagueofTheirOwn),\n (LoriP)-[:ACTED_IN {roles:['Kit Keller']}]->(ALeagueofTheirOwn),\n (RosieO)-[:ACTED_IN {roles:['Doris Murphy']}]->(ALeagueofTheirOwn),\n (Madonna)-[:ACTED_IN {roles:['\"All the Way\" Mae Mordabito']}]->(ALeagueofTheirOwn),\n (BillPax)-[:ACTED_IN {roles:['Bob Hinson']}]->(ALeagueofTheirOwn),\n (PennyM)-[:DIRECTED]->(ALeagueofTheirOwn)\n \nCREATE (PaulBlythe:Person {name:'Paul Blythe'})\nCREATE (AngelaScope:Person {name:'Angela Scope'})\nCREATE (JessicaThompson:Person {name:'Jessica Thompson'})\nCREATE (JamesThompson:Person {name:'James Thompson'})\n\nCREATE\n (JamesThompson)-[:FOLLOWS]->(JessicaThompson),\n (AngelaScope)-[:FOLLOWS]->(JessicaThompson),\n (PaulBlythe)-[:FOLLOWS]->(AngelaScope)\n \nCREATE\n (JessicaThompson)-[:REVIEWED {summary:'An amazing journey', rating:95}]->(CloudAtlas),\n (JessicaThompson)-[:REVIEWED {summary:'Silly, but fun', rating:65}]->(TheReplacements),\n (JamesThompson)-[:REVIEWED {summary:'The coolest football movie ever', rating:100}]->(TheReplacements),\n (AngelaScope)-[:REVIEWED {summary:'Pretty funny at times', rating:62}]->(TheReplacements),\n (JessicaThompson)-[:REVIEWED {summary:'Dark, but compelling', rating:85}]->(Unforgiven),\n (JessicaThompson)-[:REVIEWED {summary:\"Slapstick redeemed only by the Robin Williams and Gene Hackman's stellar performances\", rating:45}]->(TheBirdcage),\n (JessicaThompson)-[:REVIEWED {summary:'A solid romp', rating:68}]->(TheDaVinciCode),\n (JamesThompson)-[:REVIEWED {summary:'Fun, but a little far fetched', rating:65}]->(TheDaVinciCode),\n (JessicaThompson)-[:REVIEWED {summary:'You had me at Jerry', rating:92}]->(JerryMaguire)\n \nRETURN TheMatrix\n;","resultDataContents":["row","graph"],"includeStats":true}]}

上例建立一个TheMatrix:Movie为起点的图形,然后插入了若干图形,因为图形较多所以看上去命令也较多,事实上一个图形使用一句话即可。

更多REST API请看pdf的第19章,这里不再赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值