Nebula Graph 技術總監陳恆:圖資料庫怎麼和深度學習框架進行結合?

  • 2019 年 10 月 10 日
  • 筆記

引子

Nebula Graph 的技術總監在 09.24 – 09.30 期間同開源中國·高手問答的小夥伴們以「圖資料庫的設計和實踐」為切入點展開討論,包括:「圖資料庫的存儲設計」、「圖資料庫的計算設計」、「圖資料庫的架構設計」等方面內容,本文整理於他和開源中國小夥伴對圖資料庫的討論內容~

嘉賓·陳恆介紹

陳恆,開源的分散式圖資料庫 Nebula Graph 技術總監,圖資料庫領域專家 & HBase Committer。北京郵電大學碩士,曾就職於螞蟻金服、猿題庫、網易等公司,一直從事基礎設施相關研發工作。

本文目錄

  • 圖資料庫怎麼和深度學習框架進行結合?
  • 圖資料庫它可以被認為是 MySQL 中的一種資料庫引擎,具備特殊的查詢功能,以及特殊的數據結構?
  • Nebula 和 Neo4j 的圖資料庫的優勢和劣勢?為何要新開發使用 Nebula ?
  • 圖資料庫目前主要用於哪些應用場景?
  • 圖資料庫和一般資料庫結構相比,優勢在哪裡?
  • Nebula 的實踐問題
  • 存儲計算分離
  • Nebula 高度可擴展具體指的是什麼?存儲層是否還支援其他類型的資料庫?
  • 「圖資料庫」是基於已有資料庫衍生出來的產品嗎?如何設計圖資料庫?
  • 圖資料庫為何沒有通用的圖查詢語言?
  • 圖資料庫適合存儲什麼類型數據,比如樹形目錄?
  • Nebula 的部署安裝配置要求是什麼?

圖資料庫怎麼和深度學習框架進行結合?

Stiofan:
圖資料庫打破了關係資料庫的這種古老數據存儲模式,將圖形化特性屬性數據存入,但是關於這些特性化屬性的數據使用圖資料庫和將其轉換為類型數據放入深度學習框架,兩個之間的關係或者說使用場景應如何來規劃。

我們見過一些機器學習使用圖資料庫的 case,最主要的是 feature extraction 階段,使用圖資料庫來拿到當前點相關聯的點的一些屬性作為 feature,或者產生一些隨機遊走的路徑,使用圖資料庫可以大大加速整個過程。

圖資料庫它可以被認為是 MySQL 中的一種資料庫引擎,具備特殊的查詢功能,以及特殊的數據結構?

鈦元素:
恆大你好,我對圖資料庫不是很明白,是否可以這樣理解:它可以被認為是 MySQL 中的一種資料庫引擎,具備特殊的查詢功能,以及特殊的數據結構?謝謝。

不是特別準確, 圖資料庫是為了網路結構的數據(比如社交網路,資金網路等)而專門設計的一類資料庫。 這類的資料庫有著自己獨特的數據組織形式, 以及自己獨特的查詢語句。 它並不是 MySQL 中的一種存儲引擎, 而是一個獨立的產品,就像 HBase 與 MySQL 的關係一樣。

開源中國·sixliu 小夥伴補充:你可以這樣理解,原先這些數據都是用關係資料庫存的,分別為主體表和關係表,但是在應用使用時查詢性能,比如查 n 度關係。所以為了提升查詢使用圖資料庫天然符合,節點(主體)和邊(關係),比如說要查 A 的 2 度關係,那麼通過 id 直接 key 匹配到 A,然後再獲取到路徑 <=2 的節點就可以獲得結果。

Nebula 和 Neo4j 的圖資料庫的優勢和劣勢?為何要新開發使用 Nebula ?

5G加ios:
Nebula 和 Neo4j 的圖資料庫的優勢和劣勢? 為何要新開發使用 Nebula ??

Neo4j 是目前市面上知名度最高的圖資料庫, 是一款非常優秀的產品。 但是開源的 Neo4j 最大的問題在於它是一款單機資料庫, 擴展能力存在比較大的問題。 Nebula 是在互聯網公司的長期實踐中誕生的一款產品, 相比於Neo4j, Nebula 最大的特色便是分散式的架構,擴展性要好很多。

圖資料庫目前主要用於哪些應用場景?

crf1111:
你好,最近在開發分散式任務處理系統,使用到了有向無環圖(DAG)的概念。請問,圖資料庫目前主要用於哪些應用場景。
對於Nebula,目前提供了幾種 client 庫,是否能兼容 python-networkx 中的 Graph 對象?

圖資料庫主要應用於網路結構數據的存儲與查詢, 比如在社交關係中, 查找一個人的 N 度好友(可以帶一些過濾條件),用傳統的關係資料庫來搞,不僅性能不能滿足要求, 還會使用很複雜的 SQL 描述, 對於用戶十分不友好。 而在圖資料庫中,這樣的查詢就是一條語句而已。
當前 Nebula 提供了 Go / Java / C++ / Python 的 client,對於其他語言可以直接使用 thrift 生成相應的介面。而我們的 Python client 能鏈接 Nebula Graph,執行相應的 nGQL 語句,暫時不支援 python-networkx 中的 Graph 對象。

圖資料庫和一般資料庫結構相比,優勢在哪裡?

KelvinQ :
請問圖資料庫和一般資料庫結構相比,優勢在哪裡?

