构建部分数据下载/缓存机制

时间:2013-06-11 18:24:02

标签: c# algorithm caching fragment segment

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

它的使用方式是:

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

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

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

我正试图解决几个问题:

  1. 如何根据存储在数据库中的已下载(如果有)数据段,正确确定需要下载的连续数据范围(来自/)?
  2. 理想情况下,我想进行一次Web服务调用,而不是多次调用。
  3. 收到数据后,如何填写数据库中的空白,丢弃已存在日期的信息?
  4. 到目前为止,我已尝试为第1项和第2项编写算法,但日期范围算法变得复杂,我无法完全使其工作。第3项应该是微不足道的。

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

1 个答案:

答案 0 :(得分:0)

您可以使用interval tree来存储已缓存的时间段 - 这样可以快速检索与用户查询重叠的缓存时间段。然后,您可以使用此time period library来确定需要向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.5],您将向Web服务提交[1,2]查询。)