2016-09-19 40 views
0

我有一个WCF服务。 WCF服务提供了一套直接与CRM对话的方法。我从这些服务获得的大部分数据都是查找数据,我经常收到这些数据。这会降低性能,因为我的网站中的单个表单包含从CRM获取的多个查找。频繁访问WCF服务的最佳方式

为了解决这个问题,我已经想到了:

*创建一个Windows服务,将抓住所有的数据并保存在本地数据库中。该服务将在特定时间后运行,以确保所有数据同步。

*缓存数据。对于每次调用某个方法来检索查询类型时,数据都将被缓存,以便任何类似的调用都会返回缓存的数据。

我的问题是:

1-有没有比这更好的方法?

2 - 如果不是,哪个更好?

回答

0

我不建议创建一个缓存服务来提供更快的CRM数据访问。它只是一个具有持久性的远程缓存,如同您提到的第二种方法,它也可以集成到您的wcf服务中。

如果您可以保证所选数据在从CRM系统中选择例如1小时前仍然有价值,则您在此处使用缓存的方法是正确的。问题是,如果您的客户错过了最近一小时在CRM中可能做出的最新更改是可以接受的。 只是说 - >小心缓存。

我的提示: 如果您的wcf服务频繁访问频率较高,例如每秒100 x,则5-10秒的缓存通常会减少访问次数,因为这不会极大地减少数据的实际情况。

但是:大部分数据库系统和表都被设计为提供快速的并发数据读取访问(f.e. paging)。例如,Ms-Sql存储已知的,经常使用的脚本和存储过程的执行计划,以提高将来调用的性能。 因此,首先确保在引入缓存之前,您的CRM确实无法处理读取访问(应该经常谨慎使用)。

+0

正如我之前所说,我的大部分数据都是查询,这意味着他们不会经常更改。我的缓存想法是缓存数据一天,如果客户指出一些数据不断变化,那么我会改变过期。 – ykh

+0

如果适合您的客户,应该是您的解决方案,是的。缓存键可以存储过程/视图/方法名称+输入参数。无论如何,您的密钥的字符串长度是没有问题的,因为它在缓存中被散列(如果您正在使用MemoryCache f.e.) – KoPoCabana