精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

十億QQ號如何去重?你知道嗎?

開發 架構
10億QQ號去重的本質,是將問題拆解到每個計算單元都能高效處理的粒度。今天這篇文章跟大家一起分享一些常見的解決方案,希望對你會有所幫助。

前言

最近在網上看到一個問題:10億QQ號如何去重?

我覺得挺有意思的。

今天這篇文章跟大家一起分享一些常見的解決方案,希望對你會有所幫助。

一、技術難點

1.數據規模分析

  • 原始數據:10億×8字節 = 8GB
  • HashSet去重:至少16GB內存(Java對象開銷)
  • 理想方案:<1GB內存

2. 核心挑戰

二、單機解決方案:位圖法

1.算法原理

利用位數組表示數字存在性:

public class BitMap {  
    privatefinalbyte[] bits;  
    
    public BitMap(int maxNum) {  
        this.bits = newbyte[(maxNum >> 3) + 1]; // 每byte存儲8個數字  
    }  
    
    public void add(int num) {  
        int arrayIndex = num >> 3;  // num/8  
        int position = num & 0x07;  // num%8  
        bits[arrayIndex] |= 1 << position;  
    }  
    
    public boolean contains(int num) {  
        int arrayIndex = num >> 3;  
        int position = num & 0x07;  
        return (bits[arrayIndex] & (1 << position)) != 0;  
    }  
}

2.QQ號范圍優化

QQ號范圍:10000(5位) - 9999999999(10位)位圖內存計算

(10^10 - 10^4) / 8 / 1024/1024 ≈ 1.16GB

優化方案

// 偏移量優化:存儲(qq - 10000)  
public void add(long qq) {  
    long num = qq - 10000;  
    int arrayIndex = (int)(num >> 3);  
    int position = (int)(num & 7);  
    bits[arrayIndex] |= 1 << position;  
}

三、進階方案:布隆過濾器

1.應對內存限制

2.參數設計與實現

public class BloomFilter {  
    privatefinal BitSet bitset;  
    privatefinalint size;  
    privatefinalint[] seeds;  
    
    public BloomFilter(int size, int hashCount) {  
        this.bitset = new BitSet(size);  
        this.size = size;  
        this.seeds = newint[hashCount];  
        for (int i = 0; i < hashCount; i++) {  
            seeds[i] = i * 31;  
        }  
    }  
    
    public void add(String qq) {  
        for (int seed : seeds) {  
            int hash = hash(qq, seed);  
            bitset.set(Math.abs(hash % size), true);  
        }  
    }  
    
    public boolean contains(String qq) {  
        for (int seed : seeds) {  
            int hash = hash(qq, seed);  
            if (!bitset.get(Math.abs(hash % size))) {  
                returnfalse;  
            }  
        }  
        returntrue;  
    }  
    
    private int hash(String value, int seed) {  
        // MurmurHash 實現  
        int result = 0;  
        for (char c : value.toCharArray()) {  
            result = seed * result + c;  
        }  
        return result;  
    }  
}

3.內存優化效果

方案

內存消耗

誤差率

原始存儲

8 GB

0%

位圖法

1.16 GB

0%

布隆過濾器(0.1%)

171 MB

0.001

四、磁盤方案:外部排序與多路歸并

1.處理流程

2.關鍵代碼實現

// 外部排序  
public void externalSort(String input, String output) throws IOException {  
    List<File> chunks = splitAndSort(input, 100_000_000); // 每個文件1千萬  
    mergeFiles(chunks, output);  
}  

