【问题标题】:Architecture solution about snapshotting file system快照文件系统架构解决方案
【发布时间】:2013-06-28 19:41:37
【问题描述】:

请帮助我思考一个问题。我有一个用 C++/Qt 编写的应用程序(我们称之为X),它应该存储并定期更新有关用户系统上安装的所有应用程序的信息。在 Linux 上,根据FreeDesktop.org 建议解析所有.desktop 文件需要太多时间——在我的计算机上大约需要 2-3 秒。所以,我决定使用缓存来处理文件。

缓存应该如何工作:

(注意,app 文件 是一个包含有关安装在用户系统上的应用程序信息的文件。例如,在 Linux 上它可能是 .desktop 文件,在 Windows 上 - .lnk 文件,等等)

  1. 一开始,当 app 文件 位于用户系统上时,我们有一个目录列表(例如,在 Linux 上,该列表包括 /usr/share/application 目录)。
  2. X 启动时,它会遍历该列表中的所有文件夹并创建所有文件的“快照”。快照应该是包含文件完整路径和last modified 时间的记录列表。然后,X 解析快照中的所有文件并将必要的信息保存在假设appsInformation 列表中。
  3. 经过一定时间后,X 在该文件夹中创建文件的新快照。然后,它将新快照与旧快照进行比较,并创建三个更改列表:added 列表,其中包含新快照中存在但旧快照中不存在的所有 应用程序文件modified 列表,包含所有 app 文件 更改了 last modified 时间;和deleted 列表,其中包含旧快照中存在但新快照中不存在的所有应用程序文件。之后,它会从added列表中的新文件中解析信息并将其推送回appsInformation列表,根据modified列表更改appsInformation列表中已有的记录,并删除appsInformation列表中的现有记录匹配deleted 列表中的文件。

所以,我需要有两个文件系统快照,其中一个以某种方式连接到appsInformation 列表。

这是我的问题:我应该使用什么方法和工具来构建所有这些架构最好?因此,使用快照应该比解析所有的速度至少快两倍 文件。我想过一些想法,但它们真的很丑陋且难以发布。我应该使用几个QLists 的对象,每个对象都包含一个文件信息和一个指向appsInformation 记录的指针吗?还是有更好的主意?感谢您的帮助。

【问题讨论】:

    标签: architecture


    【解决方案1】:

    我一开始不会使用轮询。相反,我会使用一些基于回调的文件系统监控库。 Windows 和 Linux 都已具备此功能,请参阅以下问题的答案:

    您使用这些库安装的回调通常不仅会被告知哪个文件已更改,而且还会告知有关更改的一些详细信息;即添加、删除或更改文件。因此,根据“更改类型”,您可以在 appsInformationList 中添加/删除/修改元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      相关资源
      最近更新 更多