1

我正在尝试编写一个 .NET/MS SQL 应用程序,该应用程序将从 Web 服务下载每日天气数据,并且我想将该数据存储/缓存在本地数据库中。

它的使用方式是:

  • 用户将访问我的网页,输入开始和结束日期范围
  • 该代码将从数据库中检索数据,并从 Web 服务中检索任何丢失的数据。
  • 请求日期范围的天气数据将呈现给用户。

我用来下载天气数据的网络服务也接受从/到日期作为参数。

因为我不知道用户将输入哪些日期,所以我最终可能会在数据库中缓存分段数据。

我正在尝试解决几个问题:

  1. 如何根据存储在数据库中的已下载(如果有)数据段正确确定需要下载的连续数据范围(从/到)?
  2. 理想情况下,我想进行一个 Web 服务调用而不是多个。
  3. 收到数据后,如何填写数据库中的空白,丢弃已存在日期的信息?

到目前为止,我已经尝试为项目 1 和 2 编写算法,但是日期范围算术变得复杂,我无法完全让它工作。第 3 项应该是微不足道的。

是否已经有解决类似问题的算法?

4

1 回答 1

0

您可以使用间隔树来存储您已缓存的时间段 - 这将让您快速检索与用户查询重叠的缓存时间段。然后,您可以使用此时间段库来确定需要将哪些查询提交给 Web 服务,以便通过获取查询间隔和缓存间隔之间的差异来填充用户的查询。

填写用户查询后,您应该重新组织间隔树以合并任何重叠或相邻的时间间隔(例如,如果您之前缓存了间隔 [2, 6] 和 [12, 16] 以及用户查询 [4, 14] ,那么您应该向 Web 服务提交一个 [6, 12] 查询,从区间树中删除 [2, 6] 和 [12, 16] 区间,并在它们的位置添加一个 [2, 16] 区间)。如果您想避免对 Web 服务进行太多查询(例如,如果用户想要 [1, 2] 并且您已经缓存了 [1, 1.1], [1.3, 1.4],那么您可能还希望避免缓存小间隔, [1.5, 1.6], [1.8, 1.9],那么您将进行 4 次查询来填充用户的查询),方法是丢弃小间隔或始终检索最小间隔,这样您的缓存间隔都不会“太小” "(例如,如果用户查询 [1.4, 1.

于 2013-06-11T18:47:44.497 回答