圖數據庫(Graph Database)是一種以圖結構進行存儲和查詢的數據庫。本文總結了圖數據庫選型的各類因素,並對比了3個主流開源圖數據庫:Neo4j、JanusGraph、HugeGraph。Neo4j是老牌的圖數據庫,JanusGraph是非常成功的開源圖數據庫TitanDB的Fork版(TitanDB已經不維護了),HugeGraph是百度開源的圖數據庫。下面表格是具體的對比內容,共比較了30多個指標,包括生態、功能、性能、工具鏈等維度,分享出來給大家作爲參考:
對比點 | Neo4j | JanusGraph | HugeGraph |
---|---|---|---|
品牌知名度 | 最高 | 高 | 國際知名度一般,國內知名度高 |
開源生態 | 社區版開源,但較多限制,商業版閉源 | 開源,兼容Apache Tinkerpop生態,主要由IBM提供雲上服務 | 開源,兼容Apache Tinkerpop生態,由百度領頭,提供本土化技術與服務 |
圖查詢語言 | Cypher | Gremlin | Gremlin |
適用場景偏向 | 人工智能、欺詐檢測、知識圖譜等場景 | 雲服務商、具備技術能力深厚的廠商 | 互聯網大規模數據場景,網絡安全、金融風控、廣告推薦、知識圖譜等 |
支持數據規模 | 社區版十億級 | 百億級以上 | 千億級以上 |
大規模數據寫入性能 | 在線導入速度慢,脫機導入速度較快 | 較慢 | 在線導入速度快,支持覆蓋寫 |
大規模數據查詢性能 | 快 | 較快,性能抖動較嚴重 | 快,較穩定 |
功能完善程度 | 最完善 | 完善 | 完善 |
Feature迭代速度 | 趨於完善,新功能上線較慢 | Fork自Titan,主要提供後端存儲的版本兼容適配,基本很少上線新Feature | 百度自研,2016年項目啓動,開源社區新功能迭代更新快速 |
開放及可擴展性 | 無法擴展 | 可擴展,不過代碼複雜導致難度較大,內置支持4種後端存儲:HBase、Cassandra、Bigtable、Berkeley | 可擴展,插件化機制擴展容易,內置支持6種以上後端存儲:RocksDB、Cassandra、HBase、ScyllaDB、MySQL、PostgreSQL等 |
數據導入工具 | 支持CSV在線導入,速度在1萬/秒內;支持neo4j-import脫機導入,速度在10萬/秒級別,只能用於初始化導入 | 未提供支持 | 支持在線導入,速度在10萬/秒級別,支持格式豐富:CSV、TXT、Json,支持從HDFS導入併兼任其各類壓縮格式,支持從傳統關係型數據庫導入,包括MySQL、Oracle、PostgreSQL、SQL-Server等,支持從消息隊列導入 |
數據備份恢復 | 支持脫機備份與恢復,需停機狀態,商業版支持在線增量備份與脫機恢復 | 未提供支持,需要用戶手動寫程序 | 支持在線遠程備份,支持在線遠程恢復 |
數據增量備份 | 商業版支持,且支持備份數據加密 | 不支持 | 不支持 |
API與客戶端 | 支持HTTP API,支持Java、C#、JS語言版本的Client | 支持HTTP API或WebSocket,支持Java、Python、C#、JS語言版本的Client | 支持HTTP RESTful API,原生僅支持Java語言Client;支持Gremlin API,如果對外暴露Gremlin-Server後可支持Java、Python、C#、JS語言版本的Client |
可視化界面 | 支持,功能豐富 | 不支持,需要用戶集成第三方界面 | 支持,功能豐富,支持可視化的數據建模、導入、分析等 |
內置常用圖算法 | 提供安裝算法包,提供了豐富的基本圖算法,包括路徑搜索、相似性、中心性、社區檢測、鏈接預測等類別的算法 | 不支持 | 內置提供了基本的圖算法,包括路徑搜索、協同推薦、中心性、社區發現等類別的算法 |
支持圖計算平臺集成 | 未提供支持 | 支持Spark GraphX、Giraph等 | 支持Spark GraphX |
基礎功能:屬性圖的增刪該查、持久化存儲、元數據、事務、緩存、查詢優化、增量更新圖 | 支持 | 支持 | 支持 |
ACID事務 | 支持 | 部分支持,根據後端存儲而定,Berkeley後端可完整支持事務,Cassandra後端支持原子性提交事務,HBase後端僅支持單行原子性理解,可能導致多行數之間據不一致 | 部分支持,根據後端存儲而定,MySQL、PostgreSQL後端可完整支持事務,RocksDB、Cassandra後端支持原子性提交事務,HBase後端僅支持單行原子性;保證最終一致性 |
Schema約束 | 商業版支持,包括屬性非空、唯一性等約束,同時也支持Schema-Free | 支持,同時也支持Schema-Free | 支持,包括模式校驗、屬性非空、唯一性等約束,不允許Schema-Free |
屬性索引 | 支持簡單索引和複合索引,支持全文索引,依賴第三方Lucene庫 | 支持複合索引和混合索引,複合索引允許精確匹配查詢,混合索引支持範圍查詢、全文檢索和空間檢索,依賴第三方系統ES或Solr | 支持二級索引、範圍索引、聯合索引、全文索引,允許精確匹配查詢、範圍查詢、全文檢索等,均爲原生實現不依賴第三方系統,不支持空間檢索 |
圖存儲類型 | 本地存儲 | 非本地存儲,支持分佈式存儲 | 非本地存儲,支持分佈式存儲 |
圖分區 | 不支持 | 支持 | 支持 |
超級點問題 | 超級點的鄰接邊查詢慢,十字鏈表存儲結構難以加速部分邊的查詢 | 通過Vertex-Centric索引可緩解 | 通過Vertex-Centric索引可緩解,支持全量獲取數據 |
多圖實例 | 版本4.0支持 | 支持 | 支持 |
主鍵ID、自定義ID | 不支持 | 不支持主鍵ID,有限制的支持自定義Long ID,不過會導致數據不一致 | 支持 |
頂點或邊數據的TTL | 不支持 | 支持,可精細到頂點屬性粒度 | 支持 |
用戶認證與權限控制 | 商業版支持 | 支持用戶認證 | 支持用戶認證、支持基於用戶角色的權限控制 |
高危查詢語句限制 | Cypher無關 | 不支持Gremlin高危語句限制 | 支持,可限制用戶執行高危Gremlin語句,如禁止訪問本地文件、退出進程、打開Socket連接等高危操作 |
運行中語句跟蹤 | 商業版支持,包括:列出正在運行的查詢語句、中斷正在運行的查詢 | 不支持 | 同步Gremlin查詢不支持跟蹤,異步Gremlin查詢支持狀態跟蹤和任務取消 |
LDAP集成 | 商業版支持 | 未提供支持 | 未提供支持,可擴展插件 |
高可用HA | 商業版支持 | 未提供支持 | 商業版支持 |
監控 | 商業版支持 | 支持Metrics監控 | 支持監控接口 |
參考:
-
https://neo4j.com/docs/operations-manual/current/introduction/
-
https://docs.janusgraph.org/
-
https://hugegraph.github.io/hugegraph-doc/