neo4j——图数据库初探 - JDream314的专栏 - 博客频道 - CSDN.NET
neo4j——圖數(shù)據(jù)庫(kù)初探 - JDream314的專欄 - 博客頻道 - CSDN.NET
圖數(shù)據(jù)庫(kù)neo4j初探(下載地址:http://neo4j.org/ )
本篇將初步介紹一下圖數(shù)據(jù)庫(kù)neo4j,將分一下幾點(diǎn)介紹:什么是neo4j、neo4j作用、neo4j用法簡(jiǎn)單介紹
1、什么是neo4j
?
neo4j是一種圖數(shù)據(jù)庫(kù),同時(shí)它也是一種嵌入式數(shù)據(jù)庫(kù)。它對(duì)圖數(shù)據(jù)是以節(jié)點(diǎn)和邊(關(guān)系)模式進(jìn)行存儲(chǔ)。每個(gè)節(jié)點(diǎn)可以包含一系列信息,通過Node類里面的setProperty()方法對(duì)節(jié)點(diǎn)信息進(jìn)行存儲(chǔ),Node也可以使用createRelationshipTo()方法實(shí)現(xiàn)個(gè)節(jié)點(diǎn)和其他節(jié)點(diǎn)的聯(lián)系,并且該方法返回的是一個(gè)Relationship對(duì)象,我們也可以對(duì)Relationship設(shè)置屬性,也就是節(jié)點(diǎn)和節(jié)點(diǎn)之間的關(guān)系屬性。什么叫關(guān)系屬性?例如:person1àperson2,person1和person2的關(guān)系可以是朋友也可以是同學(xué)還可以是親人,這里的朋友、同學(xué)、親人就是這里的Relationship的屬性。那么關(guān)系屬性就是描敘兩個(gè)節(jié)點(diǎn)之間的關(guān)系類型。這就方便在對(duì)節(jié)點(diǎn)進(jìn)行查找的時(shí)候?qū)?jié)點(diǎn)進(jìn)行過濾。如下圖:
2、neo4j作用
上面對(duì)neo4j進(jìn)行了簡(jiǎn)單的介紹,可知neo4j是一種對(duì)圖數(shù)據(jù)進(jìn)行存儲(chǔ),是一種嵌入式數(shù)據(jù)庫(kù)。它可以將復(fù)雜的圖數(shù)據(jù)以節(jié)點(diǎn)和邊形式存儲(chǔ)。例如:在我們現(xiàn)實(shí)社會(huì)中人與人之間的關(guān)系,這就是一個(gè)復(fù)雜的圖,朋友也可以是多種多樣的,怎樣描敘這樣復(fù)雜的圖呢?Neo4j提供了比較簡(jiǎn)單的描敘方式。如圖:
?
就上面的圖可以根據(jù)neo4j提供的方法獲取第一層朋友和第二層朋友:?? TraversalDescriptiontd = Traversal.description().breadthFirst().relationships(RelTypes.KNOWS, Direction.OUTGOING).filter(Traversal.returnAllButStartNode() );??? 上面的代碼所執(zhí)行的是:同個(gè)一個(gè)事務(wù)獲取一個(gè)事務(wù)描敘,然后根據(jù)這個(gè)事務(wù)描敘在一存儲(chǔ)的圖中過濾出我們想要的節(jié)點(diǎn),這個(gè)事務(wù)描敘第一個(gè)是進(jìn)行廣度優(yōu)先搜索(breadthFirst),接下類對(duì)節(jié)點(diǎn)關(guān)系進(jìn)行過濾。Direction是指定關(guān)系的方向,RelTypes就是關(guān)系的類型。這樣就可以獲得相應(yīng)的結(jié)果。
3、neo4j用法簡(jiǎn)單介紹
?
此處就neo4j的一個(gè)例子進(jìn)行講解(如圖):
?
上面圖是一個(gè)部門結(jié)構(gòu)圖,這個(gè)在我們現(xiàn)實(shí)生活中也是比較常見的。如:我們學(xué)校,它就是一個(gè)由各個(gè)部門構(gòu)成的。如何對(duì)這種圖進(jìn)行查找,以獲得我們想要的信息呢?
1)、獲得各個(gè)部門的名:
TraversalDescription td =Traversal.description().breadthFirst().relationships(RoleRels.ROOT, Direction.INCOMING).relationships(RoleRels.PART_OF, Direction.INCOMING).filter(Traversal.returnAllButStartNode());
2)、獲得所有的admin
TraversalDescription td =Traversal.description().breadthFirst().relationships(RoleRels.PART_OF, Direction.INCOMING).relationships(RoleRels.MEMBER_OF, Direction.INCOMING).filter(Traversal.returnAllButStartNode() );
?3)、更具個(gè)人信息獲得他所在的所有部門
? Node jale = getUserByName(?"Jale"?);
?TraversalDescription td = Traversal.description().depthFirst().relationships(RoleRels.MEMBER_OF, Direction.OUTGOING).relationships(RoleRels.PART_OF, Direction.OUTGOING).filter(Traversal.returnAllButStartNode() );
?附錄:
?neo4j還提供了兩種遍歷的方式:一種是深度搜索,第二種是廣度搜索。也提供了兩種搜索算法,一種是A*算法,第二種是dijkstra算法。提高了編程人員的工作效率。同時(shí)neo4j也有簡(jiǎn)歷索引的功能,方便了多節(jié)點(diǎn)的查找。
謝謝瀏覽!本篇到此 結(jié)束!總結(jié)
以上是生活随笔為你收集整理的neo4j——图数据库初探 - JDream314的专栏 - 博客频道 - CSDN.NET的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 判断当前applicat
- 下一篇: Windows 2008在域中不能更改密