【发布时间】:2013-07-17 22:54:43
【问题描述】:
在处理大量文件并将其信息存储在数据库中的 solaris 系统中(是的,我知道使用数据库是获取有关我们拥有的文件数量信息的最快方法)。我需要一种快速的方法来监控文件,因为它们在系统中进行到存储在数据库中的过程中。
目前,我使用 perl 脚本将目录读取到数组中,然后获取数组的大小并将其发送到监控脚本。不幸的是,随着我们系统的发展,这个监视器变得越来越慢。
我正在寻找一种运行速度更快的方法,而不是在对所有相关目录执行计数操作后每 15-20 秒暂停和更新一次。
我比较确定我的瓶颈是把目录读入数组的操作。
我不需要有关文件的任何信息,我不需要大小或文件名,只需要目录中的文件数。
在我的代码中,我不计算隐藏文件或用于保存配置信息的文本文件。如果保留此功能但肯定不是强制性的,那就太好了。
我找到了一些关于使用 C 代码或类似方法计算 inode 的参考资料,但我在这方面的经验不是很丰富。
我想让这个监视器尽可能实时。
我使用的 perl 代码如下所示:
opendir (DIR, $currentDir) or die "Cannot open directory: $!";
@files = grep ! m/^\./ && ! /config_file/, readdir DIR; # skip hidden files and config files
closedir(DIR);
$count = @files;
【问题讨论】:
-
使用 perl 线程或分叉来减少等待时间
-
@mpapec 我喜欢这个想法,在最好的情况下,这仍然会使我的等待时间接近我仅在最长的目录上执行此代码的时间吗?如果是这样,这不是一个坏主意,但不幸的是,我的大多数目录都少于 50 个文件,而一两个文件有数千个。我很想找到一种方法来避免完全读取目录中的每个文件。
标签: perl unix count directory solaris