每天百万次访问请求的缓存数据丢失的解决方案
2017-08-24 18:40
274 查看
今天看了一篇微信公众号的文章讲解了eBay在解决缓存数据丢失的时候曾经思考的三种解决方案。
在当前比较常用的缓存数据库中,比较常用的有redis和mongodb。不论是redis还是mongodb,在其内部数据都是以json格式进行存储的。这两个数据库在数据量的级别不同的时候,缓存的性能也存在差异。所以也不能简单说redis和mongodb到底哪个好。
可以支持百万级/天的访问量已经相当不容易了,这里先暂时不讨论怎么达到百万级的访问量。
缓存数据库中其实是有一定的容量限定的,当容量达到一定的限度就会按照某种策略删除一部分数据;另外,缓存的时间也是有限制的,当超过设定的时间之后,也会删除缓存的数据。另外,我认为缓存的时候,有数据丢失也可能是因为网络拥塞或者数据库的io问题导致的。
为了解决缓存数据丢失问题。eBay团队的成员想了3个解决办法:
(1)对mongodb中存储的数据进行切片
当在mongodb中存储新数据的时候先对数据进行切片处理。这样做的好处是可以减少单一mongodb中心节点的写入次数和网络开销。但是这种方式最终被否认了,因为切分之后,写入数据的速度的确变快了,但是查询数据的时候又需要把之前切分的数据整合起来,这个时间开销可能比直接不切分数据的时间总开销还大。所以这种方法相当于拆东墙补西墙,最终还是不能完美的解决问题。
(2)有选择的写入
eBay团队想出的另一个办法就是:只针对当特定值发生变化的时候,才启动写操作。这种想法从一定程度上缓解了io压力,但是mongodb中可以在更新的时候插入一个新的字段,如果是这种方式,那么最终却会更新整个文档,如果是这样,这个办法也是不可行的。
(3)压缩传输数据
这个办法可以减少存储的数据量的规模,也可以从一定程度上降低网络的开销,还不用修改业务逻辑,应该是一种非常好的解决办法了。
在当前比较常用的缓存数据库中,比较常用的有redis和mongodb。不论是redis还是mongodb,在其内部数据都是以json格式进行存储的。这两个数据库在数据量的级别不同的时候,缓存的性能也存在差异。所以也不能简单说redis和mongodb到底哪个好。
可以支持百万级/天的访问量已经相当不容易了,这里先暂时不讨论怎么达到百万级的访问量。
缓存数据库中其实是有一定的容量限定的,当容量达到一定的限度就会按照某种策略删除一部分数据;另外,缓存的时间也是有限制的,当超过设定的时间之后,也会删除缓存的数据。另外,我认为缓存的时候,有数据丢失也可能是因为网络拥塞或者数据库的io问题导致的。
为了解决缓存数据丢失问题。eBay团队的成员想了3个解决办法:
(1)对mongodb中存储的数据进行切片
当在mongodb中存储新数据的时候先对数据进行切片处理。这样做的好处是可以减少单一mongodb中心节点的写入次数和网络开销。但是这种方式最终被否认了,因为切分之后,写入数据的速度的确变快了,但是查询数据的时候又需要把之前切分的数据整合起来,这个时间开销可能比直接不切分数据的时间总开销还大。所以这种方法相当于拆东墙补西墙,最终还是不能完美的解决问题。
(2)有选择的写入
eBay团队想出的另一个办法就是:只针对当特定值发生变化的时候,才启动写操作。这种想法从一定程度上缓解了io压力,但是mongodb中可以在更新的时候插入一个新的字段,如果是这种方式,那么最终却会更新整个文档,如果是这样,这个办法也是不可行的。
(3)压缩传输数据
这个办法可以减少存储的数据量的规模,也可以从一定程度上降低网络的开销,还不用修改业务逻辑,应该是一种非常好的解决办法了。
相关文章推荐
- .NET中EXCEL数据访问数据丢失的分析与终极解决方案
- 关于js处理ajax请求返回json数据时出现页面缓存的解决方案(适用于showdialog)
- PHP ajax访问服务器 $_SESSION数据丢失解决方案
- 一个项目如何请求访问,另一个封装好的接口项目的数据
- 遭遇“HTTP 错误 500.19 无法访问请求的页面,因为该页的相关配置数据无效。”
- jquery之核心,包括核心函数,对象访问,数据缓存,队列控制,插件机制
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效
- 访问请求数据
- ASP.NET下用相对路径访问ACCESS数据解决方案
- 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
- 远程数据访问的解决方案
- IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效
- 为了防止数据库崩溃使数据丢失的解决方案
- 跨域请求数据解决方案整理
- 缓存一致性和跨服务器查询的数据异构解决方案canal
- IE浏览器缓存Ajax请求之后不更新数据问题
- 网络请求框架——OkGo解读(一)——数据的缓存
- 分页解决方案 之 数据访问函数库——另类的思路、另类的写法,造就了不一样的发展道路。
- Volley 请求数据之数据不缓存
- 请求访问数据 展示在listview上 多条目根据奇偶数