代码之家  ›  专栏  ›  技术社区  ›  Pieter van Ginkel

维护本地资产缓存

  •  0
  • Pieter van Ginkel  · 技术社区  · 15 年前

    我正在编写一个GUI远程客户机,服务器在其中定义和执行屏幕,一个小的GUI应用程序在客户机上可视化这一点。我知道这听起来很像一个网站,这个系统将有一个Web客户机,但目前我主要关注的是WPF客户机的实现。

    这个系统的一部分是我需要在服务器和客户机之间同步资产。服务器将所有资产存储在 .zip 文件或作为文件系统上的目录结构;我还没有决定。这些资产可能会发生变化:资产可能会被添加、删除或修改。这些修改需要与客户机同步。

    我的问题是如何在客户机上存储这些资产。 我提出了以下要求:

    • 资产由类似路径的键(例如 Images/Icons/16/add.png ;

    • 必须为每个资产维护一个CRC32,以检测Chagnes;

    • 大约有100到200个资产;

    • 资产大小将介于1 KB和500 KB之间(只有一个或两个);中等大小为8 KB;大多数 .png 图像文件;

    • 由于加载的资产将被缓存在内存中,因此检索不必太快;

    • 由于资产不经常更改,因此更新本地缓存不必太快。

    我想出了以下方法:

    • 光盘上的文件。 这有以下优点:

      • 易于实施;

      • 快速更新和检索;

      以及以下缺点:

      • 光盘上有许多“某处”的文件;

      • 无法存储元数据(CRC32);

    • 将文件存储在 邮编 文件。 这有以下优点:

      • 清晰的存储机制,良好的.NET支持;

      • 为我维护一个CRC32(我相信);

      以及以下缺点:

      • 随机文件的更新和检索相对缓慢(我相信);

      • 无法存储额外的元数据(但不知道是否需要);

    • 在sqlite数据库中存储文件。 这有以下优点:

      • 清晰的存储机制,良好的.NET支持;

      • 允许存储各种元数据;

      • 快速更新和检索随机文件;

      以及以下缺点:

      • 可能完全是杀戮过度;

      • 我担心sqlite的二进制支持。

    我的问题是1。我是否忽略了一个明显的选择和/或2。什么方法最好。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Scottie    15 年前

    就我个人而言,我会使用sqllite(或mysql,它是开放源码和免费的)。

    根据我的经验,即使是小应用也有一种成长为大应用的方式,你会很高兴你使用了正确的技术,即使它在一开始就被过度杀戮了。

        2
  •  0
  •   Pieter van Ginkel    15 年前

    使用kiss方法:只需将整个资源文件下载到客户端。

    资源库不会得到那么大,1 MB到2 MB。整个 .zip 可以使用单个哈希检查文件的更改,并且仅在更改时更新。因为这种情况不会经常发生(一个月最多一次),所以这不是问题。

    推荐文章