V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
funky
V2EX  ›  问与答

关于 bitmap 持久化的一点疑惑

  •  
  •   funky · 2018-06-30 15:38:25 +08:00 · 2527 次点击
    这是一个创建于 2369 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在情况是采用 redis bitmap 作为分析用户维度的一种手段。key 是表示该维度,value 表示 uid 的 bitmap
    但是随着时间推移,bitmap 会越来越多,是否能将 bitmap 持久化之后转存文件而不占用 redis 内存,需要查询的时候再从文件 load 进内存?
    7 条回复    2018-06-30 19:28:59 +08:00
    funky
        1
    funky  
    OP
       2018-06-30 15:39:40 +08:00
    或者说那种数据库支持这种数据结构?
    teleme
        2
    teleme  
       2018-06-30 16:08:54 +08:00 via Android
    @funky 按照这个设计思路内存应该足够用了。因为每个 bitmap 的长度是最大的 uid。总内存占用是非常可控的。
    teleme
        3
    teleme  
       2018-06-30 16:12:37 +08:00 via Android
    @funky 持久化的话,bitmap 读成 buffer,然后 gzip 一下当文件存
    funky
        4
    funky  
    OP
       2018-06-30 18:15:06 +08:00
    @teleme 是的,但是架不住 N 多个需要分析的维度,每个 bitmap 占不到 1M,
    ywind
        5
    ywind  
       2018-06-30 19:20:50 +08:00 via Android
    @funky 能接受有误差的话,可以考虑一下布隆过滤器,数据可以更小一点。
    des
        6
    des  
       2018-06-30 19:22:06 +08:00 via Android
    直接存数据库 blob
    postgre 应该有插件可以直接读,冷数据这样存是个不错的主意

    还有,直接存文件不是个好主意
    teleme
        7
    teleme  
       2018-06-30 19:28:59 +08:00
    @funky 我的一点看法是,维度是不是需要考虑时间单位,如果有时效性的话,bitmap key 设置 expire 这样,redis 可以把内存维护得非常稳定。历史冷数据的持久化,可以考虑 S3 或者 OSS 这类云服务。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4417 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.