App Fabric Cache作为队列

时间:2013-04-04 14:18:40

标签: caching msmq appfabric-cache

我有一个.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可能是首选吗?

谢谢,

罗布。

4 个答案:

答案 0 :(得分:1)

我想您可以使用AppFabric将写入/插入排队到SQL,但我认为这不是AppFabric的目的。

使用AppFabric可以实现此目的:

  1. 为每个写入/插入一个随机密钥。
  2. 创建一个存储插入键的索引对象。
  3. 当你需要进行批量插入时,你可以调用一个GET,它将带回用于插入的键数组。
  4. 遍历键列表并开始插入。
  5. 这听起来更像是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相比),并具有经过验证的可扩展性。您可以将它用于分布式缓存,或者在这种情况下,您可以使用内置的排队功能。无需在组合中添加更多工具和复杂性。