如何作到30分鐘內完成對數十億受衆數據的分析

智能營銷雲(Smart Marketing Cloud,如下簡稱SMC),是TalkingData推出的數字化營銷平臺。依託TalkingData 及合做夥伴所提供的強大數據支撐,提供了一套從人羣構建、客羣洞察,再到同步投放、客觀監測的一體化解決方案,幫助企業構建完整的數字化營銷閉環。算法


1、受衆分析需求及難點

SMC服務多個行業的廣告主和廣告代理,幫助他們對目標受衆人羣進行分析、洞察和觸達。可是因爲SMC聚集了包括一方企業數據、二方媒體數據和TalkingData自有數據在內的多源數據,數據量很是大;此外,爲了對受衆人羣進行全面、深刻的畫像,TalkingData基於人口屬性、移動端行爲偏好等創建了擁有六大類別、800多個標籤的標籤體系,維度很是多。這對數據的處理分析提出了巨大的挑戰。數組

在具體使用中,產品性能是企業很是重視的方面。爲了提高SMC的性能,讓用戶可以快速、準確的實現目標受衆洞察,咱們從技術上對SMC的受衆分析能力進行了三大方面的優化:緩存


2、使用技術原理及方案

Bitmap計算

在SMC中,因爲數據量巨大,咱們對全部廣告主構建的受衆人羣均會使用RoaringBitmap進行存儲。因爲RoaringBitmap只能存儲整型數據,而咱們須要處理的數據量在大多數狀況下高達數十億條,故咱們將RoaringBitmap進行擴展,使之支持長整型數據。bash

原生RoaringBitmap只支持int類型,最大數據存儲量爲2147483647,因爲TalkingData設備數據量約80億,已遠遠超過RoaringBitmap的存儲範圍,因此須要使用長整型來擴展RoaringBitmap。服務器

以 set(long)方法爲例,尋址方法大概以下代碼所示:網絡

public void set(long offset) {    int index = (int) (offset / max());    int value = (int) (offset % max());    bitmaps.get(index).set(value);}複製代碼

擴展以後的RoaringBitmap,已經得到了比較好的存儲和讀取速度。但這還只是開始,隨後還須要對這些人羣數據進行多維度的分析和計算。app

RocksDB加速計算

SMC的受衆分析維度包含:人口屬性維度、設備屬性維度、商旅屬性、App行爲分析等。基於以上維度對某個廣告受衆人羣包進行分析時,須要進行約10萬次Bitmap的交併運算,此時系統CPU和I/O就成了瓶頸。因而咱們採用RocksDB進行Bitmap的緩存,以減小I/O耗時。dom

RocksDB依靠大量靈活的配置,使之能針對不一樣的生產環境進行調優,包括直接使用內存、使用Flash、使用硬盤或者HDFS。支持使用不一樣的壓縮算法,而且有一套完整的工具供生產和調試使用。工具

RocksDB優點以下:性能

  • 爲須要存儲TB級別數據到本地FLASH或者RAM的應用服務器設計

  • 針對存儲在高速設備的中小鍵值進行優化——支持存儲在flash或者直接存儲在內存

  • 性能隨CPU數量線性提高,對多核系統友好

RocksDB支持snappy、zlib、bzip2 lz4和lz4_hc壓縮算法。對不一樣層的數據能夠配置不一樣的壓縮算法。通常來講,90%的數據保存在Lmax層。一個典型的安裝多是L0-L2層不配置壓縮算法,中間層用snappy壓縮算法,而Lmax層採用zlib壓縮。使用RocksDB後,I/O性能顯著提高,原來須要3個小時以上才能計算完成的任務,如今縮短到1.5小時便可計算完畢。

但這個時間仍然太長,讓人沒法忍受,因而咱們想到對系統數據進行抽樣,以加快運算速度。

隨機抽樣算法

隨機抽樣是最爲經常使用的算法之一,它最大的特色是可以經過抽取、計算較小的數據樣本量,來儘量客觀的推斷數據整體特徵。

咱們須要進行隨機抽樣且保持有序,當總設備量爲n,須要隨機挑選出m個設備,其中m < n。輸出是[0 , n-1] 範圍內m個隨機整數的有序列表,不容許重複。從機率的角度說,咱們但願獲得沒有重複的有序選擇,其中每一個選擇出現的機率相等。簡單來講就是從n個數中, 隨機抽取m個數據,並保持有序。

輪流判斷n個數組成的列表中每一個數的機率(m/n),每次判斷後n=n-1,若當前被判斷的數被選擇,則m=m-1,不然 m 不變。

實現方式:

public static Set<Long> random(long n,int m){    Set<Long> set = new TreeSet<Long>();    long remaining = n-1;    for (long i = 0; i<n ;i++){        if (Math.random() * remaining < m){            set.add(i);            m -= 1;        }        remaining -= 1;    }    return set;}複製代碼

咱們使用次方法從總設備量中隨機抽取受衆人羣分析樣本數據並加工成Bitmap。咱們假設另此Bitmap爲A,男性全量數據M,則計算X人羣中的男性佔比P的公式爲:

採用隨機抽樣方式得到的佔比結果仍是會有必定誤差。經對比50組隨機構建的受衆人羣包,對性別佔比進行分析,相對偏差率均未超過8%,在可接受範圍以內。

通過隨機抽樣計算以後,Bitmap數據佔用RocksDB存儲顯著減少,Bitmap計算效率顯著提升,數十億數據量的受衆分析任務可在30分鐘內計算完成。

基於以上這些優化,智能營銷雲能夠快速完成對廣告受衆的分析,讓廣告主在整個廣告投放過程當中及時瞭解本身的目標受衆特色以及分佈狀況,從而指導廣告主及時對廣告投放受衆羣體進行調整。


做者:TalkingData 陳海龍

封面圖來源於網絡,若有侵權,請聯繫刪除

相關文章
相關標籤/搜索