Чтобы ответить на ваш вопрос:
Нет. Нет лучших практик . И, AFAIK, нет общепринятых «хороших» практик.
Но у меня есть несколько общих советов. Если вы позволите таким соображениям, как бюрократия и (в меньшей степени) указы в области безопасности, диктовать свои технические решения, то вы в конечном итоге получите некачественные решения; то есть решения, которые работают медленно или дорого, и продолжают работать. (Если «они» хотят, чтобы это было быстро, то «они» не должны мешать вам.)
Я не думаю, что мы можем дать вам простое решение вашей проблемы, но я могу скажи кое-что о своем анализе.
Вы сказали о решении grep
.
"Я хочу избежать этого, потому что отдел безопасности предупредил меня обо всех проверках, которые нужно выполнить входные данные для предотвращения внедрения оболочки. "
Решение этой проблемы простое: не используйте промежуточную оболочку. Опасные инъекционные атаки будут осуществляться с помощью обмана, а не grep
. Java ProcessBuilder
не использует оболочку, если вы явно не используете ее. Сама программа grep
может только читать файлы, указанные в ее аргументах, и записывать в стандартный вывод и стандартную ошибку.
Вы говорили об общей архитектуре:
"Цель - запросить эти файлы без их импорта (основная проблема - бюрократия, никто не хочет ответственности за изменение данных)."
Я не понимаю здесь возражений. Мы знаем, что файлы CSV будут меняться. Вы получаете новый файл CSV 27 ГБ каждый час!
Если возражение заключается в том, что формат файлов CSV изменится, что отрицательно сказывается на вашей способности эффективно запрашивать их. Но, проявив немного изобретательности, вы можете обнаружить изменение формата и настроить процесс приема на лету.
"Мы ожидаем не более 5 параллельные исследования в одно и то же время со средним интервалом в 3 недели. "
Если вы еще этого не сделали, вам необходимо провести некоторый анализ, чтобы увидеть, будет ли предложенное вами решение жизнеспособный. Оцените, сколько CSV-данных необходимо отсканировать, чтобы удовлетворить типичный запрос. Умножьте это на количество запросов, которые будут выполнены (скажем) за 24 часа. Затем сравните это со способностью вашего NFS-сервера выполнять массовые чтения. Затем повторите расчет, предполагая, что данное количество запросов выполняется параллельно.
Подумайте, что произойдет, если ваши (выше) ожидания неверны. Вам нужна только пара "идиотских" пользователей, которые делают неразумные вещи ...
Наличие 24-ядерного сервера для выполнения запросов - это одно, но NFS-сервер также должен иметь возможность достаточно быстро предоставлять данные. , Вы можете улучшить ситуацию с настройкой NFS (например, путем настройки размеров блоков, количества демонов NFS, используя FS-Cache), но самым узким местом будет получение данных с дисков сервера NFS и через сеть на ваш сервер. Имейте в виду, что другие серверы могут «забивать» NFS-сервер, пока ваше приложение работает.