我对ef相对较新,想要求一些建议。
我有一个标准的实体框架,其中包含非常短暂的上下文,每个用户每隔几分钟就需要更新一个页面。
此页面依赖于表格中的数据,该表格具有500k +行,不会经常更改或添加,因此我希望将这些数据存储在内存中,而不是每次刷新时拉取数据....
所以我要找的是将这些数据缓存在应用程序级别的List对象中,但是每次请求此信息都要检查缓存,如果有任何增量,那么只有那些在缓存中查询和更新然后拉动整个表并逐个处理。
例如。
<?xml version="1.0" encoding="UTF-8"?>
<SrvPutBusinessOperationEventNf>
<RqUID>info</RqUID>
<RqTm>info</RqTm>
<SPName>info</SPName>
<SystemId>info</SystemId>
<Method></Method>
<Message>
<Event>
<BusinessProcess>info</BusinessProcess>
<Operation>info</Operation>
<Step>info</Step>
<SourceModule>info</SourceModule>
<Id>info</Id>
<EventDate>info</EventDate>
<SendDate>info</SendDate>
<BusinessAttributes>
<ActionCallInfo/>
<ActivityRepCallInfo/>
<CRMCCCallInfo>
<AccountEPKId>info</AccountEPKId>
<AccountCRMId>info</AccountCRMId>
<CallId>info</CallId>
<CalledFromNum>info</CalledFromNum>
<AppealName>info</AppealName>
<CallbackPhone>info</CallbackPhone>
<EndDate>info</EndDate>
<Comment>info</Comment>
<Result>info</Result>
<CreatorFullName>info</CreatorFullName>
<EmployeeId>info</EmployeeId>
</CRMCCCallInfo>
<CRMCCQuestionInfo/>
<ServiceRequestInfo/>
<ActionMeetingInfo/>
</BusinessAttributes>
</Event>
</Message>
</SrvPutBusinessOperationEventNf>
我知道这会将任何新记录添加到缓存中,但不会更新现有行。此外,我认为这将是密集的,因为(我可能在这里错了)要么它必须将缓存发送到数据库或下载整个表,然后再与其他表进行比较。
有关最佳方法的建议吗?
编辑: 在过滤后,我实际上并没有将页面的所有500k行拉到500,但是拉500仍然更加密集,因为缓存是正确的,或者拉动一些变化,特别是当很多用户在他的页面上时同时。
答案 0 :(得分:0)
而不是这样做可能会使用SqlDependency
类和Onchange
重建缓存。意味着取消旧的缓存并重新加载它。
否则考虑使用基于分布式密钥的缓存系统(如Redis
)并更新每条记录:检查缓存中是否存在记录然后更新缓存(或)替换缓存的对象