華為雲PB級資料庫GaussDB(for Redis)揭秘第13期:如何搞定推薦系統儲存難題
摘要:GaussDB(for Redis)輕鬆搞定推薦系統核心儲存,為企業級應用保駕護航。
本文分享自華為雲社群《》,作者:高斯Redis官方部落格 。
一、推薦偏差引發的思考
七夕過後,筆者的一個朋友遇到了尷尬事:當女友點開他的購物APP,竟然自動彈出一系列推薦:玫瑰包郵、感動哭了、浪漫小夜燈……回想七夕那天,禮物並沒有出現,於是問題出現了:從實招來,你送誰了?
為了幫助友人重建信任,筆者進行了一番技術調研:這一定是“推薦系統”出了偏差。
推薦系統是一種資訊過濾系統,它能夠快速分析海量使用者行為資料,預測出使用者喜好,從而進行有效推薦。在商品推薦、廣告投放等業務中,推薦系統責任重大。根據亞馬遜2019年度報告,其40%的營收來自內部穩定的推薦系統。
在本文開篇的例子中,正是由於推薦系統問題,才導致了尷尬的場面。筆者決定力挺友人,用可靠的知識讓人信服!
二、推薦系統長什麼樣
通常來說,在一套成熟的推薦系統中,分散式計算、特徵儲存、推薦演算法是關鍵的三大環節,缺一不可。
下面介紹一類完整的推薦系統,在系統中GaussDB(for Redis)負責核心的特徵資料儲存。該系統也是華為雲諸多客戶案例中較為成熟的最佳實踐之一。
第一部分:獲取特徵資料
- 原始資料採集
點贊、收藏、評論、購買……這些行為都屬於原始資料,他們隨時都在發生,因此資料量龐大。經由Kafka、Redis Stream等流元件向下遊傳遞,或存入數倉,等待後期提取使用。
- 分散式計算
原始資料離散、含義模糊,無法直接給演算法使用。此時就要進行大規模的離線、線上計算,對資料加工。Spark、Flink都是典型的大資料計算元件,其強大的分散式計算能力是推薦系統不可或缺的。
- 特徵資料儲存
經過加工的資料也就是特徵、標籤,是推薦演算法所需的寶貴資料來源。在特定場景下,也可以稱之為使用者畫像、物品畫像。這部分資料有著反覆共享、複用的價值,不僅能用於訓練演算法模型,還能為生產環境提供服務。
確保特徵資料的可靠儲存,是推薦系統中極為關鍵的一環。
第二部分:消費特徵資料
- 線下模型訓練
有了關鍵的特徵資料,業務就可以開始訓練演算法模型。只有充分利用特徵庫,以及最新行為資料,不斷打磨推薦演算法,這樣才能提升推薦系統整體水平,最終帶給使用者更好的體驗。
- 線上推理預測
演算法模型訓練結束後,將被部署到線上生產環境。它將繼續利用已有的特徵儲存,根據使用者的實時行為進行推理,快速預測出與使用者最匹配的優質內容,形成推薦列表,並推送給終端使用者。
三、推薦系統的儲存難題
很顯然, “特徵資料”在整個系統中起到了關鍵的銜接作用。由於KV形式的資料抽象與特徵資料極為接近,因此推薦系統裡往往少不了Redis的身影。
在上述系統的方案中,資料庫選型為GaussDB(for Redis),而不是開源Redis。原因是開源Redis在大資料場景下還是存在顯而易見的痛點:
1. 資料無法可靠儲存
推薦系統其實希望既能使用KV資料庫,又能放心將資料長久儲存。但開源Redis的能力更側重於資料的快取加速,而不是資料儲存。而且開源Redis畢竟是純記憶體設計,即使有AOF持久化,但通常也只能秒級落盤,資料的儲存並不可靠。
2. 資料量上不去,成本下不來
涉及推薦的業務往往使用者體量也不會小,隨著業務發展,也會有更多的特徵資料需要儲存。實際上,相同容量的記憶體與極速SSD相比,價格貴10倍以上都很正常。於是,當資料量達到幾十GB、幾百GB,開源Redis會變得越來越“燒錢”,因此一般只當做“小”快取使用。除此之外,開源Redis自身fork問題導致容量利用率低,硬體資源有很大的浪費。
3. 灌庫表現不佳
特徵資料需要定期更新,往往以小時或天為週期進行大規模資料灌入任務。如果儲存元件不夠“皮實”,大量寫入造成資料庫故障,將導致整個推薦系統發生異常。這就可能造成開篇提到的尷尬使用者體驗。
開源Redis抗寫能力並不強,這是由於叢集中有一半節點是備節點,它們只能處理讀請求。當大批次寫入到來時,主節點容易出問題,引發連鎖反應。
理論上,架構設計並不是越複雜越好,如果可以,誰不想使用一種既能兼顧特徵資料KV型別、成本友好、效能又有保障的可靠資料儲存引擎?
四、相見恨晚,遇見GaussDB(for Redis)
與開源Redis不同,GaussDB (for Redis)基於存算分離架構,為推薦系統這一類大資料場景帶來關鍵的技術價值:
1. 可靠儲存
資料命令級落盤,在底層儲存池中三副本冗餘儲存,真正做到了0丟失。
2. 降本增效
高效能持久化技術+細粒度儲存池,幫助企業將資料庫使用成本降低75%以上。
3. 抗寫能力強
多執行緒設計+全部節點可寫,抗寫能力足夠強大,從容應對Spark灌庫壓力和實時更新。華為雲企業級資料庫GaussDB (for Redis)提供穩定、可靠的KV儲存能力,正是推薦系統核心資料的極佳選型。
五、完美銜接,實現想存就存的自由
其實,在Spark後端接入Redis已經成為一種主流方案,而使用Flink從Redis中提取維度表也是很常見的用法。它們也都提供了用於接入Redis的聯結器。GaussDB(for Redis)完全相容Redis協議,即開即用,使用者隨時都可以快速建立例項並接入業務。
1. Spark-Redis-Connector
Spark-Redis-Connector完美實現了Spark RDD、DataFrame到GaussDB(for Redis)例項中String、Hash、List、Set等結構的對映。使用者可使用熟悉的Spark SQL語法輕鬆訪問GaussDB(for Redis),完成特徵資料灌庫、更新、提取等關鍵任務。
使用方法非常簡單:
1)當需要讀取Hash、List、Set結構到Spark RDD時,分別只用一行即可搞定:
2)而當推薦系統進行灌庫或特徵資料更新時,可以按如下方式輕鬆完成寫入:
2. Flink-Redis-Connector
Flink這款計算引擎流行程度不亞於Spark,它同樣有成熟的Redis連線方案。使用Flink提供的Connector或結合Jedis客戶端,都可輕鬆完成Flink到Redis的讀寫操作。
以使用Flink統計單詞頻次的簡單場景為例,資料來源經過Flink加工後,便可輕鬆存入GaussDB(for Redis)中。
六、結語
大資料應用對核心資料的儲存有著很高的要求,雲資料庫GaussDB(for Redis)擁有存算分離的雲原生架構,在完全相容Redis協議的基礎上,同時做到了穩定性、可靠性的全面領先。面對海量核心資料儲存,它還能為企業帶來相當可觀的成本節約。面向未來,GaussDB(for Redis)極有潛力成為下一個大資料浪潮的新星。
七、附錄
本文作者:華為雲資料庫GuassDB(for Redis)團隊
杭州/西安/深圳簡歷投遞:yuwenlong4@huawei.com
GuassDB(for Redis)產品主頁:https://www.huaweicloud.com/product/gaussdbforredis.html
更多技術文章,關注高斯Redis官方部落格:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3407/viewspace-2795881/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 華為雲PB級資料庫GaussDB(for Redis)揭祕第七期:高斯Redis與強一致資料庫Redis
- 華為雲PB級資料庫GaussDB(for Redis)揭祕第八期:用高斯 Redis 進行計數資料庫Redis
- 資料上雲,我推薦華為雲資料庫!資料庫
- 華為雲資料庫核心專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?資料庫MySql並行
- 儲存與資料庫系統資料庫
- 資料庫週刊39丨華為雲GaussDB(for Redis)首發;國產資料庫有獎徵文活動開啟……資料庫Redis
- 自建資料庫太麻煩?華為雲資料庫GaussDB既省心又省力資料庫
- 華為周躍峰:揭秘“關於GaussDB資料庫的五大謊言”資料庫
- 華為雲物件儲存服務OBS教你一招輕鬆解決儲存難題物件
- Python 如何連線並操作 AWS 上 PB 級雲資料倉儲 RedshiftPython
- 華為雲GaussDB NoSQL雲原生多模資料庫的超融合實踐SQL資料庫
- 搞定 Redis 資料儲存原理,別隻會 set、get 了Redis
- 華為雲企業級資料倉儲DWS
- 電影推薦系統的圖片雲存
- 【推薦系統篇】--推薦系統之測試資料
- 檔案系統儲存與oracle資料庫儲存對比Oracle資料庫
- 華為雲資料庫GaussDB (for Cassandra) 資料庫治理 -- 大key與熱key問題的檢測與解決資料庫
- PB級資料持久化快取系統——lest持久化快取
- 阿里雲資料庫Redis正式上線Tair持久儲存系列阿里資料庫RedisAI
- 【雲棲直播】精彩推薦第1期:資料庫上雲經典案例分析資料庫
- 儲存系統實現-如何刪除資料
- 分散式系統技術:儲存之資料庫分散式資料庫
- [資料庫系統]儲存和檔案結構資料庫
- 資料庫系統概念 第4章 中級SQL資料庫SQL
- 華為GaussDB資料庫之Yukon安裝與使用資料庫
- GaussDB OLTP 雲資料庫配套工具DAS資料庫
- 華為雲UGO:醒醒!你的異構資料庫遷移難題有救了Go資料庫
- #第9篇分享:python資料儲存-MySQL資料庫PythonMySql資料庫
- 海量非結構化資料儲存難題 ,杉巖資料物件儲存完美解決物件
- 華為雲物件儲存OBS,助力企業高效解決儲存問題物件
- 【Redis】redis各型別資料儲存分析Redis型別
- 第9章 資料儲存
- 推薦五款最常見的雲資料庫資料庫
- MySQL如何實現萬億級資料儲存?MySql
- 自研資料庫CynosDB儲存系統如何實現即時恢復資料庫
- 第1章 好的推薦系統
- [開源] .Net 使用 ORM 訪問 華為GaussDB資料庫ORM資料庫
- 億級流量系統架構之如何支撐百億級資料的儲存與計算架構