我一直在阅读很多文章,建议将Memcached(或Velocity等)放在数据库前面比直接点击数据库更有效.它将通过查找内存缓存中的数据来减少数据库上的命中数,这比访问数据库要快.
但是,SQL Server为数据库中的对象提供了自己的内存缓存.检索数据时,SQL Server会维护其缓存并将(如果需要)从其内存中提取行而不会访问磁盘.
因此,如果SQL Server拥有自己的缓存,那么外部Memcached(或类似)服务器的好处是什么?
我读过的大多数文章都是社交网站,大多数都使用MySql.但是,一篇关于使用SQL Server的MySpace 的文章表明,该系统也使用了缓存.
此文章解释时,应使用缓存,这文章是对位.
因此,如果SQL Server拥有自己的缓存,那么外部Memcached(或类似)服务器的好处是什么?
是SQL Server有自己的缓存,但他只缓存:
- 查询计划
- 数据库文件中的页面
但他没有缓存:
- 来自查询的结果
例如,您有一个复杂的查询,它对大量数据使用了一些聚合(想想:我们在客户数据库中有多少个不同的国家:来自客户GROUP BY国家/地区的SELECT DISTINCT国家/地区)
SQL Server将扫描整个客户表,但您的结果集只会长几个条目.当您重新发出查询时,SQL Server将重用查询计划并重新扫描客户表,(如果幸运的话,页面仍在内存中)
当您使用memcached时,您可以存储结果集的几行,并在不连接到数据库服务器的情况下反复重复使用它们.因此需要从数据库服务器获得一些负载.
注意:如果您的数据在SQL服务器上发生变化,请注意一些陈旧的数据!