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 миллион, чтобы она могла оптимизироваться под этот размер!