要点: 我需要使用SQL Server Service Broker从卫星SQL服务器可靠地收集数据。我需要设计protokol,允许一种插件另一个卫星SQL服务器顺利。 (我将根据你的建议改进问题 - 包括图片。但我需要以某种方式开始。)
背景 我有一个中央SQL服务器(Microsoft,SQL 2008 R2 Standard ed。)和生产机器附近的几个小型服务器(相同版本,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服务器可能会暂时断开连接。有时,传感器可能会损坏,或者可能存在其他原因导致传感器丢失物理数据。但是,如果传感器数据具有UTC时间,则表示所有先前的值或存在于表中或它们从未存在过。因此,了解任务数据是否完整的方法等于传感器有更新数据的知识(在任务的UTC范围间隔之后生成)。
目标是不会丢失收集的传感器值。理想的目标是不需要对功能进行任何其他特殊调用(即通过任何类型的调度程序)。
已经完成的工作:
基本上,传感器将数据插入专用表(上面提到的dbo.line_sensor_values
除外)。触发器获取数据并对其进行转换,并将其插入dbo.line_sensor_values
。换句话说,卫星机器上的表已经在收集数据。它已经有效了。此触发器或其他方法可用于通过Service Broker发送传感器值。
执行任务的存储过程,检查中央SQL服务器上的表以获取传感器数据,如果数据存在则生成图表并且它可以正常工作。但是,它仅使用手动作为概念的证明。
Service Broker设置为already suggested earlier。但是,为此目的的Service Broker通信尚未设计或部分测试。
我知道这是一个广泛的问题。这样我就把它拆分成单独的问题......
要解决的单独问题:
感谢您的时间和经验,Petr
答案 0 :(得分:0)
听起来像是你不需要Service Broker的东西。您可以向从属计算机添加新列IsReplicated bit not null default(0)
。然后,您需要定期将所有数据where IsReplicated = 0
复制到中央服务器,并在从属服务器上将数据标记为IsReplicated = 1
。
这是一个非常简单的同步方案。这对你有用吗?
答案 1 :(得分:0)
此评论的唯一目的是结束一个问题,该问题应被视为讨论相关细节问题的摘要。我不认为现有的答案真的回答了这个问题(没有冒犯)。