當前位置:
首頁 > 知識 > 你選擇圖資料庫的原因只是因為它很火嗎

你選擇圖資料庫的原因只是因為它很火嗎

導語:根據DB-Engines的統計,過去三年來,圖資料庫已成為資料庫增長最快的類別。而亞馬遜進入圖資料庫市場將使這種增長加速。更重要的是,這為企業增加了更多的選擇機會,與所有市場一樣,更多的競爭和選擇將帶來更大的市場和更好的產品,最終,受益的是用戶。

你選擇圖資料庫的原因只是因為它很火嗎

現在所有主要的資料庫玩家都已經加入圖形資料庫的行列,市場發展的下一階段將趨於成熟。雖然一些圖形資料庫已經存在十年以上(如:Neo4j),但是今天的大部分圖資料庫產品依然可以說都是全新的。圖資料庫是否引起了你關注?圖資料庫又是否適合你的應用程序?

什麼是圖資料庫?

在研究圖資料庫之前,我們先定義一些術語。什麼是圖資料庫?圖資料庫用圖來存儲數據,是最接近高性能的一種用於存儲數據的數據結構方式之一。

你選擇圖資料庫的原因只是因為它很火嗎

構成一張圖的基本元素是節點(點)和關係(線)。節點和關係都可以設置自己的屬性。節點經常被用於表示一些實體,但依賴關係也一樣可以表示實體。節點之間的關係是圖資料庫很重要的一部分。通過關係可以找到很多關聯的數據,比如節點集合,關係集合以及他們的屬性集合。

相對於關係資料庫中的各種關聯表,圖形資料庫中的關係可以通過關係能夠包含屬性這一功能來提供更為豐富的關係展現方式。

靈活性是推動圖資料庫流行度激增的關鍵因素。在過去10年的時間裡,對可用性和大規模的相同需求推動了各種NoSQL產品的開發和採用,從圖資料庫近期的趨勢中看,這種走勢將繼續走強。

何時需要圖資料庫?

與任何流行的技術一樣,有人可能會將圖資料庫應用於任何類型的問題上。但了解圖資料庫擅長的應用領域依然是非常重要的。例如,圖資料庫通常應用於問題域有:

* 社交網路;

* 推薦和個性化;

* 客戶360,包括實體解析(關聯多個來源的用戶數據);

* 欺詐識別;

* 資產管理;

以上的各個應用領域或許與你的應用程序並不匹配,你也可以從以下因素中確定圖資料庫是否適合你的應用程序:

