Если вы просто пытаетесь проверить уникальность, я бы просто разделил входную последовательность на сегменты, а затем проверил каждый сегмент отдельно.
Например, предполагая, что вы загружаете данные из файла, вы можете передать входные данные и записать их в 26 различных файлов, по одному на каждую букву, с которой начинается запись (я наивно предполагаю, что каждая запись начинается с AZ - пожалуйста, настройте для вашей реальной ситуации). Затем вы можете проверить уникальность каждого из этих меньших файлов, используя что-то вроде существующего кода - потому что ни один из них не будет слишком большим, чтобы поместиться в память одновременно. Первоначальное группирование гарантирует, что не будет повторяющихся записей в разных сегментах.
Конечно, существуют различные способы выполнения группирования, и для разных наборов данных будут эффективны разные подходы. Например, вы можете создать контейнер по хеш-коду - взять 5 нижних битов хеш-кода, чтобы создать 32 различных блока. Вероятно, получится равное разумное равномерное распределение записей между сегментами, и он не будет делать никаких предположений относительно входных данных. Я только упомянул «подход первой буквы» выше, поскольку это более простой способ понять концепцию:)