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

NebulaGraph發表於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

更多原創文章乾貨分享,請關注公眾號
  • Nebula Graph 技術總監陳恆:圖資料庫怎麼和深度學習框架進行結合?
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章