成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

騰訊面試:如何實現10億數據判重?

數據庫 MySQL
使用 MySQL 數據庫判重,或使用 List.contains() 或 Set.contains() 判重就不可行,因為 MySQL 在數據量大時查詢就會非常慢,而數據庫又是及其珍貴的全局數據庫資源。

當數據量比較大時,使用常規的方式來判重就不行了。

例如,使用 MySQL 數據庫判重,或使用 List.contains() 或 Set.contains() 判重就不可行,因為 MySQL 在數據量大時查詢就會非常慢,而數據庫又是及其珍貴的全局數據庫資源。

《阿里巴巴Java開發手冊》上也說了,如果單表數據量超過 500 萬或 2GB 時就建議分庫分表了,如下圖所示:

所以數據庫去重顯然是不行的。而使用集合也是不合適的,因為數據量太大,使用集合會導致內存不夠用或內存溢出和 Full GC 頻繁等問題,所以此時我們的解決方案通常是采用布隆過濾器來實現判重。

知識擴展

除了布隆過濾器之外,我們還可以使用 BitMap(位圖)的數據類型來實現判重。

位圖(BitMap)是一種數據結構,用于表示一個特定范圍內的元素是否存在或者某種狀態,通常用二進制位來表示。在位圖中,每一個位只能是 0 或 1,分別表示元素不存在或存在。位圖通常用一個 bit 數組來實現,每個 bit 位對應一個元素,如下圖所示:

其中,上圖中的 1 表示有值,上面 BitMap 描述的值是 1,3,5。

BitMap 優點分析

位圖的優勢包括:

  • 空間效率優勢:位圖極大地節省了存儲空間。對于大量稀疏數據,特別是當元素數量遠大于實際存在的項時,相比于使用傳統的列表、集合等數據結構,位圖占用的空間極小。
  • 查詢速度:由于內存訪問是按字節或字進行的,因此對單個元素的存在性檢查時間復雜度為 O(1),即常量時間,非常快速。
  • 批量操作高效:對于批量插入、刪除和查詢操作,尤其是統計某一范圍內元素的數量,位圖表現出優秀的性能。

BitMap VS int

以 Java 中的 int 為例,來對比觀察 BitMap 的優勢,在 Java 中,int 類型通常需要 32 位(4 字節*8),而 BitMap 使用 1 位就可以來標識此元素是否存在,所以可以認為 BitMap 占用的空間大小,只有 int 類型的 1/32,所以有大數據量判重時,使用 BitMap 也可以實現。

PS:布隆過濾器的底層就是基于 BitMap 數據結構實現的。

BitMap 在 Java 中的使用

BitMap 在 Java 中的具體實現是 java.util 中的 BitSet,BitSet 是一個可變大小的位向量,能夠動態增長以容納更多的位數據,以下是 BitSet 基本使用示例:

import java.util.BitSet;

public class BitmapExample {
    public static void main(String[] args) {
        // 創建一個BitSet實例
        BitSet bitmap = new BitSet();

        // 設置第5個位置為1,表示第5個元素存在
        bitmap.set(5);

        // 檢查第5個位置是否已設置
        boolean exists = bitmap.get(5);
        System.out.println("Element at position 5 exists: " + exists);  // 輸出: Element at position 5 exists: true

        // 設置從索引10到20的所有位置為1
        bitmap.set(10, 21);  // 參數是包含起始點和不包含終點的區間

        // 計算bitset中所有值為1的位的數量,相當于計算設置了的元素個數
        int count = bitmap.cardinality();
        System.out.println("Number of set bits: " + count);

        // 清除第5個位置
        bitmap.clear(5);

        // 判斷位圖是否為空
        boolean isEmpty = bitmap.isEmpty();
        System.out.println("Is the bitset empty after clearing some bits? " + isEmpty);
    }
}
責任編輯:姜華 來源: Java中文社群
相關推薦

2024-03-06 09:22:23

C#數據庫判重

2024-02-19 11:49:23

JavaBitMap類型

2023-09-18 16:59:06

數據布隆過濾器

2025-06-26 08:22:03

2021-12-08 09:53:50

騰訊QQ號碼重復

2025-01-08 07:00:00

MySQL數據庫判重

2019-08-20 00:39:28

數據存儲層冗余

2025-02-21 08:20:33

2024-07-04 13:42:12

2021-12-15 06:58:13

List 集合LinkedHashS

2024-03-11 16:01:29

BitMap數據去重開發

2025-03-26 02:22:00

2025-05-12 01:55:00

MySQL存儲數據

2019-03-06 09:50:25

數據監控資損

2015-11-03 11:03:08

騰訊美團

2022-07-06 07:35:19

group byMySQL

2019-03-05 10:16:54

數據分區表SQLserver

2019-09-25 09:20:41

谷歌代碼開發者

2024-05-23 16:41:40

2021-01-20 07:02:54

Windows10漏洞360
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99av成人精品国语自产拍 | 亚洲成人免费视频在线 | 精品国产一区二区三区久久久蜜月 | 日韩欧美视频 | 欧美乱大交xxxxx另类电影 | 紧缚调教一区二区三区视频 | 日韩视频一区在线观看 | av在线天堂网 | 久久国产精彩视频 | 欧美国产日韩在线观看 | 91一区二区三区在线观看 | 国产午夜精品久久久久 | 日本电影韩国电影免费观看 | 日本精品一区二区三区四区 | 伊人免费在线观看 | www久久久| 欧美一级淫片免费视频黄 | 久久新视频 | 日韩视频在线播放 | 亚洲精品一区中文字幕 | 日韩三区在线 | 日韩欧美三级 | 国产精品久久久久aaaa | 男女羞羞网站 | 妖精视频一区二区三区 | 一区二区三区免费 | 一级大片网站 | 久久er精品| 国产一区二区视频免费在线观看 | 欧美在线视频一区二区 | 国产精品亚洲视频 | 日韩视频免费看 | 美女露尿口视频 | 色偷偷888欧美精品久久久 | 精品二区视频 | av色站| 少妇特黄a一区二区三区88av | 久久久精品 | 国产精品视频久久 | 91观看| 亚洲男人网|