* 多對多的關係。Martin Kleppmann在《設計數據密集型應用程序》(O"Reilly)一書中提到,如果問題中頻繁的出現多對多關係,建議使用圖表,因為關係資料庫往往難以有效地處理這些關係。

* 高價值的關係。經常聽到的另一個觀點:如果數據元素之間的關係與元素本身一樣重要,甚至比元素本身更重要時,則應考慮使用圖表。

* 大規模的低延遲。在應用程序中添加另一個資料庫也會增加應用程序的複雜性,圖資料庫能夠比其他類型的資料庫更快地處理大型數據集所表示的關係。尤其是在複雜的關係連接查詢不再執行,並且沒有對查詢或關係結構進行額外優化的情況下。

使用Gremlin定義圖表模式和查詢

讓我們從一個真實的例子來開始了解圖資料庫。KillrVideo是一個參考應用程序,用於共享和觀看為幫助開發人員學習使用DataStax Enterprise而製作的視頻,其中包括DataStax Enterprise Graph —— 基於高度可擴展的數據技術(包括Apache Cassandra和Apache Spark)的圖資料庫。

使用Gremlin語言在DataStax Enterprise Graph中描述和交互圖表,也是Apache TinkerPop項目的一部分。由於Gremlin的靈活性、可擴展性以及對聲明式和命令式查詢的支持,被稱為描述圖遍歷的首選語言。Gremlin是基於Groovy語言的。最重要的是,Gremlin得到了DataStax Enterprise Grap等大多數流行圖資料庫的支持,包括DataStax Enterprise Graph、Neo4j、AWS Neptune和Azure Cosmos DB在內。

我們設計了一個推薦演算法來識別作為需要輸入的數據。該方法類似於給特定戶推薦喜愛的視頻。我們的目標是在用戶與KillrVideo應用程序交互時(即作為OLTP交互)實時生成推薦。

為了定義模式,我們確定了由KillrVideo管理的數據的一個子集,這是圖所需要的。包括用戶、視頻、評分和標籤,以及可能在演算法中引用的這些項目的屬性,或者在推薦結果中提供的屬性。然後我們在Gremlin中創建了一個如下所示的圖表模式:

你選擇圖資料庫的原因只是因為它很火嗎

選擇將用戶、視頻和標籤建模為頂點,並使用線來確定哪些用戶上傳了哪些視頻,用戶給視頻的評分以及與每個視頻關聯的標籤。我們將屬性分配給在查詢中引用或包含在結果中的頂點和線上。DataStax Studio是一種用於在CQL和Gremlin中開發和執行查詢的筆記本式開發工具。

基於這個模式,我們定義了將數據填充到圖中的查詢,以及從圖中檢索數據的查詢。以下是生成推薦的圖表查詢基本流程:確定特定的用戶、識別與特定用戶喜歡同一類視頻的類似用戶、選擇類似用戶喜歡的視頻、排除特定用戶已經觀看過的視頻、按照受歡迎程度對這些視頻進行排序,並生成結果。

你選擇圖資料庫的原因只是因為它很火嗎

到目前為止,在這個遍歷中我們已經確定了類似用戶。遍歷的第二部分採用了類似的用戶抓取他們喜歡的一定量的視頻,去除特定用戶已經觀看過的視頻,並生成按受歡迎程度排序的結果集。

你選擇圖資料庫的原因只是因為它很火嗎

雖然這個遍歷看起來很複雜,但這是推薦演算法的整個業務邏輯,在這裡我們就不詳細的介紹這個遍歷過程中的每一步了。

我們建議使用DataStax Studio或Apache TinkerPop的Gremlin控制台等工具,在代表性數據集上互動式地開發遍歷。這使你可以快速迭代並優化遍歷。DataStax Studio是一個基於Web的環境,提供了多種方法來將遍歷結果可視化為節點和邊的網路,如下圖所示。

你選擇圖資料庫的原因只是因為它很火嗎

將圖資料庫合併到架構中

一旦你設計了圖表模式和查詢,就可以將圖表集成到你的應用程序中。以下是我們將DataStax Enterprise Graph集成到KillrVideo中的方法。 KillrVideo的多層架構由一個Web應用程序組成,該應用程序位於一組管理用戶、視頻(包括標籤)和評級的微服務之上。這些服務利用DataStax Enterprise Graph資料庫(基於Apache Cassandra)進行數據存儲,並使用CQL訪問數據。

我們將推薦引擎作為推薦視頻服務的一部分實施,如下所示。此服務將生成一個特定用戶標識的建議列表。為了實現推薦引擎,我們將上述的Gremlin遍歷翻轉換為Java代碼。

你選擇圖資料庫的原因只是因為它很火嗎

這種架構突出了微服務體系結構中的一個常見挑戰 —— 需要與多個服務擁有的數據進行交互。如上所示,用於生成推薦的圖表依賴於用戶管理、視頻目錄和評分服務的數據。

我們通過使用非同步消息來保存現有服務的數據所有權。用戶管理、視頻目錄和評分服務在數據更改上發布事件。推薦的視頻服務訂閱這些事件,並對這些圖表進行相應的更新。

在Java中實現Gremlin遍歷

DataStax Java驅動程序提供了一個友好又流暢的API來實現Gremlin與DataStax Enterprise Graph的遍歷。API能輕易使在DataStax Studio中創建的基於Groovy的查詢轉換為Java代碼。

然後,我們可以通過使用名為DSLs的Gremlin特性(即域名特定語言)來使Java代碼更具可讀性和可維護性。DSL是Gremlin進入特定領域的延伸。對於KillrVideo,我們創建了一個DSL來擴展與視頻域相關的術語的Gremlin遍歷實現。KillrVideoTraversalDsl類定義查詢操作,例如user()(它使用提供的UUID定點陣圖中的頂點)和recommendByUserRating(),它根據參數(例如最低等級和請求推薦量)為用戶生成推薦。

使用DSL將推薦視頻服務的實現簡化為如下的示例,它創建了一個GraphStatement,然後我們使用DataStax Java Driver執行:

你選擇圖資料庫的原因只是因為它很火嗎

使用DSL,可以在可重用函數中隱藏圖表交互的一些複雜性,然後根據需要將它們組合起來形成更複雜的遍歷。這將允許我們額外的推薦引擎,從user()方法提供的特定用戶頂點開始,允許應用程序在不同的實現之間進行交換。

希望通過這篇文章你能了解一些關於圖資料庫對你的應用程序的意義,以及如何使用Gremlin和DataStax Enterprise Graph。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT168企業級 的精彩文章:

H3C Magic攜多款智能家居產品亮相CES2018
手機再也不會砸臉上因為有了神畫影院F1

TAG:IT168企業級 |