Как оптимизировать поиск совпадений в большом .txt файле?
У меня есть база из паролей в .txt файле, 40 миллионов штук (1.6 ГБ). Я пишу программу которая генерирует все возможные комбинации паролей и каждый пароль должен сверятся с базой, если его там нет, то он записывается в отдельный файл. Задача состоит в том, чтобы как можно лучше оптимизировать это все, ведь на поиск совпадения среди 40 миллионов паролей уйдёт несколько секунд. А мне в идеале иметь скорость от 100 паролей в секунду. Работать буду на C#.
Используйте бд вместо просто txt файла, это самый простой вариант.
Ну или если хотите велосипед изобретать, то нужно загрузить всю базу в память. Разделить по умным критериям, индексировать так сказать. Ну банальный пример, все пароли начинающиеся с буквы `а` лежат в одном массиве, с буквы `б` в другом... Даже такая банальная вещь поможет отсечь большую часть от необходимости проверки. Только нужно что-то более продвинутое, поищите в инете. Ну и естественно нужно распаралелить поиск на несколько потоков.
P.S. Ну и лучше делайте на C/C++, а если будете делать на C# не используйте List и прочие коллекции, только массивы!
Загрузить всё в память и сделать параллельную обработку. По умолчанию предполагаем сортировку и бинарный поиск с оптимизациями. Можно предварительно упорядочить пароли не только по начальной букве, но и по его длине, чтобы сравнивать области памяти фиксированной длины.
Может быть я ошибаюсь, но прочитал ваши другие вопросы как например этот "Есть ли сервис для сбора данных от Python скрипта?", где вы от "друзей" хотели получать автоматически данные, после того, как ваш exe у них стартует. Сейчас - 40х млн. паролей. Ваши действия на что-то смахивают....
Если бы я был хакером, который будет ломать друзей зная их данные с помощью брутфорса 40 млн. паролей, я как минимум не регистрировал бы аккаунт с именем и фамилией