【问题标题】:Building a partial data downloader / caching mechanism构建部分数据下载器/缓存机制
【发布时间】:2013-06-07 17:09:01
【问题描述】:

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

它的使用方式是:

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# algorithm caching fragment segment


    【解决方案1】:

    您可以使用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] 查询)。

    【讨论】:

      猜你喜欢
      • 2016-12-25
      • 1970-01-01
      • 2020-05-27
      • 2012-03-02
      • 2013-01-21
      • 1970-01-01
      • 2021-07-24
      • 2013-11-15
      • 1970-01-01
      相关资源
      最近更新 更多