admin

SQL Service Broker:从分布式源收集数据。

sql

摘要: 我需要使用SQL Server Service
Broker从卫星SQL服务器可靠地收集数据。我需要设计允许一种插件顺利地插入另一个卫星SQL服务器的协议。(我将根据您的建议(包括图片)对问题进行细化。但我需要以某种方式入手。)

背景: 我确实有一台中央SQL Server(Microsoft,SQL 2008 R2 Standard版),而在生产机器附近有几台小型SQL
Server(相同版本,Express版)。小型服务器将来自传感器的温度收集到以此方式定义的表中:

CREATE TABLE dbo.line_sensor_values (
    UTC DATETIME NOT NULL,
    line_no TINYINT NOT NULL,   -- line number: 1, 2, 3, etc.
    sensor_no TINYINT NOT NULL, -- sensor number: 1, 2, 3, etc.
    sensor_value float NULL,    -- the measured value

  PRIMARY KEY CLUSTERED (
    UTC ASC,
    line_no ASC,
    sensor_no ASC
  )
)

line_no是在生产线的小SQL不变。在中央SQL服务器上创建相同的表,该表可以暂时与小型服务器物理断开连接。(您知道真实的物理环境。)

目的是将所有收集的数据从小型SQL服务器传送到中央服务器。所有服务器都创建了表。但是,他们对通信另一端的数据一无所知。这样,必须设计一些协议以使数据收集正常工作。必须设计一种hanshake,以在重新连接后或传感器数据收集失败后知道从何处继续进行数据传输。

中央服务器使用收集到的传感器数据进行处理,以完成某些任务。例如,必须处理来自特定行(任务已知)的特定传感器的数据点以形成图表。该任务知道要收集传感器值的时间间隔。但是,任务数据库环境不会被事件与数据收集同步。这样,UTC间隔是确定传感器数据是否属于任务的唯一方法。

同样,数据传感器采样间隔与任务无关,并且SQL
Server可能会暂时断开连接。有时,传感器可能坏了,或者还有其他原因可能会丢失传感器的物理数据。但是,如果存在带有UTC时间的传感器数据,则意味着所有先前的值或存在于表中,或者从不存在。因此,知道任务数据是否完整的方式等于知道传感器有新数据(在任务的UTC范围间隔后生成)。

目的是不丢失收集的传感器值。理想的目标是不需要对功能进行任何其他特殊调用(即通过任何类型的调度程序)。

已经做了什么:

  • 基本上,传感器将数据插入专用表中(dbo.line_sensor_values上述除外)。触发器获取数据并将其转换,然后将其插入dbo.line_sensor_values。换句话说,卫星计算机上的表已经在收集数据。它已经可以了。此触发器或其他方式可用于通过Service Broker发送传感器值。

  • 执行任务的存储过程,在中央SQL Server的表中检查传感器数据,并制作图表(如果存在数据)已经设计并且可以工作。但是,它仅是 手动 使用来证明这一概念。

我了解这是一个广泛的问题。这样,我将其拆分为单独的问题…


阅读 156

收藏
2021-06-07

共1个答案

admin

本评论的唯一目的是关闭一个问题,该问题应被视为讨论相关细节的问题的摘要。我认为现有答案并不能真正回答问题(无罪)。

2021-06-07