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

老魚筆記發表於2018-05-07

導語:根據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。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11310314/viewspace-2154079/,如需轉載,請註明出處,否則將追究法律責任。

相關文章