注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风轻扬

活着就是为了追求幸福

 
 
 

日志

 
 
关于我

关注互联网应用架构、分布式与海量数据处理技术、云计算、数据库技术

网易考拉推荐

数据库内置行级缓存 vs Memcached  

2008-07-28 17:42:40|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
应该说这是一篇战斗檄文,是我们开发新的MySQL存储引擎,内置行级缓存功能,向Memcached系统发起挑战的战斗檄文。

实际上谁来代替不了谁,数据库内置行级缓存与Memcached各有优缺点。先说Memcached的缺点,很明显的:
1、应用需要操作两套数据存储系统,开发复杂度增加;
2、Memcached数据没有持久化,也没有替换通知机制,用Memcached来缓存数据更新是危险的,因此数据更新造成的负载通常没法用Memcached降低;
3、要考虑缓存失效问题,有时候是头疼的,特别是用Memcached来缓存一个复杂数据库查询结果的时候;
4、Memcached不支持分布式事务,理论上Memcached中的数据与数据库中的数据要保持一致是相当困难的,不过实际上Web 2.0应用中这一点没什么问题

再说数据库内置行级缓存的优点:
1、应用只需要操作数据库,生产力提高,应用开发周期变短;
2、性能高,直接操作数据库取记录总比先到Memcached中取记录,发现没有再从数据库中取总的开销要小,当然前提是数据库有像Memcached同样功能的行级缓存;
3、不用担心数据不一致、缓存失效、更新丢失等问题;
4、数据更新可以只更新行级缓存中的数据,用日志保证可靠性,频繁更新操作的负载被降低;
5、可以用SQL来操作,比如在Memcached中要批量删除满足一定条件的缓存记录是麻烦的事,用数据库可能就不成问题了;

不过Memcached也有优点,数据库内置行级缓存也有缺点,比如:
1、数据库在远程,在本地放个Memcached缓存肯定效果更好;
2、Memcached灵活,想放什么对象就放什么对象,不一定与数据库记录一一对应;
3、Memcached扩展方便,不过也会导致缓存全部失效,可能给数据库造成太大压力;
4、通过Memcached的API操作数据效率高一些,没有SQL解析、优化等开销;

其中上述第4点可以通过让数据库也提供类似于Memcached的高性能API来解决,这样两套API操作同一份数据,没有数据不一致问题,没有代码复杂化(应用是选择要么用A API,要么用B API,而不是用Memcached的那样先用A API,发现不行再用B API)

上述第2点也不是本质的,在数据库中同样也可以定义一张表,只有key和value两个字段,就可以当成一个Memcached来用,eBay就用数据库做cache。

如果应用用Memcached,缓存的对象基本上对应于数据库记录,并且应用服务器和数据库在同一局域网的话,用数据库内置行级缓存应该是比较好的。
  评论这张
 
阅读(2336)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017