分布式缓存学习笔记(六)—— 异步操作

本文探讨了RocksDB的批量写入技术对缓存性能的提升,并解释了为何RocksDB的MultiGet无法提升读取性能。接着,文章介绍了异步操作如何通过在新的goroutine中处理请求来提升服务端的吞吐量,但同时也带来了实现复杂度和时间开销。最后,总结了异步操作对性能提升的影响因素,指出客户端请求密度越高,性能提升越明显。
摘要由CSDN通过智能技术生成

上一章介绍了 RocksDB 的批量写入技术,以及如何将批量写入技术应用到缓存服务中。只需要改变rocksdbCache 结构体的内部实现,Set 操作就能有40%以上的写入性能提升。

那“如果 RocksDB 还支持批量读取,那我们的 Get 操作性能是否也可以得到提升?” 回答是:不行。RocksDB 虽然有一个批量读取 (MultiGet)功能,但是它不能让我们的读取性能得到提升。RocksDB的 MultiGet 无法提升读取性能的原因很简单:我们在第3章说过,RocksDB内部存储使用的是静态排序表 SST,而应用程序使用 MultiGet 读取的键不可能跟 SST中键的顺序保持一致,RocksDB 终究要去各个不同的 SST 表文件中查询每一个单独的键,这些键在 API 层面是否批量给出并没有太大区别。(批量写入之所以有效果是因为 RocksDB在写入的时候是不做排序直接写到 WAL日志里的另有线程在后台处理,将WAL合并到 SST 中。

异步操作能够提升读取性能的原理

在我们之前的实现中,服务端收到客户端的请求时,就会去调用 cache.Cache接口提供的方法并将结果返回给客户端。这是一种同步的操作,服务端在cache.Cache 的方法返回前都没有办法处理该 TCP 连接上的后续请求。这些后续请求会在服务端累积起来,等待服务,这样吞吐量就会下降。

异步操作是指当服务端收到请求时,它在一个新的goroutine里调用cache.Cache 方法,这样原来的 goroutine 就可以立即开始处理来自该TCP 连接的后续请求。
在这里插入图片描述
和批量写入会破坏数据的实时一致性和隐藏真实结果一样,使用异步操作也有它的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值