我們有一個ASP.NET 4.0應用程序,它從數據庫中繪製一個複雜的數據結構,該結構需要12個小時才能進入內存數據結構(稍後存儲在HttpRuntime.Cache中)。數據結構的大小正在迅速增加,如果應用程序重新啓動,我們無法繼續等待12個小時以將其存入內存。如果您想更改web.config或導致重新啓動的Web應用程序中的任何代碼,這是一個主要問題 - 這意味着應用程序可以使用前的漫長等待時間,並阻礙開發或更新部署。50GB HttpRuntime.Cache持久可能嗎?
數據結構務必在內存中以使網站可用的速度工作。在內存數據庫中,如memcache或Redis與HttpRuntime.Cache相比速度較慢,並且在我們的情況下不起作用(內存中的db必須序列化put/get,而且它們不能相互引用,所以它們使用的鍵是查找 - 性能下降,加上大量密鑰,性能快速下降)。表演是必須的。
我們希望做的是快速轉儲程序結束前的HttpRuntime.Cache到磁盤(在重新啓動),並能夠立即加載它回來時,應用程序再次(希望開始幾分鐘內,而不是12+幾小時或幾天)。
內存中的結構大約爲50GB。
有沒有解決方案?
只要你的機器有足夠的內存(在你的情況下64GB +)和體面的磁盤陣列應該沒問題...不知道你還在尋找什麼樣的重新設計,看起來不像是一個基於問題的選項。 –
你所要求的有點違背邏輯。爲什麼你想要與整個50GB數據結構交互?對於這個更好的數據庫結構或適當的報告方法來說,這是理想的解決方案嗎? – slugster
@Stephen解決方案是讓您贏得簡單的自定義緩存並使用它。最容易的是創建一個平坦的新表,並且包含所有複雜的數據結構,並在必要時更新它,我認爲你走錯了路。 – Aristos