主流圖庫對比以及JanusGraph入門


 

 

1.Overall Comparison

Name

Neo4j

JanusGraph

Giraph

1.Compute Framework

Yes

Yes

Yes

2.External Components Demand

Option

Yes

Yes

3.Algorithm Support

Official/Spark/ Mazerunner/ XData

Spark/Giraph/HDP/ XData

XData

4.HF Subgraph Mining

Yes (On Sparser Data)(Memory limit)

Yes

Yes

SparQL Support

Yes

No

No

Gremlin Support

Yes

Yes

No

Cypher Support

Yes

No

No

Relation Inference

Supported base on multi-thread single link query and thread d3-format result merge

 

 

2.Detail

2.1    Compute Framework

 

組件名

Neo4j

JanusGraph

Giraph

URL

https://neo4j.com/developer/apache-spark/

https://docs.janusgraph.org/latest/hadoop-tp3.html

https://zh.wikipedia.org/wiki/Giraph

計算框架概述

使用spark連接器,可以使用SparkSQL、Streaming、GraphX框架進行計算。

使用Mazerunner組件,允許將專用數據集(例如節點或關系列表)導出到Spark。

 

OLAP Traversals引擎可以選用Gremlin Graph Computer,默認安裝Gephi、Giraph、TinkerGraph、Hadoop、Spark等大數據平台插件,或使用ManagementApi、GremlinApi。

Giraph基於Hadoop而建,將MapReduce中Mapper進行封裝,未使用reducer。在Mapper中進行多次迭代,每次迭代等價於BSP模型中的SuperStep。一個Hadoop Job等價於一次BSP作業。

 

2.2       External Components Demand

組件名

Neo4j

JanusGraph

Giraph

URL

https://neo4j.com/developer/integration/

https://docs.janusgraph.org/latest/arch-overview.html

https://zh.wikipedia.org/wiki/Giraph

額外組件依賴

官方提供組件,可以與ES、MongoDB、Cassandra等NoSqlDb進行交互

計算框架可以選用Gephi、Giraph、TinkerGraph、Hadoop、Spark框架。

數據存儲服務可以選用Cassandra、HBase或Berkeley DB服務。

數據索引可以選用Es、Solr或Lucene服務。

Giraph基於Hadoop而建,依賴Hadoop、Hive。

 

2.3       Algorithm Support

組件名

Neo4j

JanusGraph

Giraph

URL

https://github.com/neo4j-contrib/neo4j-graph-algorithms

http://tinkerpop.apache.org/docs/3.2.4/reference/#_a_collection_of_vertexprograms

http://sotera.github.io/distributed-graph-analytics/

算法支持

官方:

