对提交的数据校验是否重复,db 在不加索引的情况下,大数据量查询很慢。
将数据都缓存到 redis 中,如果直接用 set 、hash 这种结构,基于 member/field 校验重复值,需要缓存原数据,浪费空间,而且 redis key 、set member 有上限。
有没有其他的,类似布隆过滤器这种基于 hash 运算,节省空间的方法。(布隆不支持删除,不考虑)
bitmap 需要做数据-offset 映射,而且 bitmap 没有压缩,如果 offset 映射出来是 2^32-1 ,直接就干满 512MB 了。
1
MoYi123 2022-03-08 10:38:39 +08:00
roaringbitmap
|
3
edward1987 2022-03-08 11:01:28 +08:00
原数据是字符串的话,有长度和编码吗? 如果都不固定,那就只能存原数据了吧。hash 会有碰撞的可能,不满足你的业务需求
|
4
blu10ph 2022-03-08 11:14:22 +08:00
HyperLog
|
5
Maboroshii 2022-03-08 11:16:46 +08:00 via Android
md5 哈希,存数据库加索引
|
6
corningsun 2022-03-08 11:36:59 +08:00
|
7
labulaka521 2022-03-08 11:59:14 +08:00
为什么不加个哈希索引呢?前几天看个帖子百亿数据百毫秒查出
|
8
leebs OP @labulaka521 mongodb 文档型结构,字段名不是固定的。
|
9
ffxrqyzby 2022-03-08 13:45:29 +08:00
https://github.com/aviggiano/redis-roaring
redis 可以用这个, 亲测压缩效果不错 另外看你们业务场景, 大数据离线可以用一些好用的 olad, 基本天生支持 HLL, bitmap, 毫秒级去重 |
10
ffxrqyzby 2022-03-08 13:45:53 +08:00
olad -> olap
|
12
lbp0200 2022-03-08 14:51:34 +08:00
复合主键
HBASE tendis |
13
swcat 2022-03-09 08:55:16 +08:00
我是这样做的, (crc32 + hash 取 n 个字符) + 字符串全校验
|