1、HugeGraph
HugeGraph 是一款易用、高效、通用的**開源!開源!開源!**圖數據庫,最初由百度安全團隊自主研發。
HugeGraph 圖數據庫支持百億以上的頂點和邊快速導入,並提供毫秒級的關聯關係查詢能力(OLTP)。支持 Property Graph 和 Apache Gremlin 查詢語言,具備導入、導出、備份、恢復、可視化界面等工具組件,提供簡單易用的RESTful API 及 Client,可以輕鬆構建各種基於圖數據庫的應用和產品。
HugeGraph 圖數據庫的典型應用場景包括: 深度關係探索、 複雜關聯分析、 路徑搜索、 特徵抽取、 數據聚類、 社區檢測、 知識圖譜等。適用業務領域有如:網絡安全、電信詐騙、金融風控、廣告推薦、社交網絡和智能機器人等。
HugeGraph 圖數據庫的特徵:
- 易用:HugeGraph 支持 Gremlin圖查詢語言與 RESTful API,同時提供圖檢索常用接口,具備功能齊全的周邊工具,輕鬆實現基於圖的各種查詢分析運算。
- 高效:HugeGraph 在圖存儲和圖計算方面做了深度優化,提供多種批量導入工具,輕鬆完成百億數據快速導入,通過優化過的查詢達到圖檢索的毫秒級響應。支持數千用戶併發的在線實時操作。
- 通用:HugeGraph 支持 Apache Gremlin 標準圖查詢語言和 Property Graph 標準圖建模方法,支持基於圖的 OLTP 和 OLAP 方案。集成 Apache Hadoop 及 Apache Spark 大數據平臺。
- 可擴展:支持分佈式存儲、數據多副本及橫向擴容,內置多種後端存儲引擎(包括RocksDB、Cassandra、ScyllaDB、HBase、Palo、MySQL以及InMemory等),也可插件式輕鬆擴展後端存儲引擎。
- 開放:HugeGraph代碼開源(Apache 2 License [7] ),客戶可自主修改定製,選擇性回饋開源社區。
1、基礎功能
- 頂點、邊(元素):支持基本增刪改查操作,支持有向圖,支持兩頂點間同一類型多條邊,支持超級點。
- 屬性:支持屬性圖、支持多值屬性、支持多樣化的屬性類型、支持頂點屬性追加與合併。
- 元數據:支持豐富的 Schema 校驗,如屬性是否可空(可選),支持 Schema 動態修改。
- 索引:支持二級索引、範圍索引、全文索引,支持聯合索引。
- 事務:遵循 Tinkerpop 事務規範,支持 Read Committed 級別事務。
- 多頂點 ID 策略:支持主鍵 ID、支持自動生成 ID、支持用戶自定義字符串 ID、支持用戶自定義數字 ID。
- 大規模數據:支持批量插入頂點/邊、支持超級頂點、支持流式分頁獲取、支持Shard並行獲取。
- 優化的圖接口:最短路徑(Shortest Path)、K步連通子圖(K-neighbor)、K步到達鄰接點(K-out)等。
- 其它:支持圖變量(Graph Variables)、兼容性上已通過Apache Tinkerpop官方測試用例90%兼容測試。
2、高級功能
- 多圖實例:支持多個圖實例,圖之間數據相互隔離。
- 用戶認證:支持多用戶,支持用戶權限認證,支持用戶角色訪問控制。可輕鬆對接現有用戶認證系統。
- 監控接口:支持系統狀態監控、API 訪問時間監控、性能數據監控等。
- 備份恢復:支持在線備份、支持備份數據的恢復。
- 雲環境適應:兼容多個雲廠商平臺,輕鬆對接公有云、私有云和混合雲等多種雲環境。
- 商業版本:商業版本提供技術諮詢、解決方案、定製化需求等服務。
3、接口支持
- Gremlin 接口:支持標準、靈活的 Gremlin 查詢接口。
- Restful API接口:支持功能豐富、簡單易用的 HTTP Restful 接口。提供頂點、邊、元數據等的基本操作接口;此外提供各種高級查詢接口,包括最短路徑、多路徑、交叉點、N步可達鄰居等。
- Java Client 客戶端:支持 Java 語言客戶端,用戶可根據自身需求實現其它語言客戶端。
4、周邊工具
- 一鍵部署(hugegraph-tools/deploy):通過部署工具簡單輕鬆的一鍵部署所有組件。
- 可視化界面(hugegraph-studio):基於 Web 的可視化環境,提供圖操作界面、圖數據展示與分析。
- 導入工具(hugegraph-loader):數據導入工具,支持從 txt、csv、json 等格式文件導入到 HugeGraph。
- 導出工具(hugegraph-tools/dump):數據導出工具,可將頂點及關聯邊導出到文件,支持用戶實現 formatter 自定義格式。
- 備份恢復工具(hugegraph-tools/backup&restore):數據備份與恢復工具,支持定時備份、手動備份、手動恢復等功能。
- Gremlin任務工具(hugegraph-tools/gremlin):Gremlin任務執行工具,支持同步執行 Gremlin 查詢與分析(OLTP),支持異步執行Gremlin任務(OLAP)。
- 集成Spark GraphX工具(hugegraph-spark):基於Spark GraphX的大數據環境下的圖分析工具。
2、Linux 安裝
HugeGraph-Server 是 HugeGraph 項目的核心部分,包含 Core、Backend、API 等子模塊。Core 模塊是 Tinkerpop 接口的實現,Backend 模塊用於管理數據存儲。
HugeGraphServer 的目錄結構:
- bin
- checksocket.sh : com.baidu.hugegraph.util.CheckSocket
- dump-conf.sh : com.baidu.hugegraph.cmd.ConfDumper
- dump-store.sh : com.baidu.hugegraph.cmd.StoreDumper
- gremlin-console.sh
- hugegraph : 啓動或停止服務,會調用其他 start/stop-hugegraph.sh 腳本;
- hugegraph-server.sh
- hugegraph.service
- init-store.sh : com.baidu.hugegraph.cmd.InitStore
- install.sh:將 HugeGraphServer 安裝爲系統服務
- monitor-hugegraph.sh
- start-hugegraph.sh
- start-monitor.sh
- stop-hugegraph.sh
- stop-monitor.sh
- util.sh
- conf
- gremlin-server.yaml
- hugegraph.properties
- rest-server.properties
- ext
- lib
- scripts
1、 配置
配置文件的目錄爲 hugegraph-release/conf,所有有關服務和圖本身的配置都在此目錄下。
- gremlin-server.yaml
- rest-server.properties
- hugegraph.properties
HugeGraphServer 內部集成了 GremlinServer 和 RestServer,gremlin-server.yaml 和 rest-server.properties 就是用來配置這兩個 Server 的。GremlinServer 能接收用戶的 gremlin 語句,解析後再調用 Core 的代碼;RestServer 提供 Restfule API,根據不同的 HTTP 請求,嗲用對應的 Core API。
# graphs:該項爲 map 結構,key 是圖的名字,value 是該圖的配置文件路徑;
graphs: {
hugegraph: conf/hugegraph.properties
}
gremlin-server.yaml 和 rest-server.properties 都包含 graphs 配置項,而 init-store 命令是根據 gremlin-server.yaml 的 graphs 下的圖進行初始化的。
2、 多圖
HugeGraph 支持存在多個圖,並且各個圖的後端可以不一樣,比如 graph1 以 cassandra 爲後端,graph2 以 mysql 爲後端。
3、 初始化
$ bin/init-store.sh
初始化數據庫,僅第一次啓動時需要,會根據配置文件對圖數據進行初始化。
4、 啓動
啓動分爲“首次啓動”和“非首次啓動”,首次啓動之前需要初始化後端數據庫,然後啓動服務。
HugeGraphServer 啓動時會連接後端存儲並嘗試檢查後端存儲版本號,如果未初始化後端或者後端已經初始化當時版本比匹配時,HugeGraphServer 會啓動失敗,並給出錯誤信息。
bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK
5、 訪問
jps 查看服務進程
jps
6475 HugeGraphServer
curl 請求 RestfulAPI
curl -o /dev/null -s -w %{http_code} “http://localhost:8080/graphs/hugegraph/graph/vertices”
返回結果200,代表server啓動正常
3、Window + PostgreSQL
下載源碼重新編譯:
- 需要的模塊:api,core, dist, mysql, postgresql
- 刪除 maven-autrun-plugin
- 添加 maven-assembly-plugin,編譯可執行 jar
- 配置
- 創建 postgresql 數據庫 hugegraph
修改 HugeGraphServer.java
public static void main(String[] args) throws Exception {
HugeRestServer.register();
InitStore.initGraph("conf/hugegraph.properties");
HugeGraphServer server = new HugeGraphServer("conf/gremlin-server.yaml","conf/rest-server.properties");
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
LOG.info("HugeGraphServer stopping");
server.stop();
LOG.info("HugeGraphServer stopped");
}));
}
1、postgresql 配置
配置項 | 值 | 描述 |
---|---|---|
backend | postgresql | |
serializer | postgresql | |
jdbc.driver | org.postgresql.Driver | The JDBC driver class to connect database. |
jdbc.url | jdbc:postgresql://127.0.0.1:5432/ | The url of database in JDBC format. 端口後的 / 不要漏掉 |
jdbc.username | hugegraph | The username to login database. |
jdbc.password | hugegraph | The password corresponding to jdbc.username. |
注意:
- 通過配置文件中的 store 屬性來設置對應的數據庫名稱,默認是 hugegraph;
- username 與 store 相同;因爲內部會通過 “jdbc:postgresql://127.0.0.1:5432/” 來獲取數據庫連接,得到的數據庫名與用戶名相同;
2、Windows 腳本
start.bat
cd /d %~dp0
start /B java -jar hugegraph.jar 1>nul 2>nul
- conf
- ext
- lib
- scripts
- hugegraph.jar
- start.bat
在啓動過程中,出現 MANIFEST.MF 缺少 version 的錯誤,直接編輯 jar 中的 MANIFEST.MF 文件,添加 version: 3.4.3
。