你選擇圖資料庫的原因只是因為它很火嗎?
導語:根據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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 你以為工廠模式很簡單,可能是因為你懂的只是冰山的一角模式
- 微服務真的不挑資料庫嗎?如何選擇?微服務資料庫
- oracle資料庫的ACFS圖形介面不可選擇Oracle資料庫
- PostgreSQL:資料庫的選擇SQL資料庫
- 如何為資料庫選擇最佳加密方法資料庫加密
- 如何選擇一款合適的圖資料庫?資料庫
- 因為你這個人,我選擇了這個公司
- 為什麼要選擇分散式資料庫?分散式資料庫
- 哋它亢:最近很火的網路詞
- 常用資料庫選型!你做對了嗎?資料庫
- 你以為共模電感選型只是簡單的選個型號嗎gujing
- Python之所以很搶手,因為它獨具優越性!Python
- 資料庫索引選擇策略資料庫索引
- 銀行資料庫選型需求,你真的清楚嗎?資料庫
- 時間序列化資料庫選型?時序資料庫的選擇?資料庫
- 後分庫分表時代的資料庫新選擇:二維火搭載OceanBase再出發資料庫
- 如何選擇合適的NoSQL資料庫SQL資料庫
- TSBS 是什麼?為什麼時序資料庫 TDengine 會選擇它作為效能對比測試平臺?資料庫
- 你選對儲存結構了嗎?你會玩UVM配置資料庫了嗎?資料庫
- 形似“飛碟”的無人機你見過嗎?它還可以滅火!無人機
- [精選]php 如何使用最近很火的ChatGPTPHPChatGPT
- 聊聊何為圖資料庫和圖資料庫的小知識資料庫
- 你真的會使用資料庫的索引嗎?資料庫索引
- 為什麼越來越多的人選擇RDS建立MySQL資料庫?MySql資料庫
- 你需要託管資料庫嗎?資料庫
- 不懂資料庫索引的底層原理?那是因為你心裡沒點b樹資料庫索引
- 資料庫——慢sql的原因資料庫SQL
- 你能說說你理解的資料庫規範嗎?資料庫
- 低程式碼這麼火,它的人才認證你考了嗎?
- 為什麼說Python適合做大資料處理?原因竟是它!Python大資料
- Flutter 與 Compose 應該怎麼選擇?它們衝突嗎?Flutter
- 你的資料庫真的需要遷移到雲嗎?資料庫
- 年底了,你的資料庫密碼安全嗎資料庫密碼
- 資質平平的你為什麼不選擇小程式代理?
- 還在為影像訓練資料少發愁嗎?那是因為你還不會這幾招
- 學好Python的10種方向,你選擇好了嗎?Python
- 為什麼要選擇學習python?學習python的原因!Python
- 根據開源資料庫選擇合適的工具資料庫