V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ry_wang
V2EX  ›  Redis

如果一个 hash 里有上 10 万的 field,性能会有影响吧?

  •  
  •   ry_wang ·
    saipanno · Jan 13, 2015 via iPad · 6861 views
    This topic created in 4135 days ago, the information mentioned may be changed or developed.
    想用redis给监控做各个监控项last status的cache,几千台机器,就拿硬盘来说,平均一个机器10个硬盘,那就是几万个field,hadh扛得住么?
    11 replies    2015-01-13 19:03:22 +08:00
    pragbyte
        1
    pragbyte  
       Jan 13, 2015
    多建立 hash,而不是一个 hash 里面很多 field
    surefire
        2
    surefire  
       Jan 13, 2015 via Android
    几万个就扛不住了吗,测试下就知道了 。扛不住就降低负载因子
    cattail
        3
    cattail  
       Jan 13, 2015 via iPhone
    hash大小不影响时间复杂度。hash function才是
    piglei
        4
    piglei  
       Jan 13, 2015
    Redis hash一个存几万个印象中是没有一点问题的。
    tabris17
        5
    tabris17  
       Jan 13, 2015
    同意一楼
    soli
        6
    soli  
       Jan 13, 2015
    @pragbyte 多hash 和 一 hash 多 field 似乎差不多的性能。hash 和 field 的实现方式是一样的。
    andyzhshg
        7
    andyzhshg  
       Jan 13, 2015
    10万小case吧...
    zhicheng
        8
    zhicheng  
       Jan 13, 2015
    redis 不知道,但下面是我司研发的 hash dbm,一千万笔记录的 bench ,16字节的 Key, 128字节的Value
    基于磁盘,如果对于 redis 那种内存的话,理论上性能应该比这个高10倍左右。

    # ./db-bench bench.db bench.db 10000000
    write: 41.815 MB/s
    write: 304488.156 Keys/s
    read: 145.260 MB/s
    read: 1057753.250 Keys/s
    ry_wang
        9
    ry_wang  
    OP
       Jan 13, 2015
    @zhicheng 刚刚测试了一下,12W的field,写入不到2秒,读取基本1秒,做web的后端缓存应该是足够了。
    ry_wang
        10
    ry_wang  
    OP
       Jan 13, 2015
    @pragbyte 本来的设计是监控项加SN作为hash key的,但是这样遍历查询就很麻烦,还要单独维护一个SN列表。感觉没有监控项为hash key,sn为filed简单。
    pragbyte
        11
    pragbyte  
       Jan 13, 2015
    @ry_wang 我觉得你的需求不如用 mongo
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3031 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 04:51 · PVG 12:51 · LAX 21:51 · JFK 00:51
    ♥ Do have faith in what you're doing.