leebs
V2EX  ›  Redis

用 redis 进行重复值校验,有啥好的数据结构

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

    对提交的数据校验是否重复,db 在不加索引的情况下,大数据量查询很慢。

    将数据都缓存到 redis 中,如果直接用 set 、hash 这种结构,基于 member/field 校验重复值,需要缓存原数据,浪费空间,而且 redis key 、set member 有上限。

    有没有其他的,类似布隆过滤器这种基于 hash 运算,节省空间的方法。(布隆不支持删除,不考虑)

    bitmap 需要做数据-offset 映射,而且 bitmap 没有压缩,如果 offset 映射出来是 2^32-1 ,直接就干满 512MB 了。

    15 replies  •  2022-03-09 11:23:22 +08:00
    MoYi123
    MoYi123
    Mar 8, 2022
    1
    roaringbitmap
    leebs
    leebs
    OP
    Mar 8, 2022
    2
    @MoYi123 字符串转换成数字有什么好的编码方案嘛。
    edward1987
    edward1987
    Mar 8, 2022
    3
    原数据是字符串的话,有长度和编码吗? 如果都不固定,那就只能存原数据了吧。hash 会有碰撞的可能,不满足你的业务需求
    blu10ph
    blu10ph
    Mar 8, 2022
    4
    HyperLog
    Maboroshii
    Maboroshii
    Mar 8, 2022 via Android
    5
    md5 哈希,存数据库加索引
    corningsun
    corningsun
    Mar 8, 2022
    6
    @Maboroshii

    +1 ,数据库单独建表,摘要字段设置唯一索引,直接插入,报错就说明有值了,删除也快。
    labulaka521
    labulaka521
    Mar 8, 2022
    7
    为什么不加个哈希索引呢?前几天看个帖子百亿数据百毫秒查出
    leebs
    leebs
    OP
    Mar 8, 2022
    8
    @labulaka521 mongodb 文档型结构,字段名不是固定的。
    ffxrqyzby
    ffxrqyzby
    Mar 8, 2022
    9
    https://github.com/aviggiano/redis-roaring
    redis 可以用这个, 亲测压缩效果不错
    另外看你们业务场景, 大数据离线可以用一些好用的 olad, 基本天生支持 HLL, bitmap, 毫秒级去重
    ffxrqyzby
    ffxrqyzby
    Mar 8, 2022
    10
    olad -> olap
    MoYi123
    MoYi123
    Mar 8, 2022
    11
    @leebs 看你能接受 bitmap 才提得, 根据鸽笼原则, string 转 int 肯定是没有准确的方案的.
    lbp0200
    lbp0200
    Mar 8, 2022
    12
    复合主键
    HBASE
    tendis
    swcat
    swcat
    Mar 9, 2022
    13
    我是这样做的, (crc32 + hash 取 n 个字符) + 字符串全校验
    leebs
    leebs
    OP
    Mar 9, 2022
    14
    @swcat 数据存在哪边呢
    swcat
    swcat
    Mar 9, 2022
    15
    @leebs 存 mysql 可以啊, 存 redis 也可以啊, 存文件都行啊, crc32 + hash 只是初步过滤 key 存在不存在, 能挡住大部分非重复值, 前面的相同了后面再全字符串校验, 只是为了防止冲突
    胆子大, 路子野, 再用一种 hash 算法来代替字符串全校验也不是不行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5280 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    ♥ Do have faith in what you're doing.