999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

圖形數據庫Neo4j的內嵌式應用研究

2012-04-12 00:00:00王余藍
現代電子技術 2012年22期

摘 要:圖形數據庫支持C/S結構與內嵌式部署2種方式,而內嵌式部署因使用簡單方便而廣受關注。以教育領域中論文作者合作關系圖譜為例對圖形數據庫的嵌入式應用進行研究,提供一種快速、動態的學術合作關系存儲方法。研究表明圖形數據在數據庫創建、查詢、更新等方面表現出很高的易用性,特別特別適合處理大量復雜、動態、互連接、低結構化的數據,是一種解決社交網絡、信息可視化等領域海量關聯數據存儲的有效方法。

關鍵詞:圖形數據庫; 人物關系圖譜; 關聯數據; Neo4j

中圖分類號:TN91934 文獻標識碼:A 文章編號:1004

圖狀模型是對層次模型的進一步發展,其本質是將數據組織為圖的形式,對數據庫系統的各種增、刪、改、查操作變成對圖的遍歷與搜索。作為NoSQL數據庫的一種,圖數據庫很長時間多局限于學術與實驗室,隨著Web 2.0的發展,數據間的關聯與數據變得同等重要。在社交網絡Facebook、電子商務、資源檢索等領域[1]存在大量的關聯數據,急切需要一種能夠處理復雜關聯的存儲技術,圖形數據庫才逐漸從實驗室走出,因為采用圖形數據來存儲和計算這些海量的數據更加有效。這極大地推動了圖形數據庫的快速發展。 現在比較成熟的圖像數據庫包括 Twitter 的FlockDB,以及開源項目中的Neo4j 和Infogrid等。

Neo4j是基于Java的圖形數據庫[2],它遵循著屬性圖形數據模型。相對于關系數據模型來說,Neo4j重點解決了擁有大量連接的傳統RDBMS在查詢時出現的性能衰退問題。通過圍繞圖形進行數據建模,Neo4j會以相同的速度遍歷結點與邊,其遍歷速度與構成圖形的數據量沒有任何關系。此外,Neo4j還提供了非??斓膱D形算法、推薦系統和OLAP風格的分析,而這一切在目前的RDBMS系統中都是無法實現的。Neo4j是一個高性能、高可抗靠性、可擴展的、完全兼容ACID的圖數據庫。它完全由Java語言實現,能夠部署到多種系統上。在Neo4j中,數據以一種針對圖網絡進行過優化的格式保存在磁盤上。Neo4j的內核是一種極快的圖引擎,具有數據庫產品期望的所有特性,如恢復、兩階段提交、符合XA等。下面我們將針對圖形數據庫Neo4j的實際應用進行闡述,并與關系數據庫進行比較。

1 Neo4j的應用模式

Neo4j支持2種應用模式[3],分別是內嵌模式和服務器模式。內嵌模式將數據庫文件內嵌到應用程序中,作為程序的一個單獨數據庫,供應用程序內部自行調用。服務器模式將Neo4j作為單獨的服務器進行部署,利用REST風格的方式進行調用,服務器模式時,系統由2部分組成:

(1) 客戶端通過RMI方式發送命令到服務器;

(2) 服務器接收并處理這些命令,返回執行后的結果。在這種應用模式下,Neo4j通過Cypher查詢語言來進行圖的搜索與查詢操作。Cypher是一個描述性的圖查詢語言,允許不必編寫圖形結構的遍歷代碼就可實現對圖的存儲和效率查詢。Cypher不同于Java或腳本語言,而更類似于關系數據庫中的SQL語言。

在內嵌應用程序的應用模式下,應用程序直接使用Neo4j數據庫,開發者可以通過JavaAPI直接與圖模型交互,這個API提供了非常靈活的數據結構。通俗的說就是通過直接編碼的方式與Neo4j圖數據庫交互。接下來我們將主要闡述內嵌應用模式。

2 Neo4j內嵌模式數據庫創建

下面通過一個簡單的例子來展示Neo4j的基本功能。圖1的這個小型圖是文獻作者合作關系與論文引用關系圖譜,共有四種關系類型,分別是WRITE,WRITE_BY,COAUTHOR,CITE和CITE_BY。

圖1 論文作者合作關系與論文引用創建圖形數據庫的步驟如下(Java表示):

Step 1:使用枚舉來表示結點間的關系類型:

enum Relationships implements RelationshipType { COAUTHOR,WRITE,CITE }

