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

2022-03-08 23:37:19 +08:00
 leebs

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

2159 次点击
所在节点    程序员
15 条回复
ericls
2022-03-08 23:43:40 +08:00
benchmark 了吗?
BrettD
2022-03-08 23:46:01 +08:00
bloom filter
kera0a
2022-03-08 23:47:19 +08:00
布隆过滤器,但会有一点点误判率。
误判率越小占用内存越大,速度非常快 O(1)
wellsc
2022-03-08 23:48:27 +08:00
文本段?分词+倒排索引
leebs
2022-03-09 00:11:02 +08:00
@kera0a 布隆的空间占用情况呢,几十亿数据不会内存都放不下了吧。
levelworm
2022-03-09 00:16:55 +08:00
不用全部对比吧,如果是分布式的话。更怕的是技术上不重但是业务上重。
levelworm
2022-03-09 00:39:12 +08:00
对了,op 用的是什么数据库呐?
LeeReamond
2022-03-09 07:07:28 +08:00
@kera0a 布隆过滤器一个问题是无法应对动态数据,实际业务里比如原先拦截 1 ,2 ,3 ,结果第二天业务上 2 从列表里删除了,布隆过滤器就比较吃瘪了
murmur
2022-03-09 08:16:13 +08:00
几十亿数据有分表或者分库么
leebs
2022-03-09 09:14:11 +08:00
@levelworm mongodb
shawndev
2022-03-09 10:22:34 +08:00
Cuckoo Filter?
ElmerZhang
2022-03-09 10:45:30 +08:00
分表+唯一索引
ElmerZhang
2022-03-09 10:49:06 +08:00
当前表不好拆的话,就专门为这个索引建个新表,给这个表分表+唯一索引。
写数据的时候用事务,两个表一起写。
另外,你只是担心抗不住,到底抗不抗得住还是要看压测,说不定就抗得住了呢。不过这么大的表改索引也得费点劲。
kera0a
2022-03-09 10:50:24 +08:00
@leebs 空间复杂度根据误判率来计算的
50 亿数据,误判率 0.001 大概需要 8G 内存
ghoul5426
2022-03-10 15:10:38 +08:00
居然没人说哈希,为每个数据计算一个哈希值,crc32 ( 32 位)、md5 ( 128 位)、sha1 ( 160 位)、sha256 ( 256 位)等都可以,可以把哈希值做主键或者唯一索引,可以用这个值来做分库分表的依据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX