【问题标题】:which is better... in-memory search or database access?哪个更好...内存搜索或数据库访问?
【发布时间】:2011-12-05 04:46:54
【问题描述】:

我们现在正在开发一个在线系统,我对何时使用内存搜索以及何时使用数据库搜索感到困惑。有人可以帮我弄清楚在搜索记录时要考虑的因素吗?

【问题讨论】:

    标签: c# caching search web


    【解决方案1】:

    一个因素是,如果您需要一遍又一遍地查看相同的结果,请务必将它们缓存在内存中。当您使用 linq-to-sql 或实体框架(支持延迟执行的 ORM)时,这会成为一个问题。

    因此,如果您有一个需要多次处理的IQueryable<SomeType>,请确保在启动多个foreach 循环之前使用ToList() 实现它。

    【讨论】:

    • 1+ 非常好的一点,我们中的许多人忘记了仅在需要结果时才实际执行 IQueryable 或 IEnumerable .ToList() 或 .SingleOrDefault() 或 FirstOrDefault() 。延迟太晚或太早会极大地影响性能。
    【解决方案2】:

    这取决于具体情况,但我通常更喜欢在可能的情况下进行内存搜索。

    但是取决于上下文,例如,如果记录可以在一次搜索和另一次搜索之间更新,并且您需要搜索时的最新记录,显然您需要数据库搜索。

    如果您需要存储在内存中的记录集(数据表)的大小很大,那么直接在数据库中搜索可能会更好。

    但请注意,如果可以并且性能很重要,将数据加载到数据表中并进行搜索,例如使用 LINQ 进行过滤可以提高搜索本身的性能。

    要记住的另一件事是数据库服务器的性能和应用程序服务器的性能:如果数据库服务器在搜索查询上足够快,也许您不需要在应用程序的内存中缓存,因此您可以避免一步。请记住,内存搜索的缓存会将计算请求从数据库移动到应用程序服务器...

    你的问题不可能有绝对的回答,它是相对于你的上下文的......

    【讨论】:

    • 啊谢谢你的回答,至少我知道缓存取决于情况。
    • 简而言之:当要检索的记录不是太大时,最好使用缓存...但是当要检索的记录被频繁访问时,太大了进入数据表,并且总是有更新,那么,最好进行数据库搜索..对吗??
    • 是的,我建议您对数据库搜索进行一些测试,如果性能良好,您可以,如果相反,性能是一种特权,您应该考虑内存中的方法......但是请记住我的考虑的答案。
    【解决方案3】:

    这取决于记录的数量。如果记录的数量很少,那么最好将其保存在内存中,即缓存记录。此外,如果经常查询记录,请选择内存选项。

    但如果记录数或记录大小太大,则最好使用数据库搜索选项。

    基本上这取决于您的服务器上有多少内存...

    【讨论】:

    • 哦,我明白了,非常感谢。
    • 不完全;还有其他问题。如果缓存,则会增加复杂性。您需要提出缓存失效和缓存刷新策略。根据您的操作方式,最终可能会包含大量代码。
    • @Esteban Araya - 谁在谈论代码部分......阅读关于将记录放入内存或从数据库访问的问题......
    • @PranayRana 该问题要求考虑因素。代码复杂性(因此维护成本)是一个重要因素。
    • @Pranay:在我看来这都是关于优化的,我们应该考虑每一个观点,可能是代码和搜索技术。
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多