2015-10-01 7 views
3

Мне нужно разработать приложение, которое будет обрабатывать файлы csv, как только файлы будут созданы в предопределенном каталоге. Ожидается огромное количество входящих файлов.Apache Commons IO File Monitoring vs. JDK WatchService

Я видел приложения, использующие Мониторинг файлов Apache Commons IO в производстве. Это работает очень хорошо. Я видел, как он обрабатывал до 21 миллиона файлов в день. Кажется, Apache Commons IO File Monitoring проверяет каталог и делает listFiles для обработки файлов.

Мой вопрос: Является ли JDK WatchService хорошим вариантом для мониторинга файлов IO в Apache? Кто-нибудь знает какие-либо плюсы и минусы?

+0

Commons IO - это чистый Java AFAIK, поэтому он может соответствовать WatchService, но я сомневаюсь, что он может быть более эффективным ... – assylias

ответ

0

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

Мониторинг сообщества Apache использует механизм опроса с настраиваемым интервалом опроса. В каждом опросе он вызывает метод listFiles() класса File и сравнивается с выходом listFiles() предыдущей итерации для идентификации создания, модификации и удаления файлов. Алгоритм достаточно прочный, и я никогда не видел промахов. Он отлично работает с большим объемом файлов. Однако, поскольку он проверяет и вызывает listFiles на каждой итерации, он будет потреблять ненужные циклы CPU, если поток входных файлов невелик.

JDK WatchService не нуждается в опросе. Это событие основано. Он запускается только тогда, когда происходит событие, и, следовательно, требуется меньше CPU, если приток входного файла не так много. Если приток входного файла тяжелый, и механизм обработки событий обрабатывает с меньшей скоростью скорость, с которой происходит событие, может быть вероятность переполнения события.

Следовательно, в заключение, если поток файлов является непрерывным и огромным, лучше перейти на Мониторинг файлов Apache. В противном случае JDK WatchService - хороший вариант.