【发布时间】:2011-12-05 04:46:54
【问题描述】:
我们现在正在开发一个在线系统,我对何时使用内存搜索以及何时使用数据库搜索感到困惑。有人可以帮我弄清楚在搜索记录时要考虑的因素吗?
【问题讨论】:
我们现在正在开发一个在线系统,我对何时使用内存搜索以及何时使用数据库搜索感到困惑。有人可以帮我弄清楚在搜索记录时要考虑的因素吗?
【问题讨论】:
一个因素是,如果您需要一遍又一遍地查看相同的结果,请务必将它们缓存在内存中。当您使用 linq-to-sql 或实体框架(支持延迟执行的 ORM)时,这会成为一个问题。
因此,如果您有一个需要多次处理的IQueryable<SomeType>,请确保在启动多个foreach 循环之前使用ToList() 实现它。
【讨论】:
这取决于具体情况,但我通常更喜欢在可能的情况下进行内存搜索。
但是取决于上下文,例如,如果记录可以在一次搜索和另一次搜索之间更新,并且您需要搜索时的最新记录,显然您需要数据库搜索。
如果您需要存储在内存中的记录集(数据表)的大小很大,那么直接在数据库中搜索可能会更好。
但请注意,如果可以并且性能很重要,将数据加载到数据表中并进行搜索,例如使用 LINQ 进行过滤可以提高搜索本身的性能。
要记住的另一件事是数据库服务器的性能和应用程序服务器的性能:如果数据库服务器在搜索查询上足够快,也许您不需要在应用程序的内存中缓存,因此您可以避免一步。请记住,内存搜索的缓存会将计算请求从数据库移动到应用程序服务器...
你的问题不可能有绝对的回答,它是相对于你的上下文的......
【讨论】:
这取决于记录的数量。如果记录的数量很少,那么最好将其保存在内存中,即缓存记录。此外,如果经常查询记录,请选择内存选项。
但如果记录数或记录大小太大,则最好使用数据库搜索选项。
基本上这取决于您的服务器上有多少内存...
【讨论】: