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

引子

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章