// 多路歸并  
void mergeFiles(List<File> files, String output) {  
    PriorityQueue<MergeEntry> queue = new PriorityQueue<>();  
    List<BufferedReader> readers = new ArrayList<>();  

    // 初始化堆  
    for (File file : files) {  
        BufferedReader reader = new BufferedReader(new FileReader(file));  
        readers.add(reader);  
        String line = reader.readLine();  
        if (line != null) {  
            queue.add(new MergeEntry(line, reader));  
        }  
    }  

    try (BufferedWriter writer = new BufferedWriter(new FileWriter(output))) {  
        long last = -1;  
        while (!queue.isEmpty()) {  
            MergeEntry entry = queue.poll();  
            long qq = Long.parseLong(entry.value);  

            // 去重:只寫入不重復的QQ號  
            if (qq != last) {  
                writer.write(entry.value);  
                writer.newLine();  
                last = qq;  
            }  

            // 讀取下一行  
            String next = entry.reader.readLine();  
            if (next != null) {  
                queue.add(new MergeEntry(next, entry.reader));  
            }  
        }  
    } finally {  
        readers.forEach(r -> { try { r.close(); } catch (IOException e) {}});  
    }  
}  

class MergeEntry implements Comparable<MergeEntry> {  
    String value;  
    BufferedReader reader;  

    public MergeEntry(String value, BufferedReader reader) {  
        this.value = value;  
        this.reader = reader;  
    }  

    @Override
    public int compareTo(MergeEntry o) {  
        returnthis.value.compareTo(o.value);  
    }  
}

五、分布式解決方案

1.分片策略設計

2.Spark實現方案

val qqRDD = spark.read.textFile("hdfs://qq_data/*.txt")  
  .map(_.toLong)  
  .repartition(1000)  // 分為1000個分區  

// 每個分區內部去重  
val distinctRDD = qqRDD.mapPartitions { iter =>  
val bitmap = newRoaringBitmap()  
  iter.foreach(qq => bitmap.add(qq.toInt))  
  bitmap.iterator.asScala.map(_.toLong)  
}  

// 全局去重(可選)  
val globalDistinct = distinctRDD.distinct()  

globalDistinct.saveAsTextFile("hdfs://result/")

3.內存優化:RoaringBitmap

存儲優勢對比

普通位圖:10^10 / 8 / 1024/1024 ≈ 1.16 GB  
RoaringBitmap:稀疏數據下可壓縮至100-300 MB

六、生產級架構:Lambda架構

1.系統架構圖

2.各層技術選型

架構層

技術棧

處理目標

批處理層

Spark + HDFS

全量數據去重

速度層

Flink + Redis

實時增量去重

服務層

Spring Boot + HBase

統一查詢接口

3.實時去重實現

public class QQDeduplication {  
    privatestaticfinal String REDIS_KEY = "qq_set";  

    public boolean isDuplicate(String qq) {  
        try (Jedis jedis = jedisPool.getResource()) {  
            // 使用HyperLogLog進行基數估計  
            if (jedis.pfcount(REDIS_KEY) > 1_000_000_000L) {  
                returntrue; // 已超過10億,直接返回重復  
            }  
            return jedis.sadd(REDIS_KEY, qq) == 0;  
        }  
    }  
}

七、終極方案:分層位圖索引

1.架構設計

2.存儲計算

QQ號范圍:10000 - 9999999999(約100億)分層設計

  • 第一層分片:100個區間(每區間1億)
  • 第二層分片:100個子區間(每區間100萬)
  • 第三層存儲:RoaringBitmap(每分區1.2MB)

總內存需求

100 × 100 × 1.2MB = 12GB(分布式存儲可行)

3.Java實現

public class LayeredBitmap {  
    privatefinal RoaringBitmap[][][] bitmaps;  
    privatestaticfinalint L1 = 100; // 一級分片  
    privatestaticfinalint L2 = 100; // 二級分片  

    public LayeredBitmap() {  
        bitmaps = new RoaringBitmap[L1][L2][];  
    }  

    public void add(long qq) {  
        int l1Index = (int)((qq - 10000) / 100_000_000);  
        long remainder = (qq - 10000) % 100_000_000;  
        int l2Index = (int)(remainder / 1_000_000);  
        int value = (int)(remainder % 1_000_000);  

        if (bitmaps[l1Index][l2Index] == null) {  
            bitmaps[l1Index][l2Index] = new RoaringBitmap();  
        }  
        bitmaps[l1Index][l2Index].add(value);  
    }  

