2012-07-18 404 views
0

我已經編寫了一個代碼,用於從非常大的數據文件中獲取輸入,對其執行一些簡單處理,然後將其存儲在擱置字典格式中。我有4100萬個條目要處理。然而,在我寫下3500萬條擱置詞典之後,表現突然下降並最終完全停止。任何想法我能做些什麼來避免這種情況?Python隨着時間的推移將性能寫入磁盤

我的數據在twitter上,它將用戶屏幕名稱映射到其ID。像這樣:

Jack 12 
Mary 13 
Bob 15 

我需要非常快地訪問每個這些名稱。喜歡:當我給my_dict[Jack]它返回12

+1

完整的RAM和交換? – eumiro 2012-07-18 09:09:35

+0

@eumiro是的,這正是我在做什麼.. – Amitash 2012-07-18 09:12:58

+1

交換比在RAM中工作慢** **。改變你的數據結構,寫入DB(sqlite應該足夠了)...沒有關於你的數據的更多信息,這很難提供幫助。 – eumiro 2012-07-18 09:15:09

回答

1

考慮使用更低級的東西。不幸的是,擱置表現可能很低。這並不能解釋你所看到的放緩。

對於許多基於磁盤的索引它幫助如果你能與預期的大小對它們進行初始化,所以他們並不需要重新組織自己的飛行。我已經看到了這種情況,對於各種庫中的磁盤哈希表而言,其性能影響是巨大的

至於你的實際目標,看看:

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

特別是 gdbm, dbhash, bsddb, dumbdbmsqlite3模塊

sqlite3可能不是最快的,但最容易使用的一個。畢竟,它有一個命令行SQL客戶端。 bsddb可能會更快,尤其是如果您調整了nelem和您的數據大小的類似參數。它也有很多語言綁定;可能比sqlite還要多。

嘗試創建您的數據庫的初始大小爲4100萬,所以它可以優化這個大小!

相關問題