C# 如何使用每个类别的结果数构建搜索?

C# 如何使用每个类别的结果数构建搜索?,c#,asp.net,optimization,caching,facet,C#,Asp.net,Optimization,Caching,Facet,我需要显示给定类别的结果数量,并隐藏任何没有结果的类别 示例:显示城市、工作类别、经验等类别中的结果数 我在C#/Asp.Net中工作,担心如果没有一些认真的缓存和sql优化,我们的服务器会阻塞 您将如何继续创建这样一个解决方案?我认为您必须详细了解您的设置。你在用ORM吗?数据是否已在内存中?请求是怎么进来的?你具体关心什么?您是否做过任何分析来确定这确实是一个问题我再强调最后一个问题也不为过。在你试图找到解决方法之前,确保你害怕的是一个实际问题 但是,如果你做了这样的事情 _category

我需要显示给定类别的结果数量,并隐藏任何没有结果的类别

示例:显示城市、工作类别、经验等类别中的结果数

我在C#/Asp.Net中工作,担心如果没有一些认真的缓存和sql优化,我们的服务器会阻塞


您将如何继续创建这样一个解决方案?

我认为您必须详细了解您的设置。你在用ORM吗?数据是否已在内存中?请求是怎么进来的?你具体关心什么?您是否做过任何分析来确定这确实是一个问题我再强调最后一个问题也不为过。在你试图找到解决方法之前,确保你害怕的是一个实际问题

但是,如果你做了这样的事情

_categoryRepository
  .Where(category=>category.Matches(query))
  .Select(category.Items.Count())
Count()仅对category.Matches(查询)返回true的类别执行。

。这只是工作的错误工具。相反,请看、、等

我个人建议,这很容易入门,并且可以在一个简单的环境中编写一个面向方面的ASP.NET应用程序


免责声明:我是上述库的作者。

完成这些计数的典型方式是通过缓存。该模型将在插入相关表时具有触发器,然后使用“CurrentCount”更新计算字段

您可以在应用程序本身中添加更高级别的缓存,这样计数只会每隔几个小时增加一次,或者类似


这比每次实际计算所有行要好得多,但这确实意味着您需要提前知道要计算的数据类型,以便可以进行预计算。

我正在构建一个有7年历史的解决方案,没有ORM,没有对象,只有简单的旧数据集。总行数很大(10K),因此不能将所有数据都保存在内存中。使用DDD/linq进行重构/重建会很好,但没有时间了。所以就我而言,我需要为每个类别库中的每个类别项添加一个查询(选择count(*),其中city=='[city]')。每个主要查询都会有数百个这样的“计数查询”——这是我最大的担忧。现在这个网站的速度已经够慢了,所以即使没有进行评测,我也能猜到结果。@comichael-选择很少,解决方案也很少。如果您只愿意使用SQL,那么唯一可用的解决方案就是缓存。至少要构建一个隐藏原始SQL的类别存储库类,这样更容易在该级别进行缓存。此外,即使站点速度很慢,您也应该对其进行评测-您确定数据库是瓶颈吗?在asp.net应用程序中,它通常是其他类型的。您使用的是什么类型的数据库?Oracle、MySQL等。请参阅下面我对George Mauer回答的评论。