funky
V2EX  ›  问与答

关于 bitmap 持久化的一点疑惑

  •  
  •   funky · Jun 30, 2018 · 3325 views
    This topic created in 2898 days ago, the information mentioned may be changed or developed.
    现在情况是采用 redis bitmap 作为分析用户维度的一种手段。key 是表示该维度,value 表示 uid 的 bitmap
    但是随着时间推移,bitmap 会越来越多,是否能将 bitmap 持久化之后转存文件而不占用 redis 内存,需要查询的时候再从文件 load 进内存?
    7 replies    2018-06-30 19:28:59 +08:00
    funky
        1
    funky  
    OP
       Jun 30, 2018
    或者说那种数据库支持这种数据结构?
    teleme
        2
    teleme  
       Jun 30, 2018 via Android
    @funky 按照这个设计思路内存应该足够用了。因为每个 bitmap 的长度是最大的 uid。总内存占用是非常可控的。
    teleme
        3
    teleme  
       Jun 30, 2018 via Android
    @funky 持久化的话,bitmap 读成 buffer,然后 gzip 一下当文件存
    funky
        4
    funky  
    OP
       Jun 30, 2018
    @teleme 是的,但是架不住 N 多个需要分析的维度,每个 bitmap 占不到 1M,
    ywind
        5
    ywind  
       Jun 30, 2018 via Android
    @funky 能接受有误差的话,可以考虑一下布隆过滤器,数据可以更小一点。
    des
        6
    des  
       Jun 30, 2018 via Android
    直接存数据库 blob
    postgre 应该有插件可以直接读,冷数据这样存是个不错的主意

    还有,直接存文件不是个好主意
    teleme
        7
    teleme  
       Jun 30, 2018
    @funky 我的一点看法是,维度是不是需要考虑时间单位,如果有时效性的话,bitmap key 设置 expire 这样,redis 可以把内存维护得非常稳定。历史冷数据的持久化,可以考虑 S3 或者 OSS 这类云服务。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2698 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 10:15 · PVG 18:15 · LAX 03:15 · JFK 06:15
    ♥ Do have faith in what you're doing.