Neo4J可能是當下人氣最高的圖形數據庫。從名稱我們就能看出Neo4J在設計上主要考慮到Java應用程序的實際需求,但它同時也支持Python。Neo4J屬于開源項目,共有GPLv3社區版、高級版、企業版三種版本;后兩者都以AGPLv3商業許可為基礎。
Neo4J中的圖形模型如圖一所示。簡單來說:
·節點與邊線可以被賦予屬性(鍵-值對);
·只有邊線能夠與類別相關聯,例如“KNOWS”;
·邊線可以指定為有指向或無指向。
▲圖一
由于節點名稱的存在,如果大家想在圖中找到對應節點,那么必須依靠索引。Neo4J使用以下索引機制:一個超級參考節點通過一條特殊類別的邊線“REFERENCE”與所有節點相連。這實際上允許我們創建多個索引,借以通過不同的邊線類別對其加以區分。索引結構如圖二所示。
▲圖二
Neo4J還提供了一些特殊功能,例如列出特定節點的相鄰諸節點或是兩節點間長度最短的諸類路徑等。請注意,要使用上述各類“遍歷”功能,Neo4J要求大家指定路徑中經過的邊線類別,其實這一點并不麻煩。
其實大家不必將Neo4J作為軟件加以安裝。我們完全可以簡單地導入JAR文件來建立一套嵌入式圖形數據庫,該操作將在硬盤上建立對應的目錄。具體信息在Neo4J的說明文檔中已經相當完備,而且其免費版本也沒有設置節點支持數量的上限。
缺點:
·盡管我們可以手動為節點類別通過“type”鍵添加注釋,但相比之下為節點類別在API中提供本地支持無疑更好,因為這將使圖形模型更具普遍意義。另外一旦某個節點具備多種不同類別,麻煩也將隨之而來。
·由用戶手動為新邊線設置索引機制似乎有點奇怪并且很不方便。最好是采用如今關系類數據庫的普遍做法:用戶只需表明要“為一組節點創建索引”,工作即可完成。
2. Infinite Graph (Objectivity Inc.出品)
InfiniteGraph 是一款由Objectivity公司推出的圖形類數據庫,該公司還推出過一款同名的對象類數據庫。免費許可版本只能支持最高100萬節點及邊線總數。InfiniteGraph需要作為服務項目加以安裝,這與以MySQL為代表的傳統數據庫頗為相似。InfiniteGraph借鑒了Objectivity/DB中的面向對象概念,因此其中的每一個節點及邊線都算作一個對象。尤其是:
·所有節點類都將擴展BaseVertex基本類;
·所有邊線類都將擴展BaseEdge基本類。
在 http://wiki.infinitegraph.com/w/index.php?title=Tutorial:_Hello_Graph!中所顯示的展示頁面中,假設人是一個節點類、而會議算作為邊線類。以下是將一條邊線加入到兩個節點之間的代碼:
Person john = new Person("John", "Hello ");
helloGraphDB.addVertex(john);
Person dana = new Person("Dana", "Database!");
helloGraphDB.addVertex(dana);
Meeting meeting1 = new Meeting("NY", "Graph");
▲圖三
InfiniteGraph還提供了一套可視化工具用以查看數據。由上述代碼所生成的邊線將如圖三所示呈現出可視化效果。相比Neo4J在圖一中所展現的圖形模型,InfiniteGraph能夠支持同時具備多種不同類別/類的節點。請注意,Neo4J中的鍵-值對能夠對應InfiniteGraph類中的成員變量。
缺點:
·作為服務項目進行安裝本身沒什么問題,但配置過程完全可以更簡單些。
·由于節點與邊線都能成為用戶的定義對象,因此在靈活性得到保證的情況下,作者懷疑當其處理龐大的圖形結構時,性能方面將受到嚴重影響。請大家記住,NoSQL數據庫一直以來所贏得的廣泛關注都建立在其始終傲人的性能表現上。
3. DEX (Sparsity Technologies出品)
DEX一直被形容為一款具備高性能及優秀可擴展性的圖形類數據庫,這對于NoSQL應用程序來說無疑擁有相當強的吸引力。其個人評估版本最多可支持100萬個節點。目前最新的版本是4.2,同時支持Java及.Net編程。請注意,舊的4.1版本只支持Java,且無法與新版本相兼容。直到文章截止之日(2011年11月24日),4.2版本的說明文檔仍不完備,而且很難在網上找到新版本的使用指導。
▲圖四
圖四展示的是DEX的架構,這也解釋了為什么DEX能夠達成如此優異的性能表現。本地C++ DEX核心正是關鍵所在。在此活動頁面中,DEX項目團隊演示了以其為基礎的數款令人興奮的應用程序:
·書目探索: DEX使用實例,存儲著DBLP(即數字書目索引與圖書館項目)中的所有數據
·在DEX中載入Twitter:其中包括45億個圖形;
·在DEX及Query中載入維基百科:效果明顯好于Neo4J。
DEX在安裝方面同樣簡便,大家只需要一個JAR文件并加以運行即可。與Neo4J不同,DEX的當前數據庫只是一個單獨的文件。DEX Java API同樣易于使用,而圖形類則幾乎能夠提供任何一項大家需要的操作。不過DEX也并非完善無缺,相信摒除下列缺點的DEX會在發展的道路上走得更遠:
·最好將個人版的節點上限數量提升到10億;
·盡快提供完備的說明文檔與更好的應用實例;
·在短期之內將舊版本中的圖形算法移植到新版本中。
4. InfoGrid (Netmesh Inc.出品)
InfoGrid一直標榜自己是一款“網頁圖形數據庫”,也就是說它的某些功能主要面向網頁應用程序。圖五展示了InfoGrid的整體框架,而圖形數據庫在其中所扮演的似乎并不是主要組成部分。InfoGrid在OpenID項目中也擁有幾款應用程序,該項目同樣由Netmesh公司所支持。作者懷疑InfoGrid這套東西其實只在Netmesh公司內部使用,因為它存在著以下硬傷:
·此處公布的最新Java API并不完善,且在某些地方有混淆情況;
·此處公布的使用教程語意含糊且不夠正式。
▲圖五
點擊如下鏈接 http://infogrid.org/wiki/Examples/FirstStep可以查看首個應用實例。雖然總體來說在閱讀方面沒什么難度,但像TAGLIBRARY, TAG, TAG_LABEL以及TAGLIBRARY_COLLECTS_TAG這類內容的大量出現卻讓人相當困惑。這些內容似乎嵌入在模塊當中,為什么會這樣?看起來該應用實例其實是用在Netmesh公司的某個內部項目中的,旨在為某些特定應用程序提供服務。
5. HyperGraphDB (Kobrix Inc.出品)
HyperGraphDB是一套開源數據存儲機制,并依托于BerkeleyDB數據庫存在。HyperGraphDB的圖形模型被稱為直接式超圖形。從數學角度來講,超圖形允許其一條邊線指向兩個以上的節點。HyperGraphDB在此基礎上更進一步,允許一條邊線指向其它邊線,如此一來HyperGraphDB在概括性方面就大大超過了其它圖形類數據庫。圖六顯示的就是四條邊線在超圖形實例中的情況,各邊線以不同顏色加以區分。
▲圖六
HyperGraphDB教程似乎比較完備。HyperGraphDB中的每個節點被稱為一個原子,而索引及遍歷等操作也得到了良好的支持。
備注:盡管這份教程寫得不錯,但同樣的錯誤提示“….dll: Can’t find dependent libraries”仍然在Win 7操作系統中出現。在作者改用Ubuntu 64位系統后,示例程序彈出如下異常信息:“ELFCLASS32 (錯誤原因分析:架構字元寬度不匹配)”。這可能是因為HyperGraphDB只支持32位Linux系統。
6. Trinity (微軟出品)
微軟不久之前才剛剛攜Trinity首個發布版本V0.1(只允許企業內網接入)加入角逐。根據介紹,Trinity是一款基于內存的圖形存儲機制,且具備豐富的數據庫功能,其中包括高并行性聯機查詢處理、ACI事務支持等等。在圖形處理方面,Trinity只為用戶提供了C# API。
由于Trinity軟件包還不對微軟公司之外公開,因此目前尚無法獲悉更多細節信息。不過至少Trinity擁有以下關鍵性功能:
·使用超圖形作為數據模型;
·適合部署于公布式模型中。
Trinity的系統架構可點此查看。總體而言,在將Trinity與其它開源圖形類數據庫進行比較時,我們很難發現它所獨有的明顯優勢。然而,由于Trinity仍處于開發原型階段,因此適當加以關注也是必要的。此外,Probase作為一個進行中的項目,似乎在本體論/分類法知識方面將Trinity當成了理論基礎。點擊此處可以查看另一篇討論Probase與Trinity的好文。
7. AllegroGraph (Franz Inc.出品)
AllegroGraph是一款老牌圖形類數據庫了,據稱其負載“數十億RDF(即資源描述框架)三元組仍可保持高性能”。盡管RDF三元組可以作為邊線來處理,但AllegroGraph的原本設計意圖是創建以RDF為中心的語義網絡應用程序,并支持SPARQL、RDFS++以及Prolog等由包括Java程序在內的各類客戶應用推衍得出的程序。AllegroGraph RDFStore免費版本支持最多5000萬個三元組。
▲圖七
圖七展示的正是RDF圖形實例。AllegroGraph為每個三元組配備了一個名為“命名圖”的額外接口,這就使得三元組成為四邊形結構(但為了方便起見仍稱其為三元組)。以下是作者根據圖七內容所做出的判斷:
主語 謂語 對象 圖形
Robbie …的寵物 jans jans的主頁
…的寵物 反義 擁有寵物 英語語法
狗 子分類 哺乳動物 科學
要在RDF圖形中添加大量三元組,AllegroGraph提供了一套批量加載N個三元組與RDF/XML文件的工具。總而言之,AllegroGraph是RDF存儲的上佳選擇,但一般圖形則不太適合用這套方案。說明文檔似乎相當冗長。點擊此處可以查看介紹與Java API教程,Sesame版本點此而Jena版本點此。
總體比較
總體比較結果如下表所示。每款產品似乎都支持高性能及分布式部署。“1M”是指對應圖形數據庫可以支持100萬個免費節點。RDF圖形可以被看作一種特殊屬性的圖形。由于超圖形是目前圖形格式中最常見的類型,因此支持超圖形的數據庫在理論上也應該會支持屬性圖形。
Neo4j | InfiniteGraph | DEX | InfoGrid | HyperGraphDB | Trinity | AllegroGraph | |||
說明文檔質量 | 好 | 好 | 一般 | 差 | 好 | 差 | 好 | ||
便攜性如何 | 好 | 差 | 好 | 好 | 好 | 差 | 差 | ||
是否支持Java | 是 | 是 | 是 | 是 | 是 | 否 | 是 | ||
是否免費 | 是 | < 1M | < 1M | 是 | 是 | 否 | < 50 M | ||
是否支持屬性圖 | 是 | 是 | 是 | 是 | 是 | 是 | RDF | ||
是否支持超圖形 | 否 | 否 | 否 | 否 | 是 | 是 | 否 | ||
基于對上述圖形數據庫的分析,我們可以選擇我們自己需要的數據庫做我們自己的應用,拿出自己的拳頭產品。
參考資料:
http://neo4j.org/
http://objectivity.com/
http://sparsity-technologies.com/
http://infogrid.org/
http://www.hypergraphdb.org/
http://database.51cto.com/art/201103/251198.htm
http://www.franz.com/agraph/allegrograph/
http://tech.it168.com/a2012/0112/1302/000001302117_all.shtml
http://www.infoq.com/cn/articles/graph-nosql-neo4j
http://blog.csdn.net/jianyi7659/article/details/8025742
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com