2013-11-04 67 views
1

我目前正在製作一個Python應用程序。它將包含並使用大量不變的關於幾件事情的數據。這些數據將在不同程度上在大部分應用中使用。使用字典詞典來存儲常量

我原來的計劃是把這些數據放在一個數據庫中,其他所有變化的數據都是這樣,但對我來說這似乎過分,並且是一個潛在的不必要的阻塞點(因爲相同的數據將被多次查詢/大多數頁面加載/交互)。

我已經重寫了它,以便數據現在存儲在字典(即內存中)的幾個字典中,本質上是常量,從中通過函數訪問數據。數據看起來有點像這樣:

{ 
    0: { 
      'some_key': 'some_value', 
      'another_key': 'another_value', 
      ... 
    }, 
    ... 
} 

這種內存是否有效?是否有更多的嘗試和真正的/ pythonic /只是更好(在速度,內存使用等方面)做這種事情?實際上使用數據庫是最好的方式嗎?

回答

4

沒有什麼特別不妥這種做法的,但我會注意的一些問題:

  1. 爲什麼嵌套詞典?爲什麼不是一個扁平的字典,甚至是一個充滿變量的模塊?

  2. 如果這些是「對象」數據,爲什麼不把它們存儲在實際的對象中?再次,這些可以生活在模塊中的變量或字典中。

  3. 您的web框架可能已經有針對此特定問題的解決方案。

+1

回顧我的舊問題和答案,我覺得我應該說我最終選擇在適當的地方使用namedtuples和frozensets,以更好地模擬Python中常量的固定性質(與字典相反,它可以被修改)。 –

0

這似乎是存儲您的參考數據,只要你有足夠的內存,你需要保存數據的完全明智的方式。我同意這應該比從數據庫讀取更快,因爲數據已經在內存中並且爲了高效訪問而被分類。

如果你不想將這些數據實際存儲在你的源代碼中,你可以將它存儲在一個json文件中(json.dump()寫出到一個文件和json.load()以重新讀入)。但是你希望在應用程序啓動的時候將它讀入內存,然後將它保存在內存中,而不是每次都回到文件中。