使用關係型資料庫分塊處理幾億幾十億條資料

2021-08-10 13:48:46 字數 981 閱讀 9631

分塊計算是將資料按一定的規則切割成若干份,然後分別計算,再將結果合併彙總得到最終結果。

經常統計時會涉及到一次要對幾千萬甚至幾十億的資料進行聚合計算

(或表關聯

),因為硬體本身的限制(特別是沒有足夠大的記憶體和臨時表空間),往往顯得無能為力。這時如果不人為去將資料進行分割計算(或關聯),系統將會陷入異常緩慢的計算過程甚至因臨時表空間不足而崩潰。

分塊計算最重要的是找到乙個字段作為分割資料的依據,使得計算結果裡不包含重複累加的值。以渠道統計為例,最初我們按軟體對4取模,平台對2取模的方式,將資料分成8張表。如下圖:

這種分割在剛開始時確實效果比較明顯,但隨著資料量的增加(軟體的使用者量不同),不同表間的資料量差異越來越大,有的表資料量很大,有的又很少,大表在關聯更新資料時就顯得很慢。下面是關聯更新的日誌(softidmod=0,platformmod=0即為sjqd_users_s0_p0表):

後面我們改用

imei

作為分割依據(只要將相同

imei

的資料分在同乙個分塊裡就不會出現重複統計的問題),將分表改為分割槽,原本想用

imei

後兩位作為分割槽列,但結果資料分布也不是很均勻。目前的作法是先求出

imei

的hash code

值,然後再對

128取模,將得到的值作為分割槽列,從下圖可以看出分布非常的均勻(這是其中幾個分割槽,第一列是分割槽列值,每二列為對應的行數):

注:改進後的分割槽方案也可作為分伺服器併發計算的基礎,同時也可作為抽樣統計的依據。

關係型資料庫 非關係型資料庫

關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...

關係型資料庫 非關係型資料庫

2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...

關係型資料庫與非關係型資料庫

關係型資料庫與非關係型資料庫的區別 非關係型資料庫的優勢 1.效能 nosql是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過sql層的解析,所以效能非常高。2.可擴充套件性 同樣也是因為基於鍵值對,資料之間沒有耦合性,所以非常容易水平擴充套件。關係型資料庫的優勢 1.複雜查詢 可...