Python теряет производительность записи на диск с течением времени

Я написал код, чтобы взять входные данные из файла с очень большими данными, выполнить некоторую простую обработку и затем сохранить его в формате словаря полки. У меня есть 41 миллион записей для обработки. Тем не менее, после того, как я записал 35 миллионов записей на полку, производительность внезапно падает и в итоге полностью останавливается. Любая идея, что я могу сделать, чтобы избежать этого?

Мои данные находятся в твиттере, и они отображают имена пользователей и их идентификаторы. Вот так:

Jack 12
Mary 13
Bob 15

Мне нужно получить доступ к каждому из них по имени очень быстро. Как: когда я даю my_dict[Jack] это возвращается 12,

1 ответ

Решение

Подумайте об использовании чего-то более низкого уровня. К сожалению, производительность полки может быть довольно низкой. Это не объясняет замедление, которое вы видите.

Для многих дисковых индексов полезно, если вы можете инициализировать их с ожидаемым размером, поэтому им не нужно реорганизовывать себя на лету. Я видел это с огромным влиянием на производительность хеш-таблиц на диске в различных библиотеках.

Что касается вашей реальной цели, взгляните на:

http://docs.python.org/library/persistence.html

в частности gdbm, dbhash, bsddb, dumbdbm а также sqlite3 модули.

sqlite3 вероятно, не самый быстрый, но самый простой в использовании. Ведь у него есть клиент SQL командной строки. bsddb вероятно, быстрее, в частности, если вы настраиваете nelem и аналогичные параметры для вас размер данных. И это также имеет много языковых привязок; скорее всего даже больше чем sqlite.

Попробуйте создать свою базу данных с начальным размером 41 миллион, чтобы она могла оптимизироваться под этот размер!

Другие вопросы по тегам