选择存储和缓存

时间:2012-01-09 11:34:27

标签: c++ caching storage

我希望能够很好地选择这个标题来提出这个问题。

如果没有,请随时编辑,请接受我的道歉。

我目前正在布局一个与网络交互的应用程序。

解释程序的基本流程:

用户在我的程序中输入UserID,然后用于通过Web访问多个xml文件:

http://example.org/user/userid/?xml=1

此文件包含用户在DRM系统中拥有的多个产品ID。然后,此列表用于访问有关用户与产品交互的统计信息和信息:

http://example.org/user/appid/stats/?xml=1

这还包含指向该应用程序特定的各种图像的链接。这些可能会随时更改,需要下载才能在应用中显示。

这就是恐怖开始的地方,至少对我而言:D。

1.。如何将该信息存储在用户的PC上?

我考虑过为userid使用目录,然后使用appid子目录来缓存图像和xml文件,以便按需加载它们。我还考虑过在使用相同结构时使用zipfile。

或者更倾向于使用像sqlite这样的本地数据库?

平均应用数量可能约为100-300,每个应用的统计数据和图像基本上为5-700。

2.。)我应该何时刷新内容?

糟糕的是,下载此数据的网站,或者更确切地说是xmls,在上次刷新/更改时不包含任何时间戳。因此,我需要散列所有文件并在用户访问该数据时进行比较,这可能需要花费一定的时间,因为它是基于Web的。好的,有超时,但我需要阻止访问内容,直到数据被下载和处理或超时发生。在这两种情况下,应用程序将无法访问很短或甚至很长时间,我想避免这种情况。我可以让用户在需要时手动进行刷新,但我希望有更好的方法。

特别是上面提到的应用程序和内容的数量。

感谢阅读和所有这些,请随时问我是否忘记解释一些事情。

1 个答案:

答案 0 :(得分:0)

  1. 使用数据库可能是值得的,因为它可以节省您对结构化数据的文件格式的困扰。请记住不时删除和重建它(或确保彻底删除旧的东西并不时地压缩它,但它可能更容易重新开始,因为它只是一个缓存)。

  2. 如果Web服务没有提供何时重新加载的线索,那么您只需自己决定,但确保检查HTTP标头是否有任何缓存说明以及XML数据[* ]。确定数据的合理陈旧性(用户花在盯着结果上的时间是绝对最小值,因为无论你做什么,他们都会看到陈旧的结果)。每当您下载任何内容时,请记录下载它的日期/时间。刷新缓存中的旧数据。

  3. 为防止长时间延迟刷新数据,您可以:

    • 直观地表明数据是陈旧的,但无论如何都要显示它,并在刷新后替换它。
    • 当用户看到很多东西时,
    • 允许staler数据,而不是只看到少量东西。所以,在等待少量东西时你会“无所事事”,但在等待大量东西的时候却没有。
    • 运行一个后台任务,除了将旧东西从缓存中过期并重新加载之外什么都不做。主应用程序始终显示最佳可用,无论多旧。

    或某些战术组合。

    [*]想想看,如果网络服务器提供了合理的缓存说明,那么在您的应用中忘记任何类型的存储或缓存可能是最简单的。只需获取XML文件并显示它们,然后通过已集成到应用程序中的缓存Web代理获取它们。我不知道代理哪些容易 - 你可以自己编译Squid(当然),但我不知道你是否可以将其链接到另一个应用程序而无需自己修改它。