中心性算法:Pag`eRank、ArticleRank、中介中心性、接近中心性、調和中心性等算法。

社區檢測算法:Louvain、LPA 標簽傳播、連通元件與強連通元件、三角形計數、聚類系數等算法。

路徑探尋算法:最小權重生成樹、最短路徑、單源最短路徑、All Pairs最短路徑、A *法、(YenK)K最短路徑、隨機漫步等算法。

相似度算法:傑卡德相似度、余弦相似度、歐幾里得距離、重疊相似度等算法。

官方:

PageRankVertexProgram、PeerPressureVertexProgram

其他實現(Sotera):
Louvain Modularity、弱連接原件、高中介集提取、葉壓縮算法、Page Rank、鄰域算法。

官方:

最短路徑、出/入度計數、PageRank、連通元件算法。

其他實現(Sotera):
Louvain、弱連接原件、高中介集提取、葉壓縮算法、Page Rank。

 

 

2.4       HF Subgraph Mining

組件名

Neo4j

JanusGraph

Giraph

URL

https://www.slideshare.net/nishantgandhi99/neo4j-vs-giraph

https://www.slideshare.net/ptgoetz/large-scale-graph-analytics-with-janusgraph

https://code.fb.com/core-data/scaling-apache-giraph-to-a-trillion-edges/

高頻子圖挖掘

節點數量受單機內存容量影響,最大連接數受Bolt線程池配置影響,在小數據集或稀疏數據集下性能表現良好,可以實現高頻訪問。

OLAP使用spark-connector通過大數據平台Apache Spark集群實現,擁有橫向擴展的計算能力。

JanusGraph通過與大數據平台(Apache Spark,Apache Giraph,Apache Hadoop)的集成支持全局圖形數據分析,報告和ETL 。

擁有橫向擴展的計算能力,可進行計算密集型子圖挖掘。

Giraph應用程序作為單個MapReduce作業運行,因此可以通過增加作業的工作者(Mapper節點)數量來輕松並行化。

擁有橫向擴展的計算能力,可進行計算密集型子圖挖掘。

 

 

3.JanusGraph Detail

3.1 Basic Pattern

JanusGraph本身就是一組沒有執行線程的jar文件。連接和使用JanusGraph數據庫有兩種基本模式(JanusGraph Embedded、JanusGraph Server)和交互式Shell(Gremlin Console)方式:

模式

描述

Gremlin Console

Gremlin控制台是一個REPL(即交互式shell),與JanusGraph一起打包,可以通過控制台進行JanusGraph 圖庫的創建(連接)、查詢等操作。

JanusGraph Embedded

嵌入式查詢,JanusGraph 作為應用程序的一部分,執行Gremlin,查詢同一JVM中的圖庫。

查詢執行、JanusGraph緩存和事務處理均發生於此JVM。

存儲后端,即查詢結果的數據來源庫,可能是本地庫或遠程庫。

JanusGraph Server

機器上長期運行的服務器進程,允許遠程客戶端或運行在程序中的邏輯進行JanusGraph調用。

提交Gremlin查詢到服務器,與JanusGraph實例交互。
JanusGraph原生支持Apache TinkerPop的Gremlin Server。

 

 

3.2 Configuration Each Pattern

不同模式下配置加載示例:

模式

配置加載

Gremlin Console

通過加載配置文件路徑

graph  =  JanusGraphFactory.open ('path / to / configuration.properties' )

JanusGraph Embedded

通過加載”后端存儲名:配置文件地址或主機名”

graph = JanusGraphFactory.open('cql:localhost')

graph  =  JanusGraphFactory.open ('berkeleyje:/ tmp / graph' )

JanusGraph Server

...

graphs: {

  graph: conf/janusgraph-berkeleyje.properties

}

scriptEngines: {

  gremlin-groovy: {

    plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},

               org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},

...

 

3.3 Classification Of Configuration

JanusGraph區分本地和全局配置選項,具體區分了以下五個配置選項范圍:

配置類型

作用域

修改指南

LOCAL(本地配置)

單個JanusGraph實例

初始化實例時提供

MASKABLE(可屏蔽配置)

集群中的某個JanusGraph實例

本地配置文件提供則覆蓋配置,若無本地配置文件則讀取集群的全局配置

GLOBAL(全局配置)

集群中的所有JanusGraph實例

由全局配置提供,且無法在某實例上覆蓋配置

GLOBAL_OFFLINE(離線全局配置)

集群中的所有JanusGraph實例

類似GLOBAL配置,但修改需要重啟集群:
1:關閉集群,保留一個運行節點

2:關閉所有運行中的事務且無新事務提交

3:通過ManagementAPI修改配置,並commit

4:重啟所有節點

FIXED(固定配置)

集群中的所有JanusGraph實例

由集群初始化是提供,且無法修改

 

 

3.4 Data Loading Process

后端存儲中,數據被加載到JanusGraph的過程

過程描述

對圖創建全局和以節點為中心的索引

加載所有節點

加載所有邊

 

 

3.5 Storage Backend Comparison

不同后端存儲架構、優點以及業務選用邏輯。

組件

架構

限制

優點

選用邏輯

Oracle Berkeley DB Java版

單機節點,同個JVM。

最大一億節點限制;
單機的並發請求數限制;

整庫遍歷操作易耗盡內存;

受單點故障影響;

得益於處於同JVM,對於中小規模圖庫的訪問,Berkeley DB具有比分布式存儲更快速度。

測試和探索邏輯時選用。

對中小圖庫保證可用性和一致性。

無分布式架構。

Cassandra

分布式架構

-

高可用,無單點故障;
高性能,無讀寫瓶頸;

彈性擴展,可以動態增加或減少節點。

優先考慮可用性和可擴展性,在一致性上有所妥協,即查詢結果的完整性(可用數據/所有數據)。

HBase

分布式架構

-

Hadoop生態系統緊密集成;

強一致性讀寫模型;

可擴展更多機器;
便於支持Hbase的MR任務的基類。

優先考慮一致性與分布性,並在可用性部分進行妥協,即響應請求的概率(查詢結果數/查詢總數)。

 

 

3.6 Schema and Data Model

每個JanusGraph圖庫都有一個由邊標簽、屬性鍵和用到的頂點標簽組成的模式。JanusGraph模式可以被顯式或隱式地指定,官方建議明確指定模式,模式可以隨着系統發展而作出調整,並對性能進行調優。

 

3.6.1 Defining Edge Labels

可以通過在graph(或management transaction)對象上調用makeEdgeLabel(String labelName)方法,得到一個builder,之后通過builder定義邊的多重性,邊的多重性有以下設置選項:

多重性

描述

MULTI

任意一對頂點,允許存在任意多個當前標簽類型的邊

SIMPLE

任意一對頂點,最多允許存在一條當前標簽類型的邊

MANY2ONE

任何頂點,最多允許一條當前類型出射邊和任意多條當前類型入射邊

ONE2MANY

任何頂點,最多允許一條當前類型入射邊和任意多條當前類型出射邊

ONE2ONE

任何頂點,最多允許一條當前類型入射邊和最多一條當前類型出射邊

 

示例:(若不指定多重性則默認為MULTI)

mgmt = graph.openManagement()

follow = mgmt.makeEdgeLabel('follow').multiplicity(MULTI).make()

mother = mgmt.makeEdgeLabel('mother').multiplicity(MANY2ONE).make()

mgmt.commit()

 

3.6.2 Defining Property Keys

邊或頂點上的屬性是鍵值對,屬性鍵是Schema的一部分,並且可以限制屬性類型和值的基數。可以通過在graph(或management transaction)對象上調用makePropertyKey(String propertyName)方法,得到屬性鍵的builder,之后通過builder. datatype(Class)指定屬性鍵的數據類型。JanusGraph會強制所有與屬性鍵關聯的值擁有數據類型配置,以此保證圖數據的有效性。

 

 

數據類型

  1. 數據類型Object.class,可以允許任何(可序列化)值與鍵關聯。官方建議盡可能使用具體的數據類型。配置的類型必須是具體的類,而不是接口或抽象類。
  2. JanusGraph會考慮類相等性,因此不允許添加已配置類型的子類。

 

 

JanusGraph原生支持的數據類型

 

類型

描述

String

字符數組

Character

單個字符

Boolean

true or false

Byte

字節值

Short

短整型

Integer

整型

Long

長整型

Float

4字節單精度浮點數

Double

8字節雙精度浮點數

Date

java.util.Date

Geoshape

地理學形狀:點、圓、方形

UUID

java.util.UUID

 

 

 

屬性鍵基數

使用cardinality(cardinality),在任意指定節點上,定義與鍵關聯的值基數,以下是基數可選項:

名稱

描述

SINGLE

(default)

對於每個元素,當前鍵最多允許一個值

LIST

對於每個元素,當前鍵允許任意個值

SET

對於每個元素,當前鍵允許任意個非重復值

 

默認基數項為SINGLE,故所有邊的基數均為SINGLE,所以向邊上的某個鍵附加多個值是不允許的。

示例:

mgmt = graph.openManagement()

birthDate = mgmt.makePropertyKey('birthDate').dataType(Long.class).cardinality(Cardinality.SINGLE).make()

name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SET).make()

sensorReading = mgmt.makePropertyKey('sensorReading').dataType(Double.class).cardinality(Cardinality.LIST).make()

mgmt.commit()

 

 

 

3.6.3 Relation Type

邊的標簽和屬性鍵一同被引用作為關系類型,JanusGraph API中有一些方法可以查詢是否存在或檢索包含屬性鍵和邊標簽的關系類型。

 

示例:

mgmt = graph.openManagement()

if (mgmt.containsRelationType('name'))

name = mgmt.getPropertyKey('name')

mgmt.getRelationTypes(EdgeLabel.class)

mgmt.commit()

 

 

3.6.4 Defining Vertex Labels

類似於邊,頂點也有標簽,但頂點標簽是可選的。標簽有助於區分不同的頂點類型,雖然頂點標簽在概念和數據模型

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM