在大數據處理和應用場景中經常需要從億級甚至十億級會員中搜索出符合特定標籤的會員.很多企業都會使用 HBase 或者 Hive + Hadoop 的方式,這樣的方式查詢效率非常慢,在標籤非常多的情況下計算,更是讓人無法忍受.這裡我們介紹一種 Greenplum + Roaringbitmap 的組合使用方案,億級甚至十億級會員萬級標籤的條件下查詢毫秒級出結果.

業務系統場景圖:

數據從業務系統經過處理後流進OLAP分析平臺,OLAP 平臺的底層支持就是使用Greenplum + Roaringbitmap。 Greenplum 是一個分散式大數據平臺資料庫,基於MPP架構的模式來達到快速分析效果的. 關於 Greenplum 的官方介紹:

About the Greenplum Architecture

Roaringbitmap 是壓縮的bitmap的一種實現,參考文檔:RoaringBitmap/RoaringBitmap

具體實現參照如下步驟:

實驗硬體配置

Master 1 臺,

Segment Host 2 臺, 3 Segments 每臺Host

CPU: 2.40GHz 32 cores

Memory:128G

Disk: SATA 1T

用戶表schema:

用戶表

用戶標籤表schema:

用戶標籤表

2 億會員數據導入GP,耗時60s

2億會員數據導入,耗時 60 s

GP 分區影響: 分區後查詢效率提升 5-10 倍.

分區後性能提升 5-10倍

創建用戶標籤表:

創建用戶標籤表

初始化標籤:耗時分鐘級別.

初始化標籤,耗時分鐘級別

查詢效率:

對會員表使用 count 查詢,耗時 8 s ,使用 Roaringbitmap 查詢,耗時 100 毫秒

使用count查詢和bitmap查詢對比

佔用空間:平均一個標籤包含客戶數500萬, 佔用空間12M ,10萬標籤總存儲空間 10M * 12M = 120G

存儲空間預估

關於存儲空間,將2億會員全部設定為一個標籤,查詢該標籤後,存儲需要25M左右.

感謝阿里德哥,Talkingdata的Zeromax 提供的文檔和源代碼.

該實現是基於以上兩位給出的方案和源代碼修改而來,如果完全照搬digoal/blog這裡提的方案,在聚合查詢時,Greenplum會有一些問題.

參考文檔:

digoal/blog

zeromax007/gpdb-roaringbitmap

Greenplum 中文社區: Greenplum QQ 交流羣:99194625


推薦閱讀:
相關文章