我一直在阅读很多文章,建议在数据库前放置Memcached(或Velocity等)比直接点击数据库更有效。它将通过查找内存缓存中的数据来减少数据库上的命中数,这比访问数据库要快。
但是,SQL Server拥有数据库中对象的内存缓存。检索数据时,SQL Server会维护其缓存并将(如果需要)从其内存中提取行而不会访问磁盘。
因此,如果SQL Server拥有自己的缓存,外部Memcached(或类似)服务器的好处是什么?
我读过的大多数文章都是社交网站,大多数都使用MySql。但是,关于使用SQL Server的MySpace的article建议也在该系统上使用缓存。
答案 0 :(得分:16)
因此,如果SQL Server拥有自己的缓存,外部Memcached(或类似)服务器的好处是什么?
是的SQL Server有自己的缓存,但他只缓存:
- 查询计划
- 数据库文件中的页面
但他没有缓存:
- 查询结果
e.g。你有一个复杂的查询,它使用了大量数据的聚合 (想想:我们的客户数据库中有多少个不同的国家/地区: SELECT DISTINCT来自客户GROUP国家的国家/地区)
SQL Server将扫描整个客户表,但结果集只会有几个条目。 当您重新发出查询时,SQL Server将重用查询计划并重新扫描客户表, (如果你很幸运,这些页面仍在内存中)
使用memcached时,您可以存储结果集的几行,并在不连接数据库服务器的情况下反复重复使用它们。因此需要从数据库服务器获得一些负载 注意:如果您的数据在SQL服务器上发生更改,请注意一些陈旧的数据!!
答案 1 :(得分:4)
另一个好处还可能是SQL Server的扩展成本很高,而添加新的Web /缓存服务器可能会更便宜。
我们在应用程序级别使用缓存来存储各种事物,而不是从数据库中存储所有事物。您可以在代码中操作数据对象,然后添加到缓存中。
如果需要,您甚至可以存储标记(输出缓存)。
在一天内,通过使用缓存,我们将我们的网站从能够处理150个并发会话同时进行压力测试到800以上。我强烈建议使用它!
答案 2 :(得分:0)
Velocity等,特别是当您的SQL服务器位于自己的盒子上时。我们一直在使用ASP.NET的内置缓存,但希望转向Velocity。多个Web服务器与SQL集群通信,缓存确实有助于提高可伸缩性并减少SQL负载。