JIMDB 大KEY治理

大KEY判定条件

  • 单个String类型的Key大小达到20KB并且OPS高
  • 单个String达到100KB
  • 集合类型的Key总大小达到1MB
  • 集合类型的Key中元素超过8000个

大KEY影响

  • 严重影响 QPS 、TP99 等指标,对大Key进行的慢操作会导致后续的命令被阻塞,从而导致一系列慢查询。
  • hgetall 、 smembers 等时间复杂度O(N)的命令使用不当,容易造成使用率过高。
  • 大Key发生热点,大 String,value 大于 20K。当OPS为 10000,流量即为 200M, 达到单实例的流量配额. 导致 JIMDB 无法正常提供服务。
  • 集群各分片内存使用不均。某个分片占用内存较高或OOM,发送缓存区增大等,导致该分片其他Key被逐出,同时也会造成其他分片的资源浪费。
  • 集群各分片的带宽使用不均。某个分片被流控,其他分片则没有这种情况,且影响宿主机上的其它应用。
  • 数据迁移失败 过大的Key(如超过1G),在迁移、缩容、扩容,主从全量同步在序列化过程中,内存上涨,数据同步失败,且存在 OOM 风险

大KEY扫描入口

泰山平台-存储服务-JIMDB集群列表-拓扑

  • 全集群扫描

  • 只有集群的拥有者才可以进行全集群扫描,扫描后点击查看扫描进度进行扫描结果的下载,可以单个实例进行下载,也可以通过“下载扫描结果”一次性下载所有实例

  • 单实例扫描

大KEY处理建议

  • String类型的大Key:可以尝试将对象分拆成几个Key-Value, 使用MGET或者多个GET组成的pipeline获取值,分拆单次操作的压力,对于集群来说可以将操作压力平摊到多个分片上,降低对单个分片的影响。
  • 集合类型的大Key,并且需要整存整取要在设计上严格禁止这种场景的出现,如无法拆分,有效的方法是将该大Key从JIMDB去除,单独放到其他存储介质上。
  • 集合类型的大Key,每次只需操作部分元素:将集合类型中的元素分拆。以Hash类型为例,可以在客户端定义一个分拆Key的数量N,每次对HGET和HSET操作的field计算哈希值并取模N,确定该field落在哪个Key上。
  • 禁止使用DEL直接删除大Key,可能会造成JIMDB阻塞,建议使用SCAN的方式进行循序渐进式删除。
  • 有些大Key是累积产生的,建议合理设置过期时间并对过期数据定期清理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值