日期:2014-05-17  浏览次数:20689 次

记录不多的字典数据没有必要在应用程序中做缓存吗?
在官方的博客看到如下内容:
http://blogs.msdn.com/b/apgcdsd/archive/2012/01/18/sql-server-2012-1-18.aspx

SQL Server要访问的数据,是一定要缓冲在内存里的

不管是要查询的数据,还是要修改的数据,SQL Server在运行客户端发过来的语句,处理这些数据之前,都要检查其访问的数据是否在内存中。如果不在内存中,SQL Server会先把存储数据的页面从磁盘调入内存,然后再做真正的数据处理。

数据处理完毕后,SQL Server不会马上把这段数据缓存丢弃。只要SQL Server不缺内存,先前访问过数据页面就会一直缓存在SQL 
Server进程的地址空间里。这样,如果下次有其他用户要访问同样的数据记录,SQL
Server就可以马上在内存中进行处理,而不需要再到磁盘上去找。

这样的设计,可以最大程度的重用内存,提高SQL Server的处理速度。同时也决定了,SQL Server是一个非常喜欢大内存的应用程序。


根据上面描述,如果我们应用程序中所使用的字典数据(如配置信息)在记录量不是很多的情况下(比如小于100条),那就没有必要通过程序在内存中做缓存处理了,因为在程序中做缓存处理的目的就是减少程序对数据库的访问查询,但实际上SQL SERVER自身已经具备这个功能了,再在程序中做缓存处理不就是多余吗?
------解决方案--------------------
其他数据库产品我没用过,但是我相信所有关系数据库管理系统都一定会占内存,但是这部分主要是执行计划和缓存数据。

你这句:同时也决定了,SQL Server是一个非常喜欢大内存的应用程序  有点片面了。

我个人觉得只要内存足够,能缓存的都缓存吧。听说微软下一代数据库,就是SQLServer2012以后的那个,是内存数据库。
------解决方案--------------------
在程序中做缓存和数据库在内存中不冲突啊,程序中做缓存,程序中频繁访问程序缓存中的内容就不消耗服务器端资源。但是对客户端就有些影响吧
------解决方案--------------------
那就没有必要通过程序在内存中做缓存处理了,因为在程序中做缓存处理的目的就是减少程序对数据库的访问查询,但实际上SQL SERVER自身已经具备这个功能了,再在程序中做缓存处理不就是多余吗?

---扫1K内存和100M内存耗时那个快?
在程序中做缓存处理不就是多余吗?真的多余吗?
------解决方案--------------------
你可以把配置信息等存放在XML、TXT等文件中,自己写个代码去获取,文件可以存放在服务器端,这个比读数据库快多了。