从数据库查询还是从内存查询?哪个更快?

4
我正在尝试提高一个Windows服务的性能,该服务使用C#和.NET 2.0开发,处理大量文件。我希望每秒钟能够处理更多的文件。
在处理过程中,对于每个文件,服务会进行数据库查询以检索系统的一些参数。
这些参数每年都会发生变化,我考虑如果将这些参数作为单例加载,并定期刷新此单例,那么我会获得一些性能提升。而不是为每个正在处理的文件进行数据库查询,我可以从内存中获取参数。
补充一下场景:我正在使用Windows Server 2008 R2 64位,数据库是SQL Server 2008,如前所述,使用C#和.NET 2.0。
我的做法正确吗?你会怎么做?
谢谢!

听起来没问题...不过我也不知道还有什么其他的回答? :P - FarligOpptreden
对我来说,这听起来是个好主意。一个缓存系统会很高效。 - ken2k
我想这取决于您需要存储多少数据。如果数据量很小,那么可以将其存储在内存中。内存读取始终比硬盘读取快。尽管SQL Server会很好地保持缓冲区,但如果您自己存储所有内容,它将始终存在于内存中。不确定会得到多少的权衡。使用.NET EQATEC分析器(免费版)并将查询与内存读取进行比较。 - JeremyK
谢谢@JeremyK,我会寻找EQATEC分析器。 - Guilherme de Jesus Santos
这是一个很棒的应用程序。它将向您展示每个函数完成所需的时间,调用次数等等。而且它是免费的。这可不错啊 :) 祝你好运。 - JeremyK
3个回答

6

这些参数每年都会更改

是的,请将它们缓存在内存中。特别是如果它们很大或复杂。

您应该在一年的正确时间失效它们,具体取决于需要多么精确。

简单地将它们缓存一小时甚至几分钟可能是一个不错的折衷方案。


3

RAM内存数据访问绝对比其他数据访问更快,除了像寄存器和CPU缓存这样的CPU内存。

即使你每分钟更改一次缓存,缓存仍然会更快。因此,缓存查询非常快。


2
穿越网络或访问磁盘总是比内存访问慢几个数量级。
数据库可以将数据缓存在内存中,因此如果您可以做到这一点并且没有跨越网络,那么数据库可能会更快,因为它们的数据访问模式/索引等可能比您的代码更快。但这是最理想的情况——如果您需要更快的速度,则内存缓存有所帮助。
但是,请注意,内存缓存可能会增加复杂性和错误。您必须确定缓存数据的生命周期、如何刷新以及它越复杂,您将拥有更多奇怪的边缘状态错误。即使它们每年都会改变,您也必须处理那个分界点。

感谢@bryanmac。在我的情况下,我将跨网络。感谢您提供的复杂性建议。 - Guilherme de Jesus Santos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接