2011-05-22 49 views
0

最好是(1)根據用例緩存表中的記錄,或者(2)完整的對象圖,或者(3)多個部分對象圖?緩存什麼對象?

讓我澄清: 假設我有一個訂單系統與工作流程。它包含以下對象:Order,OrderLine,Items,Customer,W​​orkplan,Phase,Milestone,Activities等。

(1)我可以將Order表中的所有記錄放入緩存中,並將OrderLines表中的所有記錄放入緩存,以及Items表中的所有記錄存入緩存等。可能是一個可怕的想法,因爲你無法很好地查詢緩存。 (2)我可以將Order對象,包括OrderLines,OrderItems,Customer,W​​orkplan,Phases,Milestones等放入緩存中。我不喜歡這樣,因爲如果有些事情在Orderlines,Orderitems,Items,Customer,PHases,Milestones等中發生了變化,我必須更新緩存的Order對象。另一件事是我不知道緩存的對象有多大一個Order與10或15個其他對象有關係,並且這些對象都被加載到緩存的Order中。 (3)我可以將對象分割成一個Orderdetails和一個wokrflow的一部分。這樣我有一個緩存的訂單對象與所有相關的訂單詳細信息。我還有另一個Cached Order對象,其中包含所有相關的工作流程詳細信息。

你們對緩存這些東西有什麼建議嗎?

(我希望這是明確的,否則請讓我知道)

+0

您正在編寫您的應用程序的哪種語言? – 2011-05-22 15:06:34

+0

我在C#中編寫應用程序並使用實體框架進行數據訪問 – Thomas 2011-05-22 15:07:54

+0

您可能會發現,在Linq上投入一些時間減少了查詢緩存的難度 – 2011-05-22 15:09:37

回答

0

你需要找到一個平衡點,這被認爲是最的信息和變化最大的信息之間。

例如,訂單標題可能會在每個頁面上訪問,例如購物籃視圖?在這種情況下,緩存它將會受到很大打擊。但另一方面里程碑,這是多久?如果您只想在每個會話中查看一次,那麼它不太可能需要緩存,因爲您沒有獲得實際的好處。

如果您要緩存整個對象模型,那麼您將不斷更新緩存中的數據(我想象中沒有這些數據),並且沒有真正的好處,並且爲會話存儲它的開銷。

+0

是的沒錯,我們有一個訂單標題,它會顯示在每一頁上。我們有一個基於'牽連'關係的權限檢查,這些都是我們可以輕鬆緩存的內容。 – Thomas 2011-05-22 15:31:16