分布式數位化編碼

2021-07-30 05:32:32 字數 1224 閱讀 3133

在分布式應用中,有時候需要把一些東西,例如cookie,編碼成int/long型數字,在這裡提供一些思路。

1. 集中式編碼

類似於單機,將所有cookie重新切分在一起,按次序編碼

var idnum:long = 0

idrdd.repartition(1).map(oriid => ).repartition(partitionnum)

這種方法在資料量比較大的時候非常慢

2. 固定間隔分布式編碼

每個partition內部實現順序編碼,各partition之間預留一定的間隔,需要預估每個partition容納的最大數量,例如我們如果估計每個partition中的數量不會超過100萬,則

var baseindex: long = mapindex.tolong*1000000l

itemiter.map(oriid => )

})這種方法的缺點在於不夠靈活,間隔是固定的,遇到資料增長較快時容易出現問題;而預留間隔如果太大,編碼數字浪費較多

3. 彈性分布式編碼

spark提供了分布式的編碼方案,在org.apache.spark.rdd的zipwithuniqueid函式中,首先獲得partition的個數partitionnum,然後每個partition內部的起始id為partitionid,間隔為partitionnum,這樣在partition資料分布比較均勻時,中間浪費的編碼會很少,且不用預設partition之間的間隔,非常靈活。舉個栗子,我們有500個partition,則第乙個partition內部的起始id為0,間隔為500, 編碼為(0, 500, 1000, …),第二個partition內部的起始id為1,編碼同理(1, 501, 1001, …), 其他類似。偽碼

var partitionnum; //partition個數

var partitionid; //partition的id

//對每個partition內部

for i=0

to n

partitionid+i*partitionnum

下面給出spark的實現

val n = idrdd.partitions.length.tolong

(k, iter) =>

utils.getiteratorzipwithindex(iter, 0l).map

}

構築數位化運營基石,加速數位化轉型

在華為運營轉型峰會 operations transformation forum 2016 華為董事,電信軟體業務部總裁張平安先生發表主題演講,提倡運營商採用big bang transformation的方式構建數位化運營系統進行徹底數位化變革,從而匹配數位化商業發展訴求,確保收入增長與盈利能力...

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...