NodeJS: Как можно отслеживать большое количество файлов / папок на стороне сервера на предмет обновлений?

Я работаю над небольшим приложением NodeJS, которое по сути служит браузером для поиска на рабочем столе сервера в локальной сети, который могут запрашивать множество пользователей. Все пользователи в локальной сети имеют доступ к общей папке на этом сервере и традиционно привыкли просто размещать файлы в этой папке для общего доступа, и я хочу, чтобы этот процесс оставался неизменным.

Первое решение, с которым я столкнулся. была фс. watchFile , который был затронут в других вопросах stackoverflow. В первом вопросе пользователь Иво Ветцель отметил, что в системе Linux fs.watchFile использует inotify, но придерживался мнения, что fs.watchFile не следует использовать для больших объемов файлов / папки.

В другом вопросе о fs.watchFile пользователь tjameson сначала повторил, что в Linux inotify будет использоваться fs.fileWatch, и рекомендовал просто использовать комбинацию узлов node- inotify-plusplus и node-walk , но снова заявили, что этот метод не следует использовать для большого количества файлов. В комментариях и ответах он предложил только следить за временем изменения каталогов, а затем повторно сканировать соответствующий каталог на предмет изменений файлов.

Мои самые большие препятствия, кажется, заключаются в том, что даже с предложением tjameson все еще существует жесткое ограничение на количество отслеживаемых папок (которых много и растет). Кроме того, это нужно было бы сделать рекурсивно, потому что дерево каталогов несколько глубокое и также может быть изменено на нижних ветвях, поэтому мне пришлось бы отслеживать следующее на каждом уровне папки (или, альтернативно, отслеживать измененное время папок, а затем сканирование, чтобы узнать, что произошло):

  • создание файла или подпапки
  • удаление файла или подпапки
  • перемещение файла или подпапки
  • удаление себя
  • перемещение себя

Предполагается, что inotify имеет ограничения в соответствии с тем, что было сказано выше, то одно это мне кажется, что может быть слишком много мониторов, когда у меня есть значительное количество вложенных подпапок. Настоящий потрясающий способ выглядит так, как будто он будет включать kqueue , который я впоследствии нашел в качестве темы для обсуждения на улучшенном fs.fileWatch в группе Google .

Мне это кажется ясным. что ведение базы данных с соответствующей информацией о файлах и папках является подходящим способом действий со стороны запросов, но сохранение этой базы данных в синхронизации с фактическим состоянием файловой системы в каталогах, вызывающих озабоченность, будет сложной задачей.

Так что думает сообщество? Есть ли лучшее или хорошо известное решение для решения этой проблемы, о которой я просто не знаю? Лучше всего просто просмотреть все интересующие каталоги для одного изменения, например измененное время, а затем сканировать, чтобы узнать, что произошло? Лучше ли смотреть все соответствующие оповещения inotify и соответствующим образом изменять базу данных? Разве это не проблема, которую может решить такой крестьянин, как я?

9
задан Community 23 May 2017 в 12:04
поделиться