【问题标题】:How to reduce round trip to database in Search engine using REST如何使用 REST 减少搜索引擎中数据库的往返行程
【发布时间】:2016-01-22 14:38:23
【问题描述】:

我在 MS Sql 服务器数据库表中有数千条记录,为了让它在网页上快速搜索它,我创建了 WCF REST 服务,该服务返回通过转换为 JSON 的关键字从数据库中获取的记录列表,并显示在 html 下方的 DIV 中html页面中的文本框。 (如谷歌搜索文本框)。

我使用服务器端缓存对象在一定程度上避免数据库命中。 但我不得不在每次文本更改时点击 REST GET url。

有什么建议可以加快速度吗?

【问题讨论】:

  • 缓存在客户端,只有在查询选择性降低时才去服务器?
  • 谢谢,我正在尝试这个,但随后这会使客户端的缓存增加,客户端可以看到整个记录。
  • 在一定程度上提高了性能,但我认为在客户端保存数据库记录没有任何意义,它将是特定于客户端的。
  • 一千条记录看起来就像一张很小的表。即使是幼稚的策略也应该足够快地用于这种大小的数据库,除非您的查询具有极其复杂的连接或巨大的文本块。如果您的表中有大量文本 blob,那么您可能想要探索全文索引。如果您有复杂的连接,那么您可以采取一些选项来加快查询速度。
  • 如果往返是您的瓶颈,那么您肯定希望减少对服务器的查询次数。与其做数千个小查询,不如做几个更大的查询。每当您有一个返回项目列表的 API 时,也要进行分页。没有示例查询,很难给出具体建议,您可以在此处发布一些来自您现有应用程序的示例查询吗?

标签: wcf rest


【解决方案1】:

当您使用 Rest 时,您正在向您的服务发出 http 请求。您可以利用 ASP.Net 的输出缓存。

调用会到达服务器,但它会自动响应您的请求而不运行代码。

你这样做:

[AspNetCacheProfile("CachePoliceName")]
    [WebGet(UriTemplate = "{userName}")]
    public String GetData(string parameter)
    {   // your code }

如果需要,您需要在配置文件中启用 AspNet 兼容性:

<system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />    
</system.serviceModel>

在此处查看更多信息:https://msdn.microsoft.com/en-us/library/vstudio/ee230443%28v=vs.100%29.aspx

在这里:http://blogs.msdn.com/b/endpoint/archive/2010/01/28/integrating-asp-net-output-caching-with-wcf-webhttp-services.aspx

希望对你有帮助。

【讨论】:

  • 是的,实际上我需要实现服务器端和客户端缓存。
【解决方案2】:

有一种方法可以减少您的 REST 调用。有一些技术可用于客户端缓存,它允许缓存 ajax 响应,以便下次如果重复相同的请求,结果会从缓存中产生。但是您必须非常小心使用此类技术,因为这可能会导致错误的结果和行为。

看到这个answer。它与您的问题相似,但讨论非常有趣,它将让您深入了解客户端缓存实现以减少 Ajax 调用往返。

【讨论】:

  • 是的,实际上我需要实现服务器端和客户端缓存。
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2021-11-26
  • 2017-07-23
  • 1970-01-01
  • 2014-04-14
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多