告警通知变得轻松便捷——微信告警接口指南
557
2023-03-26
数据库压缩到底怎么做?
redis
redis的压缩是针对key的压缩
只针对string和list的value
lzf压缩限制长度要大于20,即使是aaaaaaaaaaaaaaaaaaaa也压不了,大于20才能压。原因没有深究
rdb内部的压缩
如何确认这个record是被压缩/解压的?
rdb解析每条数据,都有标识字段,压缩的record自然是单独的类型
解压缩
接口简单容易定位
所有的类型string/hash具体到底层,都是string,就会走这个压缩的过程rdbSaveRawString,内部来调用rdbSaveLzfStringObject
quicklist的压缩
链表压缩可以选择深度,quicklist是redis list的底层数据结构
什么时候做压缩?
也就是说,头尾不会压缩,其他的节点会压缩,在修改的时候同事把旧的节点给压缩了
这里有个问题,这里的节点压缩了,rdb存储的时候还要特别处理一下,判定已经压缩过,走rdbSaveLzfBlob
rocksdb
针对sst的压缩
调用关系
WriteBlock/BGWorkCompression -> CompressAndVerifyBlock -> CompressBlock -> CompressData
block本身有信息标记是否是压缩
写入的时候才压缩
blobdb
CompressBlobIfNeeded -> CompressData
GetCompressedSlice -> CompressData
总结
需要文件本身知道自己是压缩的,有元信息记录在内存中是否压缩要考虑业务场景,比如redis这个quicklist 压缩,因为list最近访问的就是头尾,其他不重要
发表评论
暂时没有评论,来抢沙发吧~