搜索策略以有效地从服务或服务器加载数据?

时间:2016-08-23 01:39:04

标签: java c# performance search design-patterns

这个问题不是一个特定于语言的问题,它是某种与模式相关的问题,但我想用一些我能理解的流行语言来标记它。

我对将数据与搜索数据(尤其是移动环境)结合使用有效加载的要求不太熟悉。

之前使用的策略是将所有内容加载到本地内存中并从那里搜索(例如在C#中使用LINQ)。

每次执行新搜索时,还有一个策略是重新加载数据。做这样的事情当然不高效,我们也可能需要做一些更复杂的事情来将新加载的数据与现有数据(已经加载到本地存储器)同步。

我能想到的最后一个策略是最难实现的策略,即懒惰地将数据与搜索执行一起加载。也就是说,执行搜索时,返回结果应该在本地缓存。在从服务/服务器获取新结果之前,搜索应首先查看本地内存。因此,每次搜索的结果都是本地搜索和服务器搜索的组合。这里的目的是减少每次运行搜索时从服务器重新加载的数据量。

以下是我能想到的实施这种策略的方法:

  • 运行搜索时,请先查看本地内存。完成此步骤可以得出本地结果。
  • 现在,在向服务器端发送搜索请求之前,我们需要以某种方式传递已经放入结果(本地)的内容,以便在服务器端搜索时将其排除在结果之外。因此,搜索方法可以包括包含由fisrt步骤找到的所有项ID的参数列表。 通过该搜索请求,我们可以排除找到的结果并仅将新项目返回给客户端。
  • 最后一步是合并2个结果:从本地和服务器获得最终搜索结果,然后在UI上显示给用户。

我不确定这是否是正确的方法,但我感觉不太好的是在第2步。因为我们需要将步骤1中找到的项目ID列表发送到服务器,所以如果我们有数百或数千个这样的ID,那么在这种情况下将它们发送到服务器可能效率不高。此外,排除如此大量项目的查询可能也不高效(即使使用直接SQL或LINQ)。我现在仍然感到困惑。

最后,如果您对某个生产项目有任何更好的想法和重要的实施,请与我分享。我不需要任何具体的示例代码,我只需要一些想法,实现的步骤(就像我上面描述我的想法一样)。非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我会通过认为本地和远程是两个不同的数据源来解决问题,

  1. 触发搜索时,将针对两个数据源(本地 - 内存和服务器)启动搜索

  2. 最有可能是本地搜索会先生成结果,因此请将其显示给用户。

  3. 从服务器返回结果时,您可以追加非重复结果。

  4. 可选 - 如果服务器数据已更改且某些结果已删除/或更改,请更新/删除本地结果并更新视图。