我在寫一個相當複雜的Web應用程序。 Python後端運行一種算法,其狀態取決於存儲在不經常改變的多個相關數據庫表中的數據,以及經常改變的用戶特定數據。當用戶使用應用程序時,算法的每個用戶狀態會經歷許多小的更改。該算法經常在每個用戶的工作中用於做出某些重要的決定。如何讓一個web對象中的Python對象持久化?
由於性能原因,對來自(半規範化)數據庫數據的每個請求重新初始化狀態很快變得不可行。例如,以某種方式緩存狀態的Python對象,以便在需要時可以簡單地使用和/或更新,這將是非常可取的。但是,由於這是一個Web應用程序,因此有幾個進程爲請求提供服務,因此使用全局變量是不可能的。我試着序列化相關對象(通過pickle)並將序列化數據保存到數據庫,現在我正在試驗通過memcached緩存序列化數據。但是,這仍然會經常導致序列化和反序列化的大量開銷。
我看過共享內存解決方案,但我發現的唯一相關事項是POSH。然而,POSH似乎沒有被廣泛使用,我不覺得將這樣的實驗組件集成到我的應用程序中很容易。
我需要一些建議!這是我開發Web應用程序的第一步,所以我希望這是一個常見的問題,以至於有這樣的問題的衆所周知的解決方案。在這一點上的解決方案,假設Python的後端是一臺服務器上運行就足夠了,但加分解決方案,規模到多臺服務器以及:)
注:
- 我有這個應用程序正在工作,目前正在使用並且處於活動狀態我開始時沒有做任何過早的優化,然後根據需要進行優化。我已經完成了測量和測試,以確保上述問題是實際的瓶頸。我敢肯定,我可以從目前的設置中擠出更多的性能,但我想問問是否有更好的方法。
- 設置本身仍然是一項工作;假定系統的架構可以是任何套件的解決方案。
哪個框架? CherryPy的? Django的? – 2008-12-01 11:20:26
你有沒有做過任何測量證明狀態訪問是瓶頸?醃菜有多大,取出多少時間,整個請求的時間等等? – 2008-12-01 12:28:35
@Martin:鹹菜大約2MB(協議2),反序列化和序列化佔用請求處理時間的90%。 – taleinat 2008-12-01 21:51:05