Everything is connected. 圖資料庫天生適合表達 connection,或者說多對多的關係。 圖資料庫可以很高效的查詢幾度關係,而傳統關係型資料庫不擅長,一般都需要做表連接,表連接是一個很昂貴的操作,涉及到大量的 IO 操作及記憶體消耗。當然,文檔、關係型資料庫和圖資料庫相互可借鑒點還是非常多的。

Nebula 的實踐問題

Li_Peng :
您好,最近剛開始注意到 Nebula,有 3 個問題想請教一下:
1、Neo4j 社區版的單節點限制問題,目前看 Nebula 應該不存在類似問題,不知道這樣理解是否正確?
2、Nebula 支援類 SQL 查詢,是否有相關 JDBC 驅動可以使用?目前看 GitHub上貌似沒有,後期是否會支援?
3、官方文檔 https://docs.nebula-graph.io/manual-index/ 地址打開有點慢,目前是否有微信或者釘釘群可以交流?

  1. 是的, Nebula 相比於 Neo4j 最大的優勢便在於分散式的設計。
  2. 目前我們使用的是 thrift rpc 進行 client 與 server 的通訊。對於JDBC 的支援,如果客戶的需求比較強烈,會考慮提供支援。
  3. 可以關注我們的微信公眾號 NebulaGraphCommunity, 裡面有微信交流群,可以添加我們的小助手進群:NebulaGraphbot

存儲計算分離

長眉歐巴:
想問個跨界的問題,貌似目前的資料庫走存算分離的路線,而硬體方面卻走存算一體的路線,比如類腦晶片,參考人類大腦神經系統的功能。神經元是存算一體的(雖然還沒定論,但這更可能)。而圖資料庫的結構天生跟神經系統有異曲同工之妙,到最後是不是更應該也存算一體?

所謂的存儲計算分離,也沒有說完全分割,比如說在 Nebula 裡面,很多的計算其實是在存儲層完成的,也就是所謂的計算下推。
之所以採用存儲計算分離的架構,主要是為了擴展性和上雲的考慮。

開源中國·sixliu 小夥伴補充:可以把它理解成之前 存儲過程完成複雜邏輯->應用層完成邏輯。主要就是為了滿足高容錯和可擴展。存儲層只要提供高度抽象的謂詞下推即可。

Nebula 高度可擴展具體指的是什麼?存儲層是否還支援其他類型的資料庫?

myw31415926:
陳大,您好。Nebula 的高度可擴展包含哪些,能說明一下嗎?存儲層是否還支援其他類型的資料庫,如 Oracle 和 PostgreSQL?多謝

Nebula 採用了存儲計算分離的架構,對於計算層,因為是無狀態服務,可以隨意擴容。對於存儲層, 我們提供了擴容相關的運維語句,可以比較簡單的擴容。存儲層支援 storage plugin, 目前已經有 HBase 的 plugin,其他的 plugin 也可以根據需求來支援。但是我們並不推薦在關係型資料庫上使用圖資料庫,因為這樣的效率會非常低,擴展起來也會很麻煩。

「圖資料庫」是基於已有資料庫衍生出來的產品嗎?如何設計圖資料庫?

海參拉麵:
老師,圖資料庫是基於現在已有的資料庫產品衍生出來的嗎?怎麼設計呢?

圖這種關聯關係和相應的需求其實很早很早就有了,只是各種技術上的原因。
以前大家只能用關係型資料庫來存儲,但是這樣需要使用者把關聯關係適配成表結構,並不直觀,所以圖資料庫也是這樣發展出來的。
關於怎麼設計,其實參考了很多 SQL,NoSQL 和各種分散式系統的工程實現,歡迎閱讀 Nebula 的系列技術文章

圖資料庫為何沒有通用的圖查詢語言?

JIANGGuo:
你好,請問圖資料庫作為 NoSQL 中的一類,底層都是圖數據結構來存儲的,為什麼沒有通用的圖查詢語言呢,Nebula Graph 用 nGQL,Neo4j 用 Cypher ?謝謝。

很好的問題。
我覺得最大的原因是圖資料庫比較新,各家的產品應對的場景也不盡相同,所以到現在也沒有產生統一的圖查詢語言。

圖資料庫適合存儲什麼類型數據,比如樹形目錄?

荒野刀客:
圖資料庫是否適合存儲樹形的數據,比如樹形目錄?  Nebula 和 Neo4j 相比,語法是否兼容,是否容易切換?

數據結構上來說,樹是圖的子集。只是單純樹的業務場景不多,我碰到過的樹的場景主要是數據倉庫裡面的數據血緣。
Nebula 語法上和 Neo4j 接近,但並不兼容。我們設計時語法更接近 SQL,你可以下個Docker 試試,我覺得花個 15 分鐘,應該能熟悉語法了。

Nebula 的部署安裝配置要求是什麼?

圖資料庫貓:
資料庫 Nebula Graph 可以安裝在 Win7 64 上嗎?CentOS 的版本有要求嗎?

建議安裝在 Linux 伺服器上。如果是 Windows 環境,可以下載一個 Docker 試用,https://hub.docker.com/r/vesoft/nebula-graph. CentOS 建議版本是 7.5+

附錄

最後是 Nebula 的 GitHub 地址,歡迎大家試用,有什麼問題可以向我們提 issue。

GitHub 地址:https://github.com/vesoft-inc/nebula ,加入 Nebula Graph 交流群,請聯繫 Nebula Graph 官方小助手微訊號:NebulaGraphbot

Nebula Graph:一個開源的分散式圖資料庫。

GitHub:https://github.com/vesoft-inc/nebula

知乎:https://www.zhihu.com/org/nebulagraph/posts

微博:https://weibo.com/nebulagraph