2010-06-21 84 views
18

我一直在阅读很多文章,建议将Memcached(或Velocity等)放在数据库前比直接打数据库更有效。它将通过查找内存缓存中的数据来减少数据库点击次数,这比访问数据库要快。Memcached vs SQL Server缓存

但是,SQL Server拥有自己的内存缓存,用于数据库中的对象。当数据被检索时,SQL Server维护它的缓存并且将(如果需要的话)从它的内存中拉出该行,而不是击中该磁盘。

因此,如果SQL Server具有自己的缓存,那么外部Memcached(或类似的)服务器有什么好处?

我一直在阅读的大部分文章都是围绕社交网站,大多使用MySql。然而,关于使用SQL Server的MySpace的article建议在该系统上也使用缓存。

article解释何时应该使用缓存,并且这article是一个对位。

回答

13

因此,如果SQL Server有自己的缓存,那么外部Memcached(或类似的)服务器有什么好处?

是SQL Server有自己的缓存,但他只缓存:
- 查询计划
- 网页数据库文件中的

但他不缓存:
- 结果从查询

eg你有一个使用一些聚集了很多数据 的复杂查询(认为:我们有多少个不同的国家有我们的客户数据库: 从客户GROUP SELECT DISTINCT逐国)

SQL Server将扫描次全客户表,但结果集只有几个条目。 当你重新发出查询,SQL Server将重用查询计划,并重新扫描客户表, (如果你是幸运的页面仍然在内存中)

当你使用memcached你可以存储的几排您的结果集并重复使用它们而不连接到数据库服务器。所以它会从你的数据库服务器中获取一些负载
注意:如果您的数据在SQL服务器上发生更改,请谨防一些陈旧的数据!

+0

谢谢。我不知道它将整个表存储在内存中。很难找到它的文档。你有链接记录这个? – 2010-06-22 13:46:33

+0

纠正我最后的评论 - 我意识到页面存储在内存中,而不是整个表格。 – 2010-06-22 14:03:16

+1

当您已经对同一列进行分组时,您不必在列上使用DISTINCT。 – Kiril 2014-10-05 12:03:10

0

Velocity等,特别是当你的SQL服务器位于它自己的盒子上时。我们一直在使用ASP.NET的内置缓存,但希望转移到Velocity。几个Web服务器与SQL集群进行通信,缓存确实有助于提高可伸缩性并减少SQL负载。

4

另一个好处也可能是SQL Server的扩展比较昂贵,而增加一个新的web/caching服务器可能会更便宜。

我们在应用程序级别使用缓存来存储各种事物,而不是全部来自数据库。您可以在代码中操作数据对象,然后添加到缓存中。

如果需要,您甚至可以存储标记(输出缓存)。

在有一天使用缓存,我们的网站从能够处理150个并发会话,同时压力测试超过800.我强烈建议使用它!