    public boolean contains(long qq) {  
        // 類似add的分片計算  
        RoaringBitmap bitmap = bitmaps[l1Index][l2Index];  
        return bitmap != null && bitmap.contains(value);  
    }  
}

八、方案對比與選型建議

方案

適用場景

內存/存儲

時間復雜度

精度

單機位圖

<1億數據

O(n)

O(1)

100%

布隆過濾器

百億級容忍誤差

O(1)

O(k)

<99.9%

外部排序

單機磁盤處理

磁盤空間

O(n log n)

100%

Spark分布式

海量數據批量處理

集群存儲

O(n)

100%

Redis實時去重

增量數據實時處理

O(n)

O(1)

100%

分層位圖索引

超大規模精準去重

O(n)壓縮存儲

O(1)

100%

九、實戰經驗與避坑指南

1.數據傾斜解決方案

問題場景:部分QQ號段過于集中(如100000-199999)

解決策略

// 動態分片函數  
int getShardId(long qq, int shardCount) {  
    String str = String.valueOf(qq);  
    // 取后6位作為分片依據  
    int suffix = Integer.parseInt(str.substring(Math.max(0, str.length() - 6)));  
    return suffix % shardCount;  
}

2.去重精度保障

3.成本優化建議

  • 冷熱分離:熱數據用內存位圖,冷數據存磁盤
  • 壓縮存儲:使用RoaringBitmap替代普通位圖
  • 分級存儲

a.最近3個月數據:內存存儲

b.歷史數據:HBase+壓縮

總結

  • 分治思想:10億問題拆解為1000個100萬問題
  • 空間換時間:位圖法用存儲空間換取O(1)時間復雜度
  • 概率智慧:布隆過濾器用可控誤差換取千倍空間壓縮
  • 分層設計:億級→百萬級→萬級分層處理
  • 動靜分離:批處理處理歷史數據,實時處理增量數據

10億QQ號去重的本質,是將問題拆解到每個計算單元都能高效處理的粒度。

責任編輯:姜華 來源: 蘇三說技術
相關推薦

2021-10-08 11:13:41

子集問題數據結構算法

2024-07-08 00:00:01

多線程ThreadC#

2023-01-13 17:02:10

操作系統鴻蒙

2023-03-21 07:39:51

CentOS掛載硬盤

2017-10-16 13:45:04

2024-06-20 08:06:30

2024-12-03 00:38:37

數據湖存儲COS

2025-01-16 16:41:00

ObjectConditionJDK

2023-02-28 07:39:18

2024-02-23 08:09:43

Rediskey名字數據庫

2024-10-05 00:00:00

HTTPS性能HTTP/2

2024-10-15 10:32:30

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2023-04-26 10:21:04

2023-12-12 08:41:01

2024-04-30 09:02:48

2023-12-20 08:23:53

NIO組件非阻塞

2024-07-01 08:40:18

tokio派生線程

2024-10-24 08:47:12

點贊
收藏

51CTO技術棧公眾號

