我正在监视一个500GB - 1TB 的大目录,其中包含一个填充我的数据库的文件监视服务。在初始扫描期间,启动扫描和原生观看事件(添加文件、添加目录),甚至没有任何后处理(元数据、缩略图、数据库检查)可能需要大约 2-3 小时才能完成
当观察者重新启动(例如崩溃或更新)时,它必须重做初始扫描,在此期间我有两个选择:
全面扫描- 再次处理所有内容
- 观察者将再次查看所有文件数据并将其与数据库条目进行比较。
- 如果发现任何不同的或新的,数据库将被更新。
- 速度:非常慢(约 5-6 小时)
- 丢失的数据:无,最可靠
.
不经意扫描- 忽略初始扫描的事件
- 观察者将正确初始化观察
- 但无法在重新启动开始和初始扫描完成之间注册任何新文件或更改
- 速度:大约是完整扫描的一半时间(约 2-3 小时)
- 丢失的数据:很多,不是很可靠(除非在没有变化的晚上运行)
.
此外,我考虑了第三种选择,但不确定它是否可行:
备份还原
- 在运行期间,使用第二个进程来备份观察者的数据和任何负责观察的对象
- 重新启动时,不要重新运行初始扫描,而是使用备份过程中存储的数据恢复观看
- 然后继续正常工作
- 速度:重启观察者进程需要几秒钟
- 丢失的数据:可能没有,除非数据更改恰好在重启的几秒钟内发生(对我的情况来说已经足够了)
.
我想知道您是否曾经尝试过观察者服务的备份恢复?或者你对此有什么想法?
.
(在我的例子中,观察者使用 node.js、chokidar、fs.watch、FSWatcher和一些原生 C fs_event_wrap)