关于 sql 服务器中的 QUEUE 及其实际使用

Regarding QUEUE in sql server and its real usage

对于在一个线程中 post 提出许多问题表示歉意。

我对 sql 服务器中的队列有很多疑问。我在 google 中搜索了 queque for beginner 之类的文章,但仍然一无所获。所以我想 post 关于队列的几个问题。

1) sql 服务器中的队列是什么以及人们使用队列的目的是什么?

2) 我想人们会在队列中存储数据,但为什么因为我们可以在 table 中存储数据,那么为什么人们会使用队列?

3) 如何创建队列

CREATE QUEUE ExpenseQueue
    WITH STATUS=ON,
    ACTIVATION (
        PROCEDURE_NAME = expense_procedure,
        MAX_QUEUE_READERS = 5,
        EXECUTE AS 'ExpenseUser' ) ;

上面的说法和他们的选择我不清楚。

4) 如何在队列中存储数据?

5) queue 可以有很多像 table 这样的字段吗?

6) 我们可以将客户详细信息存储在队列中,例如(custid、姓名、电话号码等)吗?

7) 当队列数据被移除或出队时?

8) 假设队列中存储了 10 个数据,那么我如何从 custid=5 的队列中读取数据?

9) 我们可以明确地从队列中删除一两个数据吗?

10) 讨论当人们使用队列而不是 table 从队列中获取 store/read 数据时的最佳情况?

11)队列和table有什么区别?

请详细回答问题

  1. 主要用于异步处理。也就是说,您知道的事情会花费很长时间,您不需要最终用户等待

  2. 这是一种临时存储解决方案,目的是稍后处理队列中的消息。

  3. 您将不得不阅读 the documentation

  4. The send statement.

  5. 没有。从 create queue 的语法中可以看出这一点;您没有指定任何列或数据类型。

  6. 您可以存储几乎任何您想要的东西。队列中的消息具有负载(通常是您稍后需要处理的事物的详细信息)。

  7. 当您调用 receive statement

  8. 队列不是为这种数据访问方法设计的

  9. 是的。呼叫接收任意次数(或使用 top 子句)

  10. 正如我之前所说,您不会将数据长期存储在队列中。当员工离职时,一个人为的用例将出现在 HR 场景中。从前端看,HR直接说"terminate employee"。在后端,它将一条消息放在队列中,稍后会通过并处理需要清理该员工的所有地方(工资单、活动目录等)。但是用户不需要等待所有这些。

  11. 太多无法一一列举。

简而言之,我不知道您是否突然发现自己必须支持使用 Service Broker 的环境,或者您是否找到了需要问题的解决方案。无论如何,我会阅读有关架构的一些资料 in books online