• 请不要在回答技术问题时复制粘贴 AI 生成的内容
leebs
V2EX  ›  程序员

大数据量下数据判重,有什么好的方法?

  •  
  •   leebs · Mar 8, 2022 · 3688 views
    This topic created in 1711 days ago, the information mentioned may be changed or developed.

    几十亿数据,提交一条数据,判断字段内容是否重复。 直接加索引,怕几十亿数据撑不住。

    15 replies  •  2022-03-10 15:10:38 +08:00
    ericls
    ericls
    Mar 8, 2022 via iPhone
    1
    benchmark 了吗?
    BrettD
    BrettD
    Mar 8, 2022❤️2
    2
    bloom filter
    kera0a
    kera0a
    Mar 8, 2022 via iPhone❤️1
    3
    布隆过滤器,但会有一点点误判率。
    误判率越小占用内存越大,速度非常快 O(1)
    wellsc
    wellsc
    Mar 8, 2022
    4
    文本段?分词+倒排索引
    leebs
    leebs
    OP
    Mar 9, 2022
    5
    @kera0a 布隆的空间占用情况呢,几十亿数据不会内存都放不下了吧。
    levelworm
    levelworm
    Mar 9, 2022 via Android
    6
    不用全部对比吧,如果是分布式的话。更怕的是技术上不重但是业务上重。
    levelworm
    levelworm
    Mar 9, 2022 via Android
    7
    对了,op 用的是什么数据库呐?
    LeeReamond
    LeeReamond
    Mar 9, 2022
    8
    @kera0a 布隆过滤器一个问题是无法应对动态数据,实际业务里比如原先拦截 1 ,2 ,3 ,结果第二天业务上 2 从列表里删除了,布隆过滤器就比较吃瘪了
    murmur
    murmur
    Mar 9, 2022
    9
    几十亿数据有分表或者分库么
    leebs
    leebs
    OP
    Mar 9, 2022
    10
    @levelworm mongodb
    shawndev
    shawndev
    Mar 9, 2022
    11
    Cuckoo Filter?
    ElmerZhang
    ElmerZhang
    Mar 9, 2022
    12
    分表+唯一索引
    ElmerZhang
    ElmerZhang
    Mar 9, 2022
    13
    当前表不好拆的话,就专门为这个索引建个新表,给这个表分表+唯一索引。
    写数据的时候用事务,两个表一起写。
    另外,你只是担心抗不住,到底抗不抗得住还是要看压测,说不定就抗得住了呢。不过这么大的表改索引也得费点劲。
    kera0a
    kera0a
    Mar 9, 2022
    14
    @leebs 空间复杂度根据误判率来计算的
    50 亿数据,误判率 0.001 大概需要 8G 内存
    ghoul5426
    ghoul5426
    Mar 10, 2022
    15
    居然没人说哈希,为每个数据计算一个哈希值,crc32 ( 32 位)、md5 ( 128 位)、sha1 ( 160 位)、sha256 ( 256 位)等都可以,可以把哈希值做主键或者唯一索引,可以用这个值来做分库分表的依据。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2100 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 08:40 · PVG 16:40 · LAX 00:40 · JFK 03:40
    ♥ Do have faith in what you're doing.