Step 2:調用內嵌模式創建接口,在DB_PATH路徑下建立一個新的圖數據庫,該路徑人為指定,如果數據庫已經存在則直接打開,否則新建數據庫。

graphDb = new EmbeddedGraphDatabase(DB_PATH);

Step 3:創建圖,存儲作者、論文及其內在關聯,對圖的所有修改均放在事務中,從而保證數據的完整性。

public void createGraph() {

Transaction tx = graphDb.beginTx();

try {

Node Miche = graphDb.createNode(); Miche.setProperty(\"name\", \"Miche\");

Node Robert = graphDb.createNode();Robert.setProperty(\"name\", \"Robert\");

Node Mike = graphDb.createNode();Mike.setProperty(\"name\", \"Mike\");

Node Jim = graphDb.createNode();Jim.setProperty(\"name\", \"Jim\");

Node rc = graphDb.createNode();rc.setProperty(\"name\", \"Reading Comprehension\");

Node ew = graphDb.createNode();ew.setProperty(\"name\", \"English Writing\");

Node er = graphDb.createNode();er.setProperty(\"name\", \"English Reading\");

Miche.createRelationshipTo(Robert, Relationships.COAUTHOR);

Miche.createRelationshipTo(Mike, Relationships.COAUTHOR);

Mike.createRelationshipTo(Jim, Relationships.COAUTHOR);

Robert.createRelationshipTo(Jim, Relationships.COAUTHOR);

Miche.createRelationshipTo(Robert, Relationships.COAUTHOR);

Mike.createRelationshipTo(rc, Relationships.WRITE);

Mike.createRelationshipTo(ew, Relationships.WRITE);

Jim.createRelationshipTo(ew, Relationships.WRITE);

Jim.createRelationshipTo(er, Relationships.WRITE);

rc.createRelationshipTo(ew, Relationships.CITE);

ew.createRelationshipTo(er, Relationships.CITE);

tx.success();

} catch (Exception e) {tx.failure();} finally {tx.finish(); }}

在事務提交過程中,tx.success()只是測試事務是否能夠成功提交,并沒有真正提交事務。事務的最終提交由tx.finish()完成。

3 Neo4j內嵌模式數據庫檢索

在數據庫創建后,可以進行查詢、插入、更新、刪除等基本操作,下面通過一個簡單的問題“Mike寫了哪些論文?”來描述Neo4j圖數據庫的查找功能。這里,只需查看“Mike”結點的“WRITE”關系便可以找出他寫過的論文:

for (Relationship rel : Mike.getRelationships(Relationships.WRITE)) {

Node paper = rel.getOtherNode(Mike);

System.out.println(paper.getProperty(\"name\"));}

檢索結果為“Reading Comprehension”和“English Writing”。這只是簡單的查詢,對于復雜查詢,則需借助于功能強大Neo4j TraverserAPI接口,它可以完成非常復雜的遍歷描述和過濾器。它由Traverser和ReturnableEvaluator模塊組成,前者計算StopEvaluator來獲知何時停止,后者則用于計算在結果中應該包含哪些結點。此外,還可以指定要遍歷關系的類型和方向。Traverser實現了Java的Iterator接口,負責延遲加載和遍歷整個圖,在結點被首次要求訪問時進行。它還內置了一些常用的Evaluator和缺省值,上面的查詢采用TraverserAPI時的流程如下:

Traverser papers = neo.traverse(Order.BREADTH_FIRST,StopEvaluator.DEPTH_ONE,

ReturnableEvaluator.ALL_BUT_START_NODE, Relationships.WRITE, Direction.BOTH);

for (Node paper : papers) { System.out.println(paper.getProperty(\"name\"));

TraverserAPI在繼續訪問更深一級的結點之前首先從起點訪問處于同一深度的所有結點(Order.BREADTH_FIRST),在深度為1的一次遍歷后停止(StopEvaluator.DEPTH_ONE),然后返回除了起點(\"Mike\")之外的所有結點(ReturnableEvaluator.ALL_BUT_START_NODE)。在兩個方向只遍歷類型為WRITE的關系。通過使用TraverserAPI可以完成非常復雜的遍歷操作。

4 結 語

通過以上實例可以看出,圖形數據庫的創建與維護異常簡單,結點的屬性可以動態變化,結點之間的邊可以也可以自由增減,這對于關系數據庫來講非常困難??梢妶D數據庫更善于處理大量復雜、動態、互鏈接、低結構化的數據。在關系數據庫中,這些查詢會導致大量的表鏈接,因此會產生性能上的問題。圖數據庫重點解決了擁有大量鏈接的傳統 RDBMS在查詢時出現的性能衰退問題。通過圍繞圖形進行數據建模,圖數據庫會以相同的速度遍歷結點與邊,其遍歷速度與構成圖的數據量沒有任何關系。此外,Neo4j還提供了非??斓膱D形算法、推薦系統和OLAP風格的分析,而這一切在目前的RDBMS系統中都是無法實現的\[4\]。

參 考 文 獻

[1] 于戈.云計算環境下的大規模圖數據處理技術\[J\].計算機學報,2011(10):17561765.

[2] Anon. Neo4j tutorial \[EB/OL\]. \[20120213\]. http://docs.neo4j.org/chunked/stable/tutorials.html.

[3] Anon. Neo4j API documentation \[EB/OL\]. \[20111118\]. http://api.neo4j.org.

[4] 唐箭,虢莉娟,龔濤.基于云計算的終身教育服務平臺設計\[J\].現代電子技術,2010,33(12):4346.

[5] 曾麗君,張紅梅,李中林.云計算及其在軍事上的應用探討\[J\].現代電子技術,2009,32(23):2326.

[6] 鄭貴德,陳明.以云計算為后臺的負載均衡技術\[J\].現代電子技術,2012,35(9):7780.

[7] 李文娟,那彥.基于云計算及圖像內容分析的醫學圖像融合方法\[J\].電子科技,2011(3):2226.

[8] 劉曉樂.計算機云計算及其實現技術分析\[J\].電子科技,2009(12):100102.

[9] 程飛,黃曦.基于OGRE的三維紅外云仿真\[J\].電子科技,2010(6):47.

[10] 趙廣才,張雪萍.云計算技術分析及其展望\[J\].電子設計工程,2011(22):47.

作者簡介: 王余藍 女,西安交通大學外國語學院。研究方向為信息系統、實驗室管理。

主站蜘蛛池模板: 午夜福利免费视频| 99久久国产综合精品2020| 亚洲欧美日韩成人在线| 欧美日韩免费在线视频| 无码专区第一页| 青草国产在线视频| 国产永久免费视频m3u8| 国产91线观看| 99爱视频精品免视看| 久久亚洲黄色视频| 国国产a国产片免费麻豆| 香蕉国产精品视频| 亚洲91在线精品| 2022精品国偷自产免费观看| 91青青在线视频| 久久久久免费看成人影片| 黄色片中文字幕| 福利国产在线| 国产精品va免费视频| 99精品一区二区免费视频| 国产美女91呻吟求| 国产成人一区| 久久婷婷五月综合色一区二区| 日韩免费毛片视频| 女人18毛片久久| 四虎永久在线精品国产免费| 国产一级片网址| 免费国产小视频在线观看| 67194亚洲无码| 国产成人精彩在线视频50| 人人澡人人爽欧美一区| 亚洲综合色区在线播放2019| 久草视频一区| 国产va免费精品| 免费一极毛片| 日韩久草视频| 成人免费午夜视频| 91精品国产无线乱码在线| 久久国产亚洲偷自| 九一九色国产| 日韩精品一区二区三区中文无码| 欧美日韩国产高清一区二区三区| h网站在线播放| 欧美亚洲激情| 亚洲国产成人自拍| 国产91色在线| 久久黄色影院| 91精品啪在线观看国产| 无码内射在线| 亚洲永久免费网站| 在线观看国产精美视频| 天天色天天操综合网| 91网站国产| 大学生久久香蕉国产线观看 | 无码AV日韩一二三区| 国内精品免费| 国产99精品久久| 欧美天天干| 成人免费网站久久久| 一区二区影院| 亚洲无码免费黄色网址| 91色在线观看| 国产成人高清在线精品| 久久动漫精品| 亚洲啪啪网| 欧美五月婷婷| 高清免费毛片| 三级国产在线观看| 亚洲综合精品香蕉久久网| 久无码久无码av无码| 夜精品a一区二区三区| 色综合久久无码网| 亚洲免费成人网| 国产真实乱子伦视频播放| 黄色网页在线观看| 欧美成人精品在线| 色综合五月婷婷| 国产呦视频免费视频在线观看| 欧美人人干| 8090成人午夜精品| 亚洲区欧美区| 日韩视频免费|