Nebula Graph 的技術總監在 09.24 - 09.30 期間同開源中國·高手問答的小夥伴們以「圖數據庫的設計和實踐」爲切入點展開討論,包括:「圖數據庫的存儲設計」、「圖數據庫的計算設計」、「圖數據庫的架構設計」等方面內容,本文整理於他和開源中國小夥伴對圖數據庫的討論內容~python
陳恆,開源的分佈式圖數據庫 Nebula Graph 技術總監,圖數據庫領域專家 & HBase Committer。北京郵電大學碩士,曾就任於螞蟻金服、猿題庫、網易等公司,一直從事基礎設施相關研發工做。ios
Stiofan: 圖數據庫打破了關係數據庫的這種古老數據存儲模式,將圖形化特性屬性數據存入,可是關於這些特性化屬性的數據使用圖數據庫和將其轉換爲類型數據放入深度學習框架,兩個之間的關係或者說使用場景應如何來規劃。git
咱們見過一些機器學習使用圖數據庫的 case,最主要的是 feature extraction 階段,使用圖數據庫來拿到當前點相關聯的點的一些屬性做爲 feature,或者產生一些隨機遊走的路徑,使用圖數據庫能夠大大加速整個過程。github
鈦元素: 恆大你好,我對圖數據庫不是很明白,是否能夠這樣理解:它能夠被認爲是 MySQL 中的一種數據庫引擎,具有特殊的查詢功能,以及特殊的數據結構?謝謝。docker
不是特別準確, 圖數據庫是爲了網絡結構的數據(好比社交網絡,資金網絡等)而專門設計的一類數據庫。 這類的數據庫有着本身獨特的數據組織形式, 以及本身獨特的查詢語句。 它並非 MySQL 中的一種存儲引擎, 而是一個獨立的產品,就像 HBase 與 MySQL 的關係同樣。數據庫
其餘用戶補充:你能夠這樣理解,原先這些數據都是用關係數據庫存的,分別爲主體表和關係表,可是在應用使用時查詢性能,好比查 n 度關係。因此爲了提高查詢使用圖數據庫自然符合,節點(主體)和邊(關係),好比說要查 A 的 2 度關係,那麼經過 id 直接 key 匹配到 A,而後再獲取到路徑 <=2 的節點就能夠得到結果。服務器
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 操做及內存消耗。固然,文檔、關係型數據庫和圖數據庫相互可借鑑點仍是很是多的。
Li_Peng : 您好,最近剛開始注意到 Nebula,有 3 個問題想請教一下: 一、Neo4j 社區版的單節點限制問題,目前看 Nebula 應該不存在相似問題,不知道這樣理解是否正確? 二、Nebula 支持類 SQL 查詢,是否有相關 JDBC 驅動可使用?目前看 GitHub上貌似沒有,後期是否會支持? 三、官方文檔 docs.nebula-graph.io/manual-inde… 地址打開有點慢,目前是否有微信或者釘釘羣能夠交流?
- 是的, Nebula 相比於 Neo4j 最大的優點便在於分佈式的設計。
- 目前咱們使用的是 thrift rpc 進行 client 與 server 的通訊。對於JDBC 的支持,若是客戶的需求比較強烈,會考慮提供支持。
- 能夠關注咱們的微信公衆號 NebulaGraphCommunity, 裏面有微信交流羣,能夠添加咱們的小助手進羣:NebulaGraphbot
長眉歐巴: 想問個跨界的問題,貌似目前的數據庫走存算分離的路線,而硬件方面卻走存算一體的路線,好比類腦芯片,參考人類大腦神經系統的功能。神經元是存算一體的(雖然還沒定論,但這更可能)。而圖數據庫的結構天生跟神經系統有殊途同歸之妙,到最後是否是更應該也存算一體?
所謂的存儲計算分離,也沒有說徹底分割,好比說在 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 Graph 能夠安裝在 Win7 64 上嗎?CentOS 的版本有要求嗎?
建議安裝在 Linux 服務器上。若是是 Windows 環境,能夠下載一個 Docker 試用,hub.docker.com/r/vesoft/ne…. CentOS 建議版本是 7.5+
最後是 Nebula 的 GitHub 地址,歡迎你們試用,有什麼問題能夠向咱們提 issue。
GitHub 地址:github.com/vesoft-inc/… ,加入 Nebula Graph 交流羣,請聯繫 Nebula Graph 官方小助手微信號:NebulaGraphbot
Nebula Graph:一個開源的分佈式圖數據庫。
GitHub:github.com/vesoft-inc/…