0

我希望创建一个队列,其中有很多计算机将写入,但每台计算机在他的一生中只会写入一次。您认为实现这一目标的最佳方式是什么?

我已阅读有关 SQL Server 队列、用作队列或服务代理基础结构的 SQL Server 表的信息。

  • SQL Server 表:很容易创建,但我担心性能
  • 服务代理:更复杂的基础设施。似乎您必须在发件人上运行一项服务并拥有一个发送队列,这在我的情况下是无用的,因为他们所有人一生都只发送一条消息。

在我的情况下,最好的解决方案是什么?

4

3 回答 3

0

您不必在每台计算机上创建服务。Service Broker 对象可以限制在一台数据库服务器上。例如,如果您有 100 台计算机需要删除一条消息,它们将需要一个到数据库服务器的连接字符串并执行一个将所述消息排入队列的存储过程。
也就是说,似乎 Service Broker 队列对此有点过头了。一个简单的表可能就足够了,甚至更好的是 MSMSQ(这将消除连接到数据库的需要)。

于 2013-06-30T18:58:22.417 回答
0

也许将您的整个系统从“几个作者和一个读者”转变为“一个作者和一个读者”的更好方法?我的意思是您可能会提供一些服务(网络或任何其他服务),这些服务将接收写入请求,并将成为您数据库中唯一的写入者。这是普通情况,有很多标准解决方案。

于 2013-07-11T09:31:49.480 回答
0

我们的生产代码使用表作为队列。我们真的不需要 Service Broker 的健壮性,而且我们的所有代码都已经连接到数据库以获取其他内容。

我们的代码每秒不需要超过几百个事务,我已经证明我们的队列每秒可以实现超过 10k 个事务,所以我对性能相当满意。

这是一篇很棒的文章,描述了如何设计用作队列的表:http ://rusanu.com/2010/03/26/using-tables-as-queues/

如果不先阅读,我不会设计你的桌子。

我们公司也在考虑使用 Redis 的替代队列策略,这种策略不需要磁盘访问,因为我们正在考虑一种设计,该设计需要每秒数万或数十万次插入,但不一定会担心在事件中丢失数据的失败。如果您需要吞吐量,我也会考虑这些方法。

于 2013-06-30T21:28:12.263 回答