В настоящее время у нас есть ряд файлов, упорядоченных по дате, по типу, а затем отдельные файлы XML, содержащие детали, с базовой структурой как:
2020-01-01/
FR_abc
FR_abc_datetime_random.xml
FR_abc_datetime_random.xml
...
FR_abc_datetime_random.xml
FR_def
FR_def_datetime_random.xml
FR_def_datetime_random.xml
...
FR_def_datetime_random.xml
FR_ghi
FR_ghi_datetime_random.xml
FR_ghi_datetime_random.xml
...
FR_ghi_datetime_random.xml
...
FR_xyz
FR_xyz_datetime_random.xml
FR_xyz_datetime_random.xml
...
FR_xyz_datetime_random.xml
Эта файловая система часто сокращается, но мы часто иметь в структуре от 120 до 150 миллионов файлов. Иногда нам нужно опросить один из файлов, и иногда мы знаем дату, которую нам нужно просмотреть, а иногда нет. Если мы знаем, на какие даты мы смотрим, мы используем простую команду для проверки текста, который мы ищем:
ls -U | xargs grep -l TEXT
В котором перечислены файлы с определенным ТЕКСТОМ, которые мы затем можем запросить вручную.
Если мы знаем тип файла и текст для поиска, я сейчас использую команду find, например:
find . -type f -name "^FR_ghi*" | xargs grep -l TEXT
Остальные в группе используют команду ls с рекурсивным (-R) флагом.
С этими командами поиск занимает много времени, более суток - мне было интересно, знает ли кто-нибудь способ ускорить это или какие-либо команды замены, чтобы обеспечить более быстрое время поиска?
- edit1 - -
Параметр TEXT может находиться в любом месте файла, и эти файлы находятся в производственном блоке, поэтому я бы не решился добавить еще один процесс в этот блок, поскольку эти запросы являются специальными, и я предполагаю, что мой первоначальный запрос подробнее «правильно ли мы делаем это / есть ли у кого-нибудь способ получше»?
Вы можете протестировать что-то вроде
time head -12 <(yes "1") | xargs -n1 -P4 sleep
Это запустит 12 команд сна 1
, 4 параллельно. Команда займет 3 секунды.
В вашем случае:
find . -type f -name "^FR_ghi*" | xargs -n1 -P4 grep -l TEXT
Я не знаю, сколько потоков ЦП у вас есть, возможно, -P8 также возможен.
Когда команды ограничены вводом-выводом, это может мало помочь. В этом случае было бы интересно хранить все файлы xml
в формате gzip и использовать zgrep
.