我正在尝试编写一个.NET / MS SQL应用程序,它将从Web服务下载每日天气数据,我想将这些数据存储/缓存在本地数据库中。
它的使用方式是:
我用来下载天气数据的网络服务也接受来自/到日期作为参数。
因为我无法知道用户将输入哪些日期,所以我最终可能会在数据库中缓存分段数据。
我正试图解决几个问题:
到目前为止,我已尝试为第1项和第2项编写算法,但日期范围算法变得复杂,我无法完全使其工作。第3项应该是微不足道的。
是否已有解决类似问题的算法?
答案 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]查询。)