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.

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

主站蜘蛛池模板: 99re免费视频| 国产第一页免费浮力影院| 久久鸭综合久久国产| 天天色天天操综合网| 思思热精品在线8| 国产精品视频第一专区| 久久久精品久久久久三级| 国产精品免费电影| 久久国语对白| 成人精品在线观看| 亚洲精品无码高潮喷水A| 欧美在线观看不卡| 欧美a级完整在线观看| 亚洲一区二区黄色| 国产欧美网站| 99久久国产综合精品2023| 国产日韩欧美精品区性色| 免费毛片视频| 成人字幕网视频在线观看| 自拍偷拍欧美日韩| 孕妇高潮太爽了在线观看免费| 一级毛片免费不卡在线| 99国产精品国产高清一区二区| 99视频在线看| a亚洲天堂| 2021精品国产自在现线看| 中文字幕色站| 国产福利观看| 国产精品短篇二区| 一级毛片免费观看久| 国产亚洲欧美在线专区| 亚洲一区波多野结衣二区三区| 91精品日韩人妻无码久久| 日韩视频免费| 亚洲午夜国产片在线观看| 精品人妻一区二区三区蜜桃AⅤ| 在线中文字幕日韩| 国产中文一区a级毛片视频 | 亚洲人成色77777在线观看| 精品人妻系列无码专区久久| 国产一级妓女av网站| 精品91视频| 国产美女在线观看| 成人欧美在线观看| 精品91自产拍在线| 在线免费观看AV| 九色视频在线免费观看| 欧美一道本| 日韩av手机在线| 免费在线不卡视频| 97综合久久| 亚洲人成在线免费观看| 无码一区中文字幕| 国产精品亚洲专区一区| 毛片在线区| 亚洲精品欧美日韩在线| 久久夜色撩人精品国产| 亚洲人网站| 无码一区二区三区视频在线播放| 亚洲欧洲日韩久久狠狠爱| 国产精品视频导航| 在线观看国产精品第一区免费 | 亚洲精品国产精品乱码不卞| av在线无码浏览| 中文一区二区视频| 国产va免费精品| 自拍偷拍一区| 国产成人高精品免费视频| 欧美亚洲综合免费精品高清在线观看 | 一本色道久久88| 精品第一国产综合精品Aⅴ| 日韩无码视频专区| 日韩在线第三页| 国产乱人伦AV在线A| 亚洲色无码专线精品观看| 日本黄色不卡视频| 日本一区二区不卡视频| 国产视频 第一页| 日本黄色不卡视频| 国产精品密蕾丝视频| 日韩国产无码一区| 国产亚洲精|