HugeGraph入門

1、HugeGraph簡介

最近在搞好友推薦方便的工做,選擇了圖數據的方法,使用並學習了HugeGraph,再次記錄一下。html

HugeGraph是百度在2018年中旬開源的一款圖數據庫(Graph Database)系統,能夠存儲海量的頂點(Vertex)和邊(Edge)。實現了Apache ThinkerPop 3[^1]框架,支持Gremlin圖查詢語言[^2]。HugeGraph支持多用戶並行操做,用戶可輸入Gremlin查詢語句,並及時獲得圖查詢結果。也能夠再用戶程序中調用hugeGraph API進行圖分析或查詢。java

2、HugeGraph特性

HugeGraph支持在線及離線環境下的圖操做,支持批量導入數據,支持高效的負責關聯關係分析,而且可以與大數據平臺無縫集成。git

HugeGraph具有以下特色:github

  • 基於ThinkerPop 3框架實現,支持Gremlin查詢語言;
  • 支持從TXT、CSV、JSON等格式的文件中批量導入數據;
  • 具有獨立的Schema元數據信息,方便第三方系統集成;
  • 具有可視化操做界面,下降用戶使用門檻;
  • 存儲系統採用插件方式,支持RocksDB、Cassandra、ScyllaDB、HBase及Mysql等多種後端;
  • 優化的圖接口,最短路徑、K步連通子圖、K步到達鄰接點等;
  • 支持屬性圖,頂點和邊都可添加屬性,支持豐富的屬性類型;
  • 能夠對邊和頂點的屬性創建索引,支持精確查詢、範圍查詢、全文檢索;
  • 支持4種頂點ID策略,之間ID、自動生成ID、用戶自定義字符串ID和用戶自定義數據ID;
  • 支持與Hadoop、Spark GraphX等大數據系統集成,支持Bulk Load操做。

3、HugeGraph框架模塊

  • HugeGraph-Server: HugeGraph-Server是HugeGraph項目的核心部分,包含Core、Backend、API等子模塊;
    • Core:圖引擎實現,向下鏈接Backend模塊,向上支持API模塊;
    • Backend:實現將圖數據存儲到後端,支持的後端包括:Memory、Cassandra、ScyllaDB、RocksDB、HBase以及Mysql,用戶根據實際狀況選擇一種便可;
    • API:內置REST Server,向用戶提供RESTful API,同時兼容Gremlin查詢。
  • HugeGraph-Client:HugeGraph-Client提供了RESTful API的客戶端,用於鏈接HugeGraph-Server,目前僅實現Java版,其餘語言用戶可自行實現;
  • HugeGraph-Studio:HugeGraph-Studio是HugeGraph的Web可視化工具,可用於執行Gremlin語句及展現圖;
  • HugeGraph-Loader :HugeGraph-Loader是基於HugeGraph-Client的數據導入工具,將普通文本數據轉化爲圖形的頂點和邊並插入圖形數據庫中;
  • HugeGraph-Spark:基於Spark GraphX的圖分析工具 ,HugeGraph-Spark能在圖上作並行計算,例如PageRank算法等;
  • HugeGraph-Tools:HugeGraph-Tools是HugeGraph的部署和管理工具,包括管理圖、備份/恢復、Gremlin執行等功能。

**總結:**部署HugeGraph須要HugeGraph-Server,在網頁上操做圖須要HugeGraph-Studio,在java項目中操做圖須要HugeGraph-Client,其餘三個視狀況須要的時候再部署使用。算法

4、HugeGraph安裝部署

4.1 安裝HugeGraph-Server(必須)

依賴:sql

JDK1.8shell

使用使用的是RocksDB存儲則須要GCC >= 4.3.0 ,下面的步驟假設使用RocksDB做爲存儲數據庫

步驟1:後端

# 下載tar包
wget https://github.com/hugegraph/hugegraph/releases/download/v${version}/hugegraph-${version}.tar.gz
tar -zxvf hugegraph-${version}.tar.gz

步驟2:瀏覽器

修改 hugegraph.properties

backend=rocksdb
serializer=binary
rocksdb.data_path=.
rocksdb.wal_path=.

步驟3:

初始化數據庫(僅第一次啓動時須要)

cd hugegraph-${version}
bin/init-store.sh

步驟4:

啓動server

bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK

步驟5:

查看服務狀態:

jps
6475 HugeGraphServer
# curl請求restuflAPI,結果返回200,表明server啓動正常
echo `curl -o /dev/null -s -w %{http_code} "http://localhost:8080/graphs/hugegraph/graph/vertices"`

步驟6:

# 中止server
$cd hugegraph-${version}
$bin/stop-hugegraph.sh

4.2 安裝HugeGraph-Studio

步驟1:

# 下載tar包並解壓
wget https://github.com/hugegraph/hugegraph-studio/releases/download/v${version}/hugegraph-studio-${version}.tar.gz
tar zxvf hugegraph-studio-${version}.tar.gz

步驟2:

修改配置文件hugegraph-studio.properties

  • 將配置項studio.server.host的值localhost修改爲機器名或 IP,這是 HugeGraphStudio 對外提供服務的host,若是隻須要本地訪問則保持不變便可;
  • 將配置項studio.server.port的值8088修改爲想要的端口,這是 HugeGraphStudio 對外提供服務的port
  • 將配置項graph.server.host的值localhost修改爲 HugeGraphServer 的host,HugeGraphStudio 經過此項和graph.server.port與 HugeGraphServer 創建鏈接;
  • 將配置項graph.server.port的值8080修改爲 HugeGraphServer 的port,HugeGraphStudio 經過graph.server.host和此項與 HugeGraphServer 創建鏈接;
  • 將配置項graph.name的值hugegraph修改爲要鏈接的 HugeGraphServer 的圖名,目前只容許鏈接一個圖。
# 啓動HugeGraph-Studio
$ cd hugegraph-studio-${version}
$ bin/hugegraph-studio.sh

步驟3:

瀏覽器打開:http://localhost:8088便可訪問。

5、HugeGraph,Neo4j,Titan三種圖數據庫性能對比

官網給了一個性能測試的報告:https://hugegraph.github.io/hugegraph-doc/performance/hugegraph-benchmark-0.5.6.html

總結起來就是:

  • 批量插入性能:HugeGraph(RocksDB) > Neo4j > Titan(thrift+Cassandra)
  • 遍歷性能:Neo4j > HugeGraph(RocksDB) > Titan(thrift+Cassandra)
  • 圖經常使用分析方法性能:FS場景,HugeGraph性能優於Neo4j和Titan,K-neighbor和K-out場景,HugeGraph可以實如今5度範圍內秒級返回結果
  • 社區聚類算法性能 Neo4j > HugeGraph > Titan

當時選擇HugeGraph的緣由一是需求須要導大量的數據,涉及大約十幾億的插入,因此須要找一個插入性能高的,而且好友關係變更的時候也須要異步更新圖關係。而是HugeGraph雖然是新秀,可是中文官方文檔很簡介清楚,利於學習使用。

參考:

https://hugegraph.github.io/hugegraph-doc/

[^1]: Apache ThinkerPop 3是圖形數據庫(OLTP)和圖形分析系統(OLAP)的圖形計算框架。 [^2]: Gremlin是Apache ThinkerPop框架下的圖遍歷語言,Gremlin是一種函數式數據流語言,可使用戶使用簡潔的方式表述複雜的屬性圖的遍歷或查詢。

相關文章
相關標籤/搜索