【问题标题】:Using SQL 2008 ServiceBroker for high-volume threadsafe FIFO queue将 SQL 2008 ServiceBroker 用于大容量线程安全 FIFO 队列
【发布时间】:2010-07-15 18:21:44
【问题描述】:

我刚刚开始评估 ServiceBroker 以确定它是否可以在非常特定的上下文中作为可靠队列执行。这是场景:

(1) 需要预先计算大量(数百万)计算量大的值并存储在队列中。

(2) 多个进程将在运行时根据需要尝试读取/出列这些值。每秒可能有数百次读取。

(3) 监控进程偶尔会轮询队列并确定是否已达到最小填充阈值,然后重新填充队列。

由于某些基础设施/成本限制,工业级队列(websphere)可能不是一个选择。到目前为止,我所看到的 Service Broker 并不令人鼓舞,因为它似乎被隔离为具有 2 个端点的“对话”,并且在我的场景中,我的读取完全独立于我的写入。有没有人知道这是否可以通过 SQL Service Broker 实现?

【问题讨论】:

    标签: sql-server-2008 service-broker


    【解决方案1】:

    虽然 Service Broker 并非针对此类场景而设计,但我认为稍作调整即可在您的情况下使用。

    一种方法是预先创建一个对话池,然后在存储值时在这些对话之间循环计算过程。由于从队列中接收会锁定对话,因此对话的数量本质上设置了有多少进程可以同时出列值的上限。我不确定,但您可能需要在接收方有一些逻辑来明确告知要从哪个会话接收(为了实现比默认接收行为更好的负载平衡)。

    如果性能不是问题,那么您甚至可以放弃对话池的想法,并在单独的对话框中发送每条消息,这会以显着的性能命中为代价来简化实现方式。

    以上所有内容都是假设值可以以随机顺序出队,否则您需要通过使用单个会话来保证接收顺序。

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多