我編寫了一個python程序,用於處理大量文本並將數據放入其多級字典中。結果,字典變得非常大(2GB或更高),消耗了內存,並導致緩慢/內存錯誤。在sqlite3中使用Python
所以我正在尋找使用sqlite3,而不是將數據放入python字典。
但是想起來,sqlite3中的整個數據庫必須在整個程序運行過程中都可以訪問。所以最後,是不是會導致內存被大數據庫吃掉的相同結果?
對不起,我對記憶的理解有點笨拙。在打擾我的程序到使用db之前,我想弄清楚事情的真相。
預先感謝您。
我編寫了一個python程序,用於處理大量文本並將數據放入其多級字典中。結果,字典變得非常大(2GB或更高),消耗了內存,並導致緩慢/內存錯誤。在sqlite3中使用Python
所以我正在尋找使用sqlite3,而不是將數據放入python字典。
但是想起來,sqlite3中的整個數據庫必須在整個程序運行過程中都可以訪問。所以最後,是不是會導致內存被大數據庫吃掉的相同結果?
對不起,我對記憶的理解有點笨拙。在打擾我的程序到使用db之前,我想弄清楚事情的真相。
預先感謝您。
SQLite根據需要創建temporary files以存儲尚未提交到數據庫的數據。它會這樣做,即使對於in-memory databases。
因此,當存儲在SQLite數據庫中時,2GB的數據不會佔用你所有的內存。
@MartjinPieters謝謝。說幾十千兆字節可以嗎? – ytrewq
@CosmicRabbitMediaInc:另一條評論指出: python對象比存儲在C結構中的數據有更多的開銷,我希望存儲在SQLite中的數據更加緊湊。 SQLite可以處理[140兆字節的數據](http://www.sqlite.org/limits.html)。 –
你是唯一可能知道的人,因爲它取決於應用程序的固有邏輯。但在大多數情況下,只保留內存中的索引就足夠了。 –
@DekDekku是由db模塊自動處理還是我需要指定只保留索引? – ytrewq
不知道SQLite,你應該檢查文檔,但它應該是自動的:這是它通常工作的方式。索引如果在磁盤上是無用的,而數據通常太大而無法保存在內存中。 –