2

我有一个 .net WCF 服务(托管在 IIS 7.5 上),它对插入多个表的 SQL Server 2008 r2 存储过程进行大量调用。尽管在夜间处理的请求量较少,但此 WCF 服务的客户端使用 24/7。大多数情况下这可以正常工作,但每月必须运行一次 SSIS 作业,这会向同一个表进行大量插入。当 SSIS 作业运行时(大约需要 4 小时才能完成),它会导致 WCF 服务出现问题,从而导致超时。

我最初的想法是修改存储过程,以便对临时表进行插入,然后将其合并到主表中。但是,负责 SQL 服务器的 DBA 告诉我,在 SSIS 作业运行期间,服务器已完全耗尽。

所以,我需要想出某种形式的缓存/队列,它不会命中 SQL Server。此缓存还需要具有弹性和可扩展性。App Fabric 缓存是最好的工具吗?我快速浏览了 API,但看不到像队列一样使用它的明显方法,从缓存中获取的方法似乎需要一个密钥——新的服务从缓存中提取并写入永久 SQL 存储(一旦 SSIS 作业完成)。

过去我曾使用 MSMQ 来解决类似的问题,但所有关于此的文档似乎都非常陈旧,所以 App Fabric Cache 可能是当今的首选?

谢谢,

抢。

4

4 回答 4

1

我想您可以使用 AppFabric 对 SQL 的写入/插入进行排队,但我不认为 AppFabric 打算这样做。

您可以使用 AppFabric 实现此目的的一种方法:

  1. 给每个写入/插入一个随机密钥。
  2. 创建一个索引对象来存储插入的键。
  3. 当您需要进行批量插入时,您可以调用一个 GET 来返回用于插入的键数组。
  4. 遍历键列表并开始插入。

这听起来更像是 MSMQ 的工作——这是我开始阅读您的问题时想到的第一个技术。

您还可以考虑一些开源替代品,例如 RabbitMQ 或 ActiveMQ。

于 2013-04-05T17:05:16.333 回答
1

我看到两个直接选项:a) 要求客户端使用 NetMsmqBinding。但请注意,Windows Server AppFabric 正在与 Azure AppFabric 融合,并且还有其他选项。特别是,您可能希望查看 Service Bus for Windows Server v1.0,这是一个免费扩展,可让 Win Server 更符合 Azure 平台。无论是 Windows Server 服务总线还是 MSMQ,如果您对设置不太熟悉,可以通过社区的建议轻松完成。

b) 使用 Sql Server 服务代理。这是 SQL Server 原生的消息传递系统,允许您异步调用 sp。

于 2013-04-07T08:22:22.637 回答
0

感谢您的输入。

在研究了各种选项后,我认为答案是导入批量数据,然后使用滑动窗口分区“拼接”

于 2013-04-08T15:28:38.970 回答
0

好吧,当我第一次阅读这个问题时,我想到了 Redis。它非常容易设置(与 AppFabric 相比),并且具有经过验证的可扩展性。您可以将其用于分布式缓存,或者在这种情况下,您可以使用内置的队列功能。无需添加更多工具和复杂性。

于 2014-03-24T02:33:45.333 回答