宅男网站在线免费观看| 国产精品suv一区| 一区二区在线视频观看| 亚洲高清不卡在线| 欧美最大成人综合网| 欧洲性xxxx| 97超碰成人| 色美美综合视频| 操bbb操bbb| 免费资源在线观看| 国产在线不卡一区| 欧美一级大片在线免费观看| 九九这里只有精品视频| 欧美三级午夜理伦三级在线观看| 欧美三级韩国三级日本三斤| 真人抽搐一进一出视频| 伊人免费在线| 91网上在线视频| 国产精品免费一区| 日韩三级视频在线| 久久中文亚洲字幕| 亚洲国产精品人人爽夜夜爽| 天堂网在线免费观看| 超碰在线资源| 中文字幕成人网| 国产精品区一区| 国产香蕉在线视频| 日韩综合网站| 亚洲精品久久久久久久久久久久久 | 四虎精品一区二区| 男人操女人的视频网站| 国产精品视频3p| 色婷婷av一区二区三区软件| 一区二区三区av在线| 刘亦菲毛片一区二区三区| 日韩电影在线免费看| 久久人人看视频| 亚洲 欧美 国产 另类| 里番精品3d一二三区| 欧美精三区欧美精三区| 亚洲午夜无码av毛片久久| 爆操欧美美女| 日本一区二区免费在线| 国产精品一区免费观看| 国产免费av观看| 日日夜夜免费精品视频| 国产做受高潮69| 黄色一级大片在线免费观看| 九色成人国产蝌蚪91| 精品久久久久久久久久久院品网 | 69av成年福利视频| www.色小姐com| 日韩av大片| 日韩精品极品在线观看| 亚洲精品一区二区18漫画| 97欧美成人| 日韩欧美一区二区在线| 极品粉嫩国产18尤物| 18网站在线观看| 中文字幕亚洲不卡| 亚洲春色在线视频| 国产在线视频资源| 久久综合av免费| 国产乱人伦精品一区二区| 91丨porny丨在线中文 | 亚洲一区av在线播放| 欧美一区二区免费在线观看| 91精品久久久久久综合五月天| 91精品啪在线观看国产60岁| 亚洲国产日韩欧美在线观看| 欧美色片在线观看| 色丁香久综合在线久综合在线观看| 青春草国产视频| 97超碰免费在线| 亚洲成人精品在线观看| 久艹视频在线免费观看| 丁香花电影在线观看完整版| 亚洲自拍偷拍图区| 加勒比成人在线| 国产嫩草在线视频| 亚洲国产精品尤物yw在线观看| wwwwww欧美| 国产蜜臀av在线播放| 亚洲国产成人91porn| 日韩一级性生活片| 日本h片在线观看| 亚洲成av人片在线观看| 亚洲熟妇av日韩熟妇在线| 中文字幕人成乱码在线观看| 欧美视频免费在线观看| 久久精品一区二| av一区在线播放| 欧美日韩国产综合一区二区| 亚洲成人手机在线观看| 4438全国亚洲精品观看视频| 精品国产区一区| 香港三级日本三级| 视频国产一区| 精品国产拍在线观看| 成人免费毛片东京热| 99视频一区| 国产91精品久| 欧美一区二区三区网站| 日韩精品免费专区| 国产日韩av在线播放| 精品国产伦一区二区三| 国产精品69毛片高清亚洲| 九色一区二区| 日本韩国在线视频爽| 亚洲一区二区三区在线| 能在线观看的av网站| 动漫一区二区三区| 国产精品丝袜在线播放| 亚洲午夜久久久| 国产一区二区在线视频播放| 91成人在线| 欧美sm极限捆绑bd| 魔女鞋交玉足榨精调教| 99国产**精品****| 91精品国产高清久久久久久| 中文字幕在线观看1| 丁香亚洲综合激情啪啪综合| 欧美二区在线看| 成人毛片av在线| 黑人巨大精品欧美一区二区三区| 69久久久久久| 女仆av观看一区| 国产一区二区三区中文| 免费在线黄色片| 久久尤物视频| 国产高清在线一区二区| av黄色在线观看| 五月天激情小说综合| www.精品在线| 伊人久久大香线蕉综合网站| 欧美成人免费网| 一区精品在线观看| a级高清视频欧美日韩| 尤物一区二区三区| 在线成人av观看| 精品剧情v国产在线观看在线| 秋霞网一区二区三区| 在线亚洲国产精品网站| 亚洲一区二区三区在线免费观看 | 欧美日韩电影免费看| 日韩视频免费观看高清完整版在线观看 | 亚洲婷婷综合久久一本伊一区| 欧美精品自拍视频| 欧美高清一级片| 中文字幕在线成人| 日本免费在线观看视频| 99精品桃花视频在线观看| 大胆欧美熟妇xx| 91精品亚洲一区在线观看| 亚洲天堂影视av| 在线观看免费国产视频| 成人免费看黄yyy456| 少妇一晚三次一区二区三区| 久久麻豆视频| 中文字幕亚洲欧美日韩在线不卡| 亚洲欧美偷拍视频| 91香蕉国产在线观看软件| 干日本少妇视频| 欧美激情啪啪| 在线播放日韩欧美| 久久久久久亚洲av无码专区| 久久久久亚洲综合| 欧美 激情 在线| 精品素人av| 97精品伊人久久久大香线蕉| 国产视频一区二区三区四区五区| 国产精品久久99| 亚洲激情在线看| 国产精品99视频| 91在线看www| h片在线观看网站| 日韩欧美亚洲国产精品字幕久久久| 欧美一级特黄高清视频| 国内外成人在线| 免费在线精品视频| 欧美黑人疯狂性受xxxxx野外| 日韩成人在线播放| 日韩欧美在线观看免费| 中文一区在线播放| 亚洲第一天堂久久| 一区二区在线影院| 福利视频一区二区三区| a级片在线免费观看| 亚洲精品国产综合区久久久久久久| 69成人免费视频| 久久久久国产精品麻豆| 999精彩视频| 牛夜精品久久久久久久99黑人| 91美女福利视频高清| 怡红院红怡院欧美aⅴ怡春院| 欧美mv日韩mv国产| 日本天堂网在线| 久久嫩草精品久久久精品一| chinese少妇国语对白| 999国产精品视频| 成人xxxxx色| 性欧美xxx69hd高清| 亚洲香蕉成人av网站在线观看| 中文字幕在线观看精品| 亚洲精品高清视频在线观看| 国产chinese中国hdxxxx| 久久美女性网| 黄色小视频大全| 日韩最新在线| 欧美成人久久| 欧美日韩精品综合| 亚洲欧美专区| 午夜美女久久久久爽久久| 精品久久久久一区二区三区| 欧美精品三级日韩久久| 精品91久久久| 日韩理论在线观看| 亚洲视频在线播放免费| 免费看欧美女人艹b| www.激情网| 精品国产美女| 国产精品免费一区二区三区在线观看| 欧美人体一区二区三区| 久久av中文字幕| 男女网站在线观看| 欧美xingq一区二区| 一二三区免费视频| 亚洲第一成人在线| 女人又爽又黄免费女仆| 国产综合色视频| 黄色国产精品视频| 不卡一区2区| 久久久99爱| 亚洲精品午夜| 国产精品揄拍一区二区| 一区二区精品伦理... | 日韩av无码一区二区三区不卡| 99在线|亚洲一区二区| 亚洲国产日韩综合一区| 高清日韩中文字幕| 懂色一区二区三区av片| 亚洲精品第一| 国产精品美女免费看| 超碰激情在线| 欧美激情乱人伦| 综合久久2o19| 久久网福利资源网站| 国内三级在线观看| 日韩av在线网页| 亚洲第一天堂网| 欧美一区二区免费视频| 最近中文字幕免费观看| 色综合天天在线| 中国一级特黄毛片| 午夜激情综合网| 国产在线视频第一页| 亚洲精品福利视频网站| 欧美日韩色视频| 国产精品福利一区| 老司机精品免费视频| 国产片一区二区| 国产精品久久久久久在线观看| 极品少妇xxxx精品少妇| 国产免费人做人爱午夜视频| 校园激情久久| 狠狠97人人婷婷五月| 国产日韩免费| 日本www在线播放| 亚洲永久视频| 37pao成人国产永久免费视频| 国产精品日韩精品欧美精品| www..com日韩| 99精品国产在热久久下载| 夜夜添无码一区二区三区| 狠狠88综合久久久久综合网| 国产成人在线小视频| 国内激情久久| 国产freexxxx性播放麻豆| 黄色亚洲在线| 欧美网站免费观看| 久久综合九色| 久久久久久久久久久久久久久国产 | 欧美一区二区三区四区夜夜大片| 欧美激情 一区| 久久精品国产精品青草| 亚洲欧美国产中文| 久久电影网站中文字幕| 久久国产亚洲精品无码| 欧美日韩a区| 一区在线电影| 亚洲精选在线| 黄色片久久久久| 美女视频黄a大片欧美| 红桃视频 国产| 成人一区二区视频| 泷泽萝拉在线播放| 国产精品色在线| 日本青青草视频| 欧美日韩国产麻豆| 日韩乱码一区二区三区| 欧美精品在线视频| 欧美 日韩 人妻 高清 中文| 亚洲欧美中文日韩在线v日本| 欧美性天天影视| 久久久免费精品视频| 影视一区二区三区| 亚洲最大福利视频网站| 欧美日韩一区二区三区不卡视频| 美国av一区二区三区| 不卡中文一二三区| 国产精品视频网站在线观看| 国产精品永久| 欧美视频亚洲图片| 久久伊人蜜桃av一区二区| 中文字幕资源站| 欧美日韩国产一中文字不卡| 在线视频免费观看一区| 欧美tickling网站挠脚心| 蜜芽tv福利在线视频| 久久综合88中文色鬼| heyzo一区| 91久久国产精品| 亚洲v天堂v手机在线| 最新中文字幕久久| 亚洲色诱最新| 伊人成人免费视频| 国产午夜亚洲精品羞羞网站| 国产亚洲第一页| 欧美日韩一卡二卡三卡| 欧美一区二区黄片| 中文字幕欧美精品日韩中文字幕| 成人短视频在线观看| 国产成人一区二区三区电影| 成人激情自拍| 99精品视频网站| 日韩av网站在线观看| 亚洲av无码一区二区三区网址 | 7m第一福利500精品视频| www欧美在线观看| 日韩少妇中文字幕| 亚洲一区二区三区高清不卡| 乳色吐息在线观看| 国产精品福利一区二区三区| 久久久久久无码午夜精品直播| 亚洲电影中文字幕| 二区三区在线观看| 国产精品中文字幕在线观看| 九九久久婷婷| 国产男女无遮挡| caoporen国产精品视频| 久久国产精品国语对白| 精品视频资源站| 成人资源www网在线最新版| 日本精品久久久久影院| 美国成人xxx| 久久久久久免费看| 成人午夜短视频| 日本高清一二三区| 日本精品免费观看高清观看| 欧美 日韩 国产 在线| 欧美精品九九久久| 超碰成人97| 免费特级黄色片| www.久久久久久久久| 国产一级在线观看视频| 精品久久久久久无| 日本成人不卡| 国产三区二区一区久久| 在线看片欧美| 黄色av网址在线观看| 亚洲精品乱码久久久久久日本蜜臀| 瑟瑟视频在线免费观看| 亚洲色图综合久久| 日韩欧乱色一区二区三区在线| 一区二区三区我不卡| 精一区二区三区| 无码人妻精品一区二区三区夜夜嗨| 91精品国产色综合久久| 50度灰在线| 成人片在线免费看| 99精品福利视频| 日本激情小视频| 欧美日韩亚洲国产综合| 国产调教视频在线观看| 97自拍视频| 99精品热6080yy久久| wwwwxxxx国产| 色8久久人人97超碰香蕉987| 精品176二区| 国产日韩二区| 日韩中文字幕1| 久久精品色妇熟妇丰满人妻| 91麻豆精品91久久久久久清纯| av在线下载| 九九99玖玖| 蜜臀久久99精品久久久久宅男| 国产人妻精品一区二区三区不卡| 精品国产人成亚洲区| 91精品xxx在线观看| 人人妻人人澡人人爽精品欧美一区|