search - Node JS : How would one watch a large amount of files/folders on the server side for updates?

标签 search filesystems node.js

我正在开发一个小型 NodeJS 应用程序,该应用程序本质上用作基于浏览器的桌面搜索,用于搜索基于 LAN 的服务器,可供多个用户查询。 LAN 上的用户都可以访问该服务器上的共享文件夹,并且习惯于将文件放在该文件夹中以供所有人共享,我希望保持该过程相同。

我遇到的第一个解决方案是 fs.watchFile在其他 stackoverflow 问题中已经提到了这一点。在第一个 question用户 Ivo Wetzel注意到在 linux 系统上 fs.watchFile 使用 inotify 但是,认为 fs.watchFile 不应该用于大量文件/文件夹。

在另一个 question关于 fs.watchFile 用户 tjameson首先重申在 Linux 上 inotify 将由 fs.fileWatch 使用,并建议仅使用 node-inotify-plusplus 的组合。和 node-walk但再次声明此方法不应用于大量文件。通过评论和回应,他建议只查看目录的修改时间,然后重新扫描相关目录以查找文件更改。

我最大的障碍似乎是,即使有 tjameson 的建议,监控的文件夹数量仍然存在硬性限制(其中有很多并且还在增加)。此外,它必须递归完成,因为目录树有点深,并且在较低的分支上也可能会发生变化,所以我必须在每个文件夹级别监视以下内容(或者监视文件夹的修改时间,然后扫描以了解发生了什么):

  • 创建文件或子文件夹
  • 删除文件或子文件夹
  • 移动文件或子文件夹
  • self 删除
  • self 移动

假设 inotify 具有与上面所说的一致的限制,那么当我有大量嵌套子文件夹时,仅此一项对我来说似乎可能是监视器太多了。真正令人敬畏的方式似乎涉及kqueue我随后在 google group 中找到了关于更好的 fs.fileWatch 的讨论主题。 .

在我看来,保持相关文件和文件夹信息的数据库是查询方面的适当操作过程,但保持该数据库与关注目录下文件系统的实际状态同步,这对我来说似乎很清楚将是挑战。

那么社区的想法是什么?有没有更好或众所周知的解决方案来解决我不知道的这个问题?最好只查看所有感兴趣的目录以进行单个更改,例如修改时间然后扫描看看发生了什么?观察所有相关的 inotify 警报并适本地修改数据库会更好吗?这不是像我这样的农民能解决的问题吗?

最佳答案

看看monit .我用它来监视我的开发环境中的文件更改,并在相关项目文件更改时重新启动我的 Node 进程。

关于search - Node JS : How would one watch a large amount of files/folders on the server side for updates?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567457/

相关文章:

Firebase RTDB 在关键字列表中搜索关键字

PostgreSQL Multi-Word-String 比较超时

filesystems - 是否有任何正在积极开发的分布式高可用性文件系统(用于 Linux)?

javascript - 使用回调 Javascript 在多个函数中获取多个数据

c++ - 理解 8 皇后拼图的对角搜索

java - 简单的二分查找程序...请告诉我这段特定代码有什么问题

c - 后台文件索引器(Windows、*Nix、跨平台)

c++ - 如何将目录符号链接(symbolic link)复制为指向目标的链接?

javascript - 解释 Redux 语法

node.js - 自定义 sequelize-cli 生成的 ID