【发布时间】:2017-04-16 13:36:59
【问题描述】:
我想为教育目的编写一个文件管理器。我打算将软件拆分为后端和前端。后端会像这样进行文件系统缓存:
- 用户在前端双击目录
/foo/bar - 后端接收来自前端路径
/foo/bar的文件列表查询- 使用
readdir()从磁盘/foo/bar读取文件条目 - 将条目存储在数据缓存服务器 (Redis) 中
- 将结果返回到前端
- 使用
- 前端显示
/foo/bar中的文件列表
下一次用户想要列出来自/foo/bar 的文件时,后端将从数据缓存服务器返回条目,而不是通过内核调用进行磁盘 I/O,假设 /foo/bar 中的文件自最后一个查询 - 我可以使用 inotify 之类的内容进行监控。
现在,我的问题如下:
- 这种架构是否有意义,或者 Linux 内核/文件系统/等。已经负责缓存了吗?
- 在处理大量文件时,与列出目录内容的磁盘 I/O 相比,与 Redis 服务器通信的开销是否值得?
【问题讨论】:
-
对我来说没有意义。从 Redis 获取数据的系统调用次数多于从内核缓存获取数据的次数。
-
确实如此,但您可以避免磁盘 I/O。