我有一个.net WCF服务(在IIS 7.5上托管),它对SQL Server 2008 r2存储过程进行大量调用,该过程插入到多个表中。此WCF服务的客户端全天候使用,尽管在夜间处理较少量的请求。大部分时间这都可以,但是每月一次必须运行SSIS作业,这会使高容量插入到同一个表中。当SSIS作业运行时(大约需要4个小时才能完成),会导致WCF服务出现问题,从而导致超时。
我最初的想法是修改存储过程,以便插入临时表,然后将其合并到主表。但是,负责SQL服务器的DBA告诉我,在SSIS作业运行期间,服务器完全被淘汰。
因此,我需要提出某种形式的缓存/队列,而不是命中SQL Server。此缓存还需要具有弹性和可扩展性。 App Fabric缓存是最好的工具吗?我已经快速浏览了一下API,我看不到像队列一样使用它的明显方法,从缓存获取的方法似乎需要一个密钥 - 新的不知道服务从缓存中提取并写入永久SQL存储(一旦SSIS作业完成)。
过去我曾使用过MSMQ来解决类似的问题,但是关于这个问题的所有文档看起来都很旧,所以现在App Fabric Cache可能是首选吗?
谢谢,
罗布。
答案 0 :(得分:1)
我想您可以使用AppFabric将写入/插入排队到SQL,但我认为这不是AppFabric的目的。
使用AppFabric可以实现此目的:
这听起来更像是MSMQ的工作 - 这是我开始阅读你的问题时首先想到的技术。
您还可以考虑一些开源替代品,如RabbitMQ或ActiveMQ。
答案 1 :(得分:1)
我看到两个直接的选择: a)要求客户使用NetMsmqBinding。但请注意,Windows Server AppFabric正在与Azure AppFabric融合,还有其他选项。特别是,您可能希望查看适用于Windows Server v1.0的Service Bus,这是一个免费扩展,可使Win Server更符合Azure平台。无论哪种,Windows Server Service Bus或MSMQ,如果您对设置不太熟悉,可以通过社区建议轻松完成。
b)使用Sql Server Service Broker。这是SQL Server本机的消息传递系统,允许您异步调用sp。
答案 2 :(得分:0)
感谢您的意见。
在调查各种选项后,我认为答案是导入批量数据,然后使用滑动窗口分区“拼接”
答案 3 :(得分:0)
好吧,当我第一次阅读这个问题时,我想到了Redis。它很容易设置(与AppFabric相比),并具有经过验证的可扩展性。您可以将它用于分布式缓存,或者在这种情况下,您可以使用内置的排队功能。无需在组合中添加更多工具和复杂性。