У меня есть большие текстовые файлы, над которыми нужно выполнять все виды операций, в основном с проверкой строк за строкой. Данные, как правило, носят характер продаж / транзакций и, как правило, содержат огромное количество избыточной информации в разных строках, например, имена клиентов. Итерации и манипулирование этими данными стали настолько распространенной задачей, что я пишу библиотеку на C, которую я надеюсь сделать доступной как модуль Python.
В одном тесте я обнаружил, что из 1,3 миллиона значений столбцов только ~ 300 000 были уникальными. Перегрузка памяти вызывает беспокойство, поскольку наше веб-приложение на основе Python может обрабатывать одновременные запросы для больших наборов данных.
Моей первой попыткой было прочитать файл и вставить значение каждого столбца в двоичное дерево поиска. Если значение никогда не было видно раньше, выделяется память для хранения строки, в противном случае возвращается указатель на существующее хранилище для этого значения. Это хорошо работает для наборов данных ~ 100 000 строк. Гораздо больше, и все останавливается, и потребление памяти стремительно растет. Я предполагаю, что издержки всех этих указателей узлов в дереве не помогают, и использование strcmp для двоичного поиска становится очень болезненным.
Эта неудовлетворительная производительность заставляет меня поверить, что вместо этого следует инвестировать в использование хеш-таблицы. Это, однако, поднимает другой вопрос - я не знаю заранее, сколько существует записей. Это может быть 10 или десять миллионов. Как мне добиться правильного баланса времени / пространства, чтобы предотвратить изменение размера моего хеш-таблицы снова и снова?
Каковы лучшие кандидаты структуры данных в подобной ситуации?
Спасибо за ваше время.