我需要开发一个专用的缓存服务(WCF服务或.Net远程服务或其他实现)以从数据库(SQL Server 2005)缓存数据(.net3.5延迟测量应用程序的监视数据),然后可以由2-3个Windows服务(.net 3.5 WCf服务)使用,因此它们不需要重复调用DB。因此,基本上,这是这些服务与DB之间的附加服务层级别,以减少调用DB的性能损失。数据库中的数据很大且非常动态(事件在一天中不断插入到DB中),我们希望对其进行缓存。每个使用Windows的服务都依赖于另一个服务(一个服务正在从Db中的一个表中检索数据,并将数据聚集在一起并放入DB中的另一个表中,然后该表将被另一个服务使用)。我们有以下要求:
可以有推或拉模型
用于推送或检索数据
往返数据库和服务。
缓存必须减少整体
对数据库的影响并加载数据
增量,而不是重新加载
完整的数据
如果数据库中的源数据已更改,则必须更新缓存数据。
SQL缓存过期策略必须为
定义。
应该具有异步方法调用,用于从数据库和数据库检索数据
缓存更新以最小化等待时间
缓存必须支持对单个数据库的并行请求
CPU和内存使用率应保持在最佳水平
不负面影响其他
服务。
我们没有集群或分布式环境,也不意味着它是一个高度可扩展的解决方案。
我想知道基于几种可用的技术来实现此目标的最佳方法是什么,以避免使其过于复杂:
.Net框架缓存
一致性缓存
速度
WCF的基于休息的服务
任何建议和指导都是非常宝贵的。
问候,
KK
最佳答案
听起来很优雅,但优雅不一定是一件好事。让我担心的不是缓存的使用,而是试图解决数据库外部的固有数据库问题-并非每个公司都是Microsoft / Oracle / ...并有能力创建出色的数据库。我相信您在数据库性能方面存在问题,并且已经提出了缓存作为解决方案。但这不是纯缓存,它需要处理数据一致性和对数据的更改以及简单的读取,并且您试图处理经常变化的数据,因此这不是缓存的理想选择。海事组织,这是一场灾难。必须在另一个数据库的前面实现所有数据库功能,这是不对的。
简化数据库并进行非规范化。如果仍然需要缓存,只需在项目中引用它,即可在ASP.NET外部使用ASP.NET缓存。它具有丰富的API,可满足您几乎所有的需求。