Стратегия обработки пользовательского ввода в виде файлов - PullRequest
0 голосов
/ 24 мая 2010

Я создаю скрипт для обработки файлов, предоставленных нам нашими пользователями.Все происходит в одной и той же системе UNIX (работает на Solaris 10)

Прямо сейчас наш дизайн такой:

  1. Пользователь помещает файл в каталог загрузки
  2. Скрипт, размещенный на cronзапускаться каждые 10 минут.
  3. Скрипт ищет файлы в каталоге загрузки, обрабатывает их, немедленно удаляет

По историческим / устаревшим причинам # 1 не может измениться.Кроме того, удаление файла после обработки является обязательным требованием.

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

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

Я ищу советы по передовым методам решения этой проблемы.Спасибо

1 Ответ

1 голос
/ 24 мая 2010

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

В этом случае у вас еще есть несколько вариантов:

  • Вы можете использовать довольно простую эвристику: проверить размер файла, подождать 5 секунд, проверить размер файла. Если это не изменилось, возможно, это хорошо.

  • Если у вас есть привилегии суперпользователя, вы можете использовать lsof, чтобы определить, есть ли у кого-нибудь этот файл, открытый для записи.

  • Если у вас есть доступ к тому, что обрабатывает загрузку (HTTP, FTP, скрипт setuid, который копирует файлы?), Вы, конечно, можете включить триггеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...