Я создаю индекс на основе файла для отсортированного haveibeenpwned пароля текстового файла, и мне стало интересно, какой самый быстрый способ сделать это?
Я подумал, что хороший способ построить быстро-способный индекс - это разбить отсортированный файл на 256 файлов, названных по первым двум шестнадцатеричным цифрам (т.е. FF.txt, FE.txt и т. Д.). Я обнаружил, что ripgrep rg
примерно в 5 раз быстрее, чем grep на моем компьютере. Поэтому я попробовал что-то вроде этого:
for i in {255..0}
do
start=$(date +%s)
hex="$(printf '%02x' $i | tr [:lower:] [:upper:])"
rg "^$hex" pwned-passwords-ntlm-ordered-by-hash-v4.txt > ntlm/$hex-ntlm.txt
echo 0x$hex completed in $(($(date +%s) - $start)) seconds
done
Это самое быстрое решение, которое я мог придумать. ripgrep может создать каждый файл за 25 секунд. Итак, я смотрю около 100 минут, чтобы создать этот индекс. Когда я делю работу пополам и запускаю их параллельно, каждая пара файлов создается за 80 секунд. Поэтому, кажется, лучше всего позволить ripgrep поработать над своей магией и работать последовательно.
Очевидно, я не буду индексировать этот список слишком часто, но об этом просто интересно думать. Есть какие-нибудь мысли о более быстром способе (помимо использования базы данных) индексировать этот файл?