3

我们使用一个中央SQL Server(2008 标准版)和几个较小的专用SQL Server(Express 版)。我们需要实现一些机制,用于从专用的分散式 SQL Server(更大的容量,见下文)和从中央 SQL Server(很少的记录,基本上是机器的一些通知,可能还有一些优化提示)异步传输数据* 。

专用的 SQL Server 物理上位于技术机器附近,它们datetime, temperature定期收集行(考虑几秒钟的间隔)。一项工作大约有 500 条记录,但下一项工作立即进行(机器不知道这是一项新工作——从某种意义上说是相当愚蠢的——并且只是不停地收集温度)。

技术机器必须能够在没有中央 SQL Server 的情况下工作,并且中央 SQL Server 在机器不可访问时也必须工作(即无法访问其专用 SQL 引擎,与机器一起关闭)。换句话说,解决方案不需要超快,但必须是稳健的,即不会丢失收集到的数据。

基本思想是将收集到的数据从专用SQL Server(预处理为带有机器 ID 的规范化格式)移动到中央 SQL Server 上的众所周知的表中。只应发送较新的数据以最小化数据量。如果连接正常,则应由专用 SQL Server 定期(例如一小时)启动该传输。如果连接不正常,数据将在下一小时后发送,以此类推。

中央 SQL Server 上的另一个众所周知的表将用于为专用 SQL Server 引擎发送通知。这样,专用引擎可以被告知(例如)哪些数据已经在中央 SQL Server 上处理/存档(即提示可能已经从专用机器上的本地数据库中删除了哪些记录),或者任何信息从中央提示(只是提示或其他非实时要求)。提示将由专用的 SQL Server 收集(也就是机器的责任)。换句话说,中央 SQL Server 只处理众所周知的本地表。它不会尝试连接专用的 SQL Server 机器。

该解决方案应仅使用标准机制——SQL 命令(通过存储过程),不使用外部软件。我应该关注什么样的解决方案?

谢谢,彼得

[稍后编辑] SQL 服务器位于同一个局域网中。

4

2 回答 2

5

如果您愿意进行思维转换,不再考虑表和行,而是考虑数据和消息,那么 Service Broker 可以处理所有通信、传递和消息处理。而不是在本地(在 Express 机器上)INSERT INTO LocalTable(datetime, temperature) VALUES (...)你认为:

BEGIN CONVERSATION WITH CentralServer ...; 
SEND ON conversation MESSAGE TYPE [Measurement] (<datetime...><temperature ...>)

请参阅使用 Service Broker 而不是复制大容量连续实时 ETL

于 2012-06-03T16:34:37.923 回答
0

听起来像是合并复制的工作。

于 2012-06-03T20:46:00.853 回答