您可以通過Tair(企業版)的TairRoaring資料結構快速搭建高效能的目標使用者篩選服務。
TairRoaring簡介
使用者標籤篩選情境往往應用於個人化推薦、精準營銷等具體業務情境,通過不同的標籤輔以不同的營運營銷,從而實現資源投放方的商業利益最大化。
該類業務通常具備如下特點:
使用者標籤極多,需要較高的儲存空間及良好的擴充能力。
使用者規模大,需按照眾多維度添加標籤,資料分布較為離散。
計算量大,應用會根據不同策略需選取不同標籤的使用者,且對效能、即時性均有較高要求。
Bitmap(又名Bitset)資料結構可以較好地實現以上需求,使用少量的儲存空間來實現海量資料的查詢最佳化。Redis開源版支援Bitmap運算,但是原生Bitmap往往難以應付超大規模的人群打標問題:
原生Bitmap受限於keyspace的大小,對於稀疏情境會出現空間效率急劇降低的情況。
使用string進行Bitmap操作時,很多計算邏輯需要上傳到使用者代碼邏輯中執行,一來一回增加了3次額外的RTT(Round-Trip Time,往返時延)。
原生Redis儲存Bitmap時極易產生大key,會對叢集穩定性帶來極大的挑戰。
Roaring屬於高度工程最佳化的Bitmap實現:
通過2層索引和多種動態容器(Container),平衡了多種情境下效能和空間效率。
使用了包括SIMD instructions、Vectorization、PopCnt演算法等多種工程最佳化,提升了計算效率,實現了高效的時空效率。
基於Tair提供的強大計算效能和極高的穩定性,為使用者情境保駕護航。
相比較原生Bitmap,TairRoaring具有更低的記憶體佔用、更高的集合計算效率,同時依託Tair高效能,提供更低的延遲和更高的吞吐。
目標使用者篩選流程
人群篩選類業務往往包括模型的產生和篩選等多個步驟。
使用者特徵的未經處理資料往往儲存在關係型資料庫中,通過行schema儲存使用者的不同維度特徵。
按需對未經處理資料進行處理,產生使用者UID到人群Tag資訊的映射關係。
定時更新(匯入)使用者UID到標籤資訊的映射關係到TairRoaring引擎中(一般為T+1,表示業務的第二天匯入前一天的資料)。
通過TairRoaring加速業務計算:
查詢目標使用者與人群Tag的關係。
例如,判斷使用者(user1)是否屬於人群Tag-A (編號 16161)。
TR.GETBIT user1 16161
通過
AND
、OR
、DIFF
等操作構造邏輯人群,並對邏輯人群資訊進行計算。例如,擷取同時屬於人群Tag-B和Tag-C的所有目標使用者。
TR.BITOP result AND Tag-B Tag-C
也存在部分從Tag資訊到使用者UID映射關係的情境,如風險控制情境等。
例如,查詢使用者(user1)是否屬於某個人群Tag-A中。
TR.GETBIT Tag-A user1