V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
unt
V2EX  ›  程序员

HMGET 查询 2W 个字段会有问题吗

  •  
  •   unt · 114 天前 · 1175 次点击
    这是一个创建于 114 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个 hash 表里大约有 20W 个字段,每个字段 2kb 。

    使用 HMGET 一次获取 2W 个字段会有问题吗,如果优化。

    HMGET 的性能瓶颈大约是达到多少量级

    8 条回复    2023-12-21 19:35:21 +08:00
    sinksmell
        1
    sinksmell  
       114 天前 via Android
    有问题,命令执行太慢了会阻塞后面的请求,网络带宽占用也高。优化,可以改成 pipeline 。
    zdt3476
        2
    zdt3476  
       114 天前
    有没有性能瓶颈取决于你这个接口的请求频率了,具体问题楼上也说了。话说什么行为会一次性要用到两万的字段。
    unt
        3
    unt  
    OP
       114 天前
    @zdt3476 #2 iot 状态数据
    Lax
        4
    Lax  
       114 天前
    好奇 20 万个字段的 key 都是啥
    unt
        5
    unt  
    OP
       114 天前
    @sinksmell #1 HMGET 的时间复杂度 On ,这个 n 是要查询的字段数量吗,和数据库大小有关系吗。换言之,从 20W 条数据的表里 HMGET 1 个字段 和 从 1W 条数据的表里 HMGET 1 个字段, 时间上有差别吗
    unt
        6
    unt  
    OP
       114 天前
    @zdt3476 #2 嗯,试过了,redis 排队执行命令, 那单次接口查得快确实不能说明什么
    jyao
        7
    jyao  
       114 天前
    BigKey 通常以 Key 的大小和 Key 中成员的数量来综合判定,例如:

    Key 本身的数据量过大:一个 String 类型的 Key ,它的值为 5 MB
    Key 中的成员数过多:一个 ZSET 类型的 Key ,它的成员数量为 10,000 个
    Key 中成员的数据量过大:一个 Hash 类型的 Key ,它的成员数量虽然只有 1,000 个但这些成员的 Value (值)总大小为 100 MB

    推荐值:
    单个 key 的 value 小于 10KB
    对于集合类型的 key ,建议元素数量小于 1000

    个人推荐你可以把 key 拆分一下, 拆成多个 key, 这样避免对元素较多的 hash 、list 、zset 等做运算会耗时较旧,使主线程被阻塞, 这样可能会导致一条命令干死一个实例
    cnleon
        8
    cnleon  
       114 天前
    比较好奇为啥要一次取那么多?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   860 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:40 · PVG 05:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.