2011-05-22 116 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