2011-05-29 70 views
-1

我有一個數據結構,它表示一系列對象和它們之間的鏈接。每個對象擁有一個帶有屬性的字典,甚至可以嵌套Python對象。使用超出內存的數據

由於純粹的編號或有時由於個別的大型屬性,這些對象偶爾會超出可用內存。

有沒有一種簡單的方法仍然可以處理這種沒有內存異常的數據?

如果我只有字符串的屬性,我可以考慮圖形數據庫,但也許有一些簡單的讓我保持我的Python數據結構。

+5

您或者需要找到一種更有效的方式來表示它們,按位處理它們或將它們存儲在磁盤上。哪些是有意義的,以及如何去做,這取決於數據是什麼以及你想要做什麼。 – 2011-05-29 23:38:16

+0

添加到Thomas的評論我建議將數據的「鏈接」部分抽象到它自己的對象中,並將其保存在內存中。如果可以的話,以保持磁盤上的「大型屬性」。 – 2011-05-30 00:02:14

回答

0

好了,你可以只是安裝更多的RAM ;-)

這是迄今爲止最簡單的解決方案(雖然我不知道這是你的具體情況如何可行的),甚至可能是最便宜(記住更改代碼的成本)。

只是一個選項,以做到心中有數......

+0

好吧,安裝更多的內存是我能想到的一個解決方案,我不會要求它;)也可以在硬盤上存儲東西,我也可能弄清楚自己。但是有沒有像框架這樣的數據庫可以幫助或多或少透明地做到這一點? – Gerenuk 2011-05-30 00:20:55

+0

@Gerenuk:這是我能想到的最透明的解決方案(除了增加虛擬RAM(我假設Windows在這裏)並且有大量的磁盤交換 - 我認爲這在技術上是一種透明的使用磁盤作爲支持將太大的對象存儲在內存中)。其他任何事情都可能需要重大的代碼更改 - 恐怕您需要分享模型的具體細節以獲得更詳細的答案。 – Cameron 2011-05-30 00:26:31

+0

那麼,模型是很多對象與一個字典存儲的屬性。大多數情況下它是字符串或數字,但偶爾列出並可能在未來更多。所有對象都保持對鏈接對象的引用,這基本上是引用列表。嗯,所以我可以嘗試存儲選定的屬性或硬盤上的鏈接表。有什麼工具可以幫助嗎?實際上,我首先想到了一些像解決方案那樣的數據庫,可能會將我的對象透明地保存在硬盤上。 – Gerenuk 2011-05-30 00:41:30

1

有4個「真正」的解決方案和2「從字面上你想要什麼」的解決方案:

  1. 修改架構,這樣你就不會保留你不需要的巨大數據;也許你正在使用數據庫,並且不需要在查詢中檢索這些數據片段。
  2. 修改你的目標:也許你並不需要處理這些事情。
  3. 將處理分解爲更小的塊,確保釋放未使用的對象以進行垃圾回收(通過釋放所有引用)。
  4. 購買更多內存。

這兩種解決方案在字面上做你想做的事情,而不需要購買更多的RAM,將需要使用硬盤。因此,它們會非常慢。但是,如果您的數據量很大(數百GB),並且您的需要通過所有數據,這可能是您唯一的選擇(閃存驅動器可能會提供很好的加速,但過多的寫入會很快磨損) 。

  1. 增加虛擬內存的大小。 (在Linux中,這是通過增加交換分區的大小或添加更多交換分區來完成的。)
  2. 將處理分解爲更小的塊,通過垃圾收集將內容從RAM卸載回磁盤,即使您可能需要它再次。
+0

好吧,所以我想我需要將對象的選定屬性存儲在硬盤上。假設每個對象都有一個ID。從硬盤訪問外包資源的最快方式是什麼? – Gerenuk 2011-05-30 00:44:15