对于一个长 运行 的程序,将数据存储在内存中还是文件缓存中更可取?
For a long running program, is it preferable to store data in memory or in a file cache?
我有一个 perl 脚本,它持续监视各个目录中的新文件。为了实现这一点,它永远运行在一个 while(1)
块中,最后有一个 sleep
命令。目前,我将标识信息存储在将目录映射到唯一标识符的散列中。将新文件放入目录时,该标识符会递增,因此只要最大标识符大于映射值,我就可以看到有一个新文件。这很好用,但现在我想知道是否可以优化我的代码,因为它将 运行 24/7。
我以前使用 File::Cache
和 perl 将数据存储在文件中而不是内存中。 使用文件缓存会比将(相对较小的)散列图存储在内存中更好吗?
所以它不是唯一标识符,它是一个增量变量...:P
两种方法都不错,总要看你的需要。
即使重启也要保留计数吗...是...文件
不 ...
内存
这只是我的观点...而且我不认为您需要超快内存性能的那种程序...毕竟里面有睡眠! :P
祝你有美好的一天
为什么要使用内存:
- 速度更快。
为什么要使用磁盘:
- 变大了。
- 更持久。
如果您的 运行 长进程会累积数据,那么您可能需要确保将其刷新到磁盘。否则 - 迟早 - 你会耗尽主内存,并产生影响。 (虽然这可能是磁盘上的问题,但可能性要小得多)。
如果您的流程只是跟踪 'marker' 以查看您到目前为止所做的事情,那么这不是问题。坚持基于记忆,除非你特别需要在 reboots/resets.
中保留标记
我还建议查看 inotify
而不是 while 循环,因为这是一个不错的选择。
您的脚本是否应该 运行 在 Linux 或任何其他 OS 上提供类似于 Linux 的 Inotify 的内核子系统?如果您应该只支持基于 Linux 的 OS,您可能会搜索 Inotify on metacpan. Personally I'd take a look at POEx::Inotify,因为 POE 确实是一个了不起的生态系统……
我有一个 perl 脚本,它持续监视各个目录中的新文件。为了实现这一点,它永远运行在一个 while(1)
块中,最后有一个 sleep
命令。目前,我将标识信息存储在将目录映射到唯一标识符的散列中。将新文件放入目录时,该标识符会递增,因此只要最大标识符大于映射值,我就可以看到有一个新文件。这很好用,但现在我想知道是否可以优化我的代码,因为它将 运行 24/7。
我以前使用 File::Cache
和 perl 将数据存储在文件中而不是内存中。 使用文件缓存会比将(相对较小的)散列图存储在内存中更好吗?
所以它不是唯一标识符,它是一个增量变量...:P
两种方法都不错,总要看你的需要。
即使重启也要保留计数吗...是...文件 不 ... 内存
这只是我的观点...而且我不认为您需要超快内存性能的那种程序...毕竟里面有睡眠! :P
祝你有美好的一天
为什么要使用内存:
- 速度更快。
为什么要使用磁盘:
- 变大了。
- 更持久。
如果您的 运行 长进程会累积数据,那么您可能需要确保将其刷新到磁盘。否则 - 迟早 - 你会耗尽主内存,并产生影响。 (虽然这可能是磁盘上的问题,但可能性要小得多)。
如果您的流程只是跟踪 'marker' 以查看您到目前为止所做的事情,那么这不是问题。坚持基于记忆,除非你特别需要在 reboots/resets.
中保留标记我还建议查看 inotify
而不是 while 循环,因为这是一个不错的选择。
您的脚本是否应该 运行 在 Linux 或任何其他 OS 上提供类似于 Linux 的 Inotify 的内核子系统?如果您应该只支持基于 Linux 的 OS,您可能会搜索 Inotify on metacpan. Personally I'd take a look at POEx::Inotify,因为 POE 确实是一个了不起的生态系统……