关于快照文件系统的架构解决方案

时间:2013-07-01 15:53:20

标签: architecture

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

缓存应如何运作:

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

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

    以下是我的问题:我应该使用哪些方法和工具来构建所有这些架构?在结果中,使用快照的速度应至少比解析所有速度快两倍文件。我想到了一些想法,但它们真的很丑陋且难以释放。我应该使用几个appsInformation个对象,每个对象包含一个文件信息和指向QList记录的指针吗?或者有一个更好的主意?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我不会首先使用民意调查。相反,我会使用一些基于回调的文件系统监控库。 Windows和Linux都已经有了这个,请看这些问题的答案:

使用这些库安装的回调通常不仅会被告知哪个文件发生了变化,而且还会告诉我们有关变更的一些细节;即添加,删除或更改文件。因此,根据“更改类型”,您可以添加/删除/修改appsInformationList中的元素。