分布式二级缓存与优化数据库的优缺点有何不同

leo*_*ora 14 sql-server nhibernate asp.net-mvc distributed-caching second-level-cache

我们有一个使用nhibernate和二级缓存的网站.我们正在讨论一个人想要关闭二级缓存,因为我们正在转向多个Web服务器环境(前面有一个负载均衡器).

一个论点是摆脱二级缓存并专注于优化和调整Db.另一个参数是将分布式缓存作为二级缓存推出.

我很想听听人们在这里对数据库调优与分布式缓存(在涉及的工作量,成本,复杂性等方面的因素)的关系.

Pet*_*ter 13

在负载平衡方案的情况下,您必须使用分布式缓存提供程序来获得最佳性能和一致性,这与优化数据库无关.在任何情况下,您都应该优化数据库.


Jos*_*ale 8

都.您应该有一个分布式缓存,以防止对数据库和调优数据库的不必要调用,以便快速返回初始调用.作为一个例子,Facebook需要大量的缓存来扩展,但我敢肯定,如果初始查询需要10分钟,它将不会有多大好处.:)


Hec*_*rea 5

两个词:衡量它.

由于您已经有缓存实现它,您可以测量将其关闭以用于基准目的的影响.


Jag*_*uar 5

我认为多Web服务器和分布式二级缓存可以 - 并且可能应该共存.

首先,如果我们以memcached为例,它支持分布式对象存储,所以如果你不使用它,你可以切换到那个.有用.

其次,我猜你正在引入Web服务器场来响应不断增加的Web请求,这反过来意味着增加对数据的请求.如果您终止了缓存,那么优化数据库的程度并不重要,您将使用查询来摧毁它.因此,您将改善执行时间,但在等待数据库返回数据时.

对于Web节点1请求数据集A并且Web节点2请求数据集A - >您将要执行相同的查询两次而使用第二级缓存而您只执行一次的情况尤其如此.

所以我的建议是:

不要杀死你的二级缓存.您已经花费了资源来实现它,并且通过禁用它您不会提高应用程序的性能.甚至memcached的单个节点也会比没有任何一个节点更快.

优化您的数据库操作.这意味着从数据库端(索引,视图,sp,函数,可能是具有只读和只写节点的集群)和应用程序端(优化您的查询,懒惰/急切加载分析,不要获取您不需要的数据)不需要,通过Future,MutliQuery,MultiCriteria将多个查询组合成单次往返

不要优化二级缓存实现.有些数据集具有无限的到期日期,因此您只需为数据集查询一次,并且数据集的到期日期较短,因此可能会更频繁地执行昂贵的查询.通过优化你的查询和你的数据库,你要提高查询,但二级缓存也救不了你的皮肤上的峰值负载,其中短的有效期限数据集的性能被缓存更频繁地取出.

如果使用文本查询是日常操作,请使用数据库的全文功能,或者更好的是使用Lucene.NET之类的独立服务(可以通过NHibernate.Search与NHibernate集成)