11 月 2 號 - 11 月 3 號,以「大愛無疆,開源無界」爲主題的 2019 中國開源年會(COSCon'19)正式啓動,大會以開源治理、國際接軌、社區發展和開源項目爲切入點同全球開源愛好者們共同交流開源。git
做爲圖數據庫技術的表明,Nebula Graph 總監——吳敏在本次大會上將會講述了大規模分佈式圖數據庫設計思考和實踐。在信息爆發式增加和內容平臺遍地開花的信息時代,圖數據庫在當中扮演了什麼樣的角色?同傳統數據庫相比,圖數據庫又有什麼優點?圖數據庫開發須要哪些新技術?就此,開源社特訪吳敏來分享下圖數據庫主題內容,從圖數據 Nebula 的研發開始,就傳統數據庫面臨的挑戰,開源模式的優點,Nebula 的社區開展和產品規劃等問題進行深刻解析。程序員
你們好,我是吳敏,VEsoft 總監,博士畢業於浙江大學。 曾就任於阿里雲、螞蟻金服,從事分佈式圖數據庫以及雲存儲相關工做。github
隨着抖音、小紅書等社交內容平臺的爆紅誕生了一種基於社交關係網路的推薦需求,而以垂直領域做爲切入點的知識圖譜過去兩年的「爆火」,傳統數據庫在處理社交推薦、風控、知識圖譜方面的性能缺陷,圖數據庫的研發應運而生。算法
本演講開篇將陳述圖數據庫行業現狀,讓你對圖數據庫存儲的數據及對場景有所瞭解,再從開源的分佈式圖數據庫 Nebula Graph 切入深度講解大規模分佈式圖數據庫應該如何設計存儲、計算及架構,最後講述開源對圖數據庫開發的影響。數據庫
內容大綱後端
對圖數據庫有興趣,或是有推薦、風控、知識圖譜等業務場景需求的人。微信
Nebula 是星雲的意思,很大嘛,也是漫威宇宙裏面漂亮的星雲小姐姐。對了,Nebula的發音是:[ˈnɛbjələ]網絡
OceanBase、TiDB 這類 NewSQL 最近發展勢頭很強勁,他們的出現更多的是對傳統單機的關係型數據庫在可用性的補充。
Nebula 聚焦在圖數據庫這一領域,也是近年來在數據庫各分支中增加最爲快速的領域。圖數據庫使用圖(或者網)的方式很直接、天然的表達現實世界的關係: 用節點來表示實體,邊來表示關聯關係,everything is connected。能高效的提供圖檢索,提供專業的分析算法、工具,好比 ShortestPath、PageRank、標籤傳播等等。數據結構
典型的應用場景有社交網絡,金融風控,推薦引擎,知識圖譜等。架構
社交網絡,好比,推薦一條最短路徑讓我結識迪納熱巴,還能夠加上篩選條件,路徑中的每一個人都是單身女性。
金融風控場景,好比,去查一個信用卡反套現的網絡。很典型的一個場景,A 轉帳到 B,B 轉帳到 C,C 又轉回給 A 便是一個典型的閉環。對於這樣的閉環,這類查詢在圖數據庫大規模應用以前,大部分都是採用離線計算的方式去查找,可是離線場景很難去控制當前發生的這筆交易。一個信用卡交易或者在線貸款,整個做業流程很長,而在反套現這塊的審覈時間又限制在毫秒級,這就是圖數據庫很是大的一個應用場景。
在推薦算法中,爲某我的推薦他的好友。如今的方案是去找好友的好友,判斷好友的好友有沒有可能成爲某人的新好友,這當中涉及好友關係的親密度,抵達好友的好友的最短路徑等。業務方可能會用 MySQL 等傳統數據庫或是 HBase 來存各種好友關係,而後經過多個串行的 Key-Value 來作查詢,但這在線上場景是很難知足性能要求的。
知識圖譜這些年很是火,知識圖譜結合天然語言的形式在金融,醫療,互聯網等衆多領域被普遍使用,常見的有語音助手、聊天機器人、智能問答等應用場景。而圖數據庫存儲的數據結構徹底適配知識圖譜數據,圖譜中的實體對應圖數據庫的點,實體與實體的關係對應圖數據庫的邊,拿 Nebula 爲例,Nebula Graph Schema 採用屬性圖,點邊上的屬性對應圖譜實體和關係中的屬性,邊的方向表示了關係的方向,邊上的標記表示了關係的類型。
再說到最近國內很是火的區塊鏈場景,因爲區塊鏈上的全部行爲都是公開被記錄的又是不可篡改的,所以全部的交易行爲,無論是歷史數據,仍是大概每幾分鐘產生的新 block,均可以對 DAT 文件解析後導入到圖數據庫和 GNN 中作分析。例如咱們都據說在一些數字貨幣場景下,洗錢、盜竊、團伙、操縱市場的各種事情不少,經過圖的手段包括能夠幫助咱們挖掘裏面的非法行爲。
Nebula 是徹底自主研發的數據庫,它主要有如下的技術特色
存儲計算分離
對於 Nebula Graph 來說,有這麼幾個技術特色:第一個就是採用了存儲計算分離的架構,主要好處就是爲了上雲或者說彈性,方便單獨擴容。業務水位老是很難預測的,一段時間存儲不夠了,有些時候計算不夠了。在雲上或者使用容器技術,計算存儲分離的架構運維起來會比較方便,成本也更好控制。你們使用 HBase 那麼久,這方面的感觸確定不少。
查詢語言 nGQL
Nebula Graph 的第二個技術特色是它的查詢語言,咱們稱爲 nGQL,比較接近 SQL。惟一大一點的語法差別就是 不用嵌套 (embedding)。你們都知道嵌套的 SQL,讀起來是很是痛苦的,要從裏向外讀。另外,因爲圖這塊目前並無統一的國際標準,這對整個行業的發展並非好事,用戶的學習成本很高。目前有個 ISO / IEC 組織在準備圖語言的國際標準,咱們也在積極兼容標準。
支持多種後端存儲
第三個特色就是 Nebula Graph 支持多種後端存儲,除了原生的引擎外,也支持 HBase。
由於不少用戶,對 HBase 已經至關熟悉了,並不但願多一套存儲架構。從架構上來講,Nebula Graph 是徹底對等的分佈式系統。
計算下推
和 HBase 的 CoProcessor 同樣,Nebula Graph 支持數據計算下推。數據過濾,包括一些簡單的聚合運算,可以在存儲層就作掉,這樣對於性能來說能提高會很是大。
多租戶
多租戶,Nebula Graph是經過多 Space 來實現的。Space 是物理隔離。
索引
除了圖查詢外,還有很常見的一種場景是全局的屬性查詢。這個和 MySQL 同樣,要提高性能的主要辦法是爲屬性創建索引 ,這個也是 Nebula Graph 原生支持的功能。
圖算法
最後的技術特色就是關於圖算法方面。
這裏的算法和全圖計算不太同樣,更可能是一個子圖的計算,好比最短路徑。你們知道數據庫一般有 OLTP 和 OLAP 兩種差別很大的場景,固然如今有不少 HTAP 方面的努力。那對於圖數據庫來講也是相似,咱們在設計 Nebula Graph 的時候,作了一些權衡。咱們認爲全圖的計算,好比 Page Rank,LPA,它的技術挑戰和 OLTP 的挑戰和對應的設計相差很大。因此 Nebula 的查詢引擎主要針對 OLTP 類的場景。
那麼,對於 OLAP 類的計算需求,咱們的考慮是經過支持和 Spark 的相互訪問,來支持 Spark 上圖計算,好比 graphX。這塊工做正在開發中,應該在最近一兩個月會發布。
存儲計算分離是個很熱的話題。咱們將存儲模塊和 Query Engine 層分開主要有如下考慮。
咱們使用 Raft 協議,Raft 一致性協議使得 share-nothing 的 kv 有一致性保障。爲何選擇 Raft?相對於 Paxos,Raft 更加有利於工程化實現。Nebula 存儲層 Raft 使用 Multi-Raft 的模型,多個 replica 上的同一個 partition 組成一個 Raft 組,同一個集羣內存在互相獨立 Raft 組,在一致性保障的同時,提升了系統的併發能力。
Nebula 在數據優化方面主要作了如下工做:
Nebula 有 CSV、HDFS 批量 數據導入工具。用戶能夠將數倉的數據導入到 Nebula。也提供 C++,Java,Golang,Python 的客戶端。另外對於市面上已有的一些產品,如今也正在開發將它的數據格式直接解析爲 Nebula 的數據格式,這樣就能夠很是方便的遷移,包括查詢語言層面的兼容。
存儲層 share-nothing
的架構,理論上支持無限加機器。
目前實現較爲簡單,基於雙向搜索,返回點邊組合的路徑。將來規劃是計劃在執行計劃與優化器都完成後,完善對路徑的支持,包括實現 match,支持雙向 bfs、雙向 dijkstra、allpair(全路徑),kshortest 等。固然咱們歡迎社區的同窗們都參與完善 Nebula 的路徑算法。
對於剛開始使用圖數據庫的用戶,咱們提供了詳細的文檔;
對於已經在使用其餘圖數據庫,想要試試 Nebula 的用戶,咱們提供了數據導入等工具,有疑問或者任何問題,歡迎在 GitHub 上給咱們提 issue,咱們的工程師會在第一時間爲您解答。
若是沒 Linux,如今互聯網的格局也不會是今天這樣。咱們想要創建圖數據庫的社區,作出更好的圖數據庫產品,也但願更多對 Nebula,對圖數據庫感興趣的同窗成爲社區的貢獻者,一塊兒努力,共同創建一個互助互利的社區。
不少人都想爲開源作一份力,但會被開源項目的門檻「勸退」,尤爲是 Nebula 是一個即便耕耘在數據庫領域多年的數據庫專家,若是對圖數據庫的不夠了解的話,都會感嘆「高大上」的一個項目。但技術是爲業務服務的,因此 Nebula 力求本身的文檔讓你即便你對圖數據庫一無所知,經過 Nebula 的文檔也可以瞭解到圖數據庫及其應用場景。
開源項目最重要的是生態的搭建,Nebula Graph 剛開源半年在社區搭建這塊只能說略有心得,僅供你們參考 :) 開源社區運營主要從下面幾個方面展開
最後,打個小廣告:歡迎你們來參與到 Nebula 的建設中,爲開源貢獻一份力 :)
多看看論文,看看開源分佈式系統的設計以及源代碼;多關注數據庫的的會議,好比,SIGMOD, VLDB,關注學術界的最新成果;多關注業界相關公司的發展和動態,好比 OsceanBase,TiDB。
以上爲開源社對圖數據庫 Nebula 總監——吳敏的採訪,歡迎你關注 Nebula GitHub:github.com/vesoft-inc/nebula 瞭解 Nebula 最新動態或添加 Nebula 小助手爲好友進圖數據庫技術交流羣交流,小助手微信號:NebulaGraphbot