代码之家  ›  专栏  ›  技术社区  ›  ctacke

数据聚合的推荐框架

  •  1
  • ctacke  · 技术社区  · 16 年前

    我们有一个应用程序,它将使用Microsoft SQL Server Compact收集数据并将其存储在本地WinXP PC中。我们希望将这些数据聚合到一个完整的SQL Server中,用于报告和归档。数据传输需要相当连续(即不是批处理),尽管一些延迟是可以接受的(最多一两分钟)。

    数据是从收集器到服务器的单向推送。收集器永远不需要知道其他收集器在做什么,主服务器也永远不会更新收集器上的数据。目前的计划是5个收集器,但基本上不受可扩展性的限制。

    我们必须假设我们将“大部分连接”,但我们不能保证从收集器到服务器的连接。如果服务器或网络发生故障,我们仍将收集数据,当服务器再次可访问时,数据将被推送上来。

    理想情况下,我们希望在完成基础设施工作后,非编程工程师可以设置一个解决方案。因此,我们可以编写一些代码和向导,但不能假设最终用户对编写代码一无所知,尽管他们将具有合理的计算机技术素养。

    目前,我们有两种技术候选者:

    1. SQL复制
    2. Microsoft同步服务

    我们对第一种方法几乎没有经验,但我们知道在SQL Server中设置订阅等很痛苦,调试它们也不好玩,所以我们正在努力寻找替代方案。

    我们对#2几乎一无所知,只知道它被建议作为将设备数据传输到服务器的替代方案。

    有人在这种场景中有经验吗?或者对这两种技术中的任何一种/两种都有经验,或者我们没有想到他们可以分享的任何东西?收集器上的SQL Compact是固定要求。服务器上的SQL Server不是必需的,但由于客户已经拥有它,因此需要它。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Scott Whitlock    16 年前

    在Microsoft Sync Services完全发布之前,我就使用过它。我喜欢它,它似乎非常适合你的申请。

    如果你想让自己的生活更轻松,我建议你在所有要同步到主服务器的表上使用GUID(SQL Server唯一标识符)作为主键。这将防止冲突和大量额外的编码。

    一个警告:我听说同步服务在第一个版本发布后发生了很大变化,所以我的信息可能已经过时了。

        2
  •  0
  •   Sam    16 年前

    尝试同步并告诉我们它是如何进行的:) 我看到微软的一个活动,这个家伙说:“我添加了这3行代码,一切都同步了……wooohhoo”。

    在我看来,这似乎是正确的选择。

        3
  •  0
  •   Brent Ozar    16 年前

    复制的问题是,当您的模式更改时,您将在每个客户端上进行手动操作,以使复制重新启动并运行。我没有同步服务的经验,但我会问同样的问题:架构更改时会发生什么?如果你必须接触每一个客户,这可能是一个问题。

        4
  •  0
  •   ctacke    16 年前

    我最终选择了选项3:两者都不。相反,我们只是定期(用户可调,但默认为5秒)使用 SqlBulkCopy class 把记录抄过来。这工作得很好,因为它允许我们传入一个ViewModel reader,所以我们使用TableDirect在本地打开表,从远程表中查找最高的RowID,然后将读取器传递给WriteToServer类。

    推荐文章