1

我们正在开发一个应用程序,该应用程序具有本地安装的组件(Windows 服务 + UI,与本地硬件交互),它将其数据与基于 Azure 云的应用程序同步(集中数据,提供报告/等)。本地组件必须能够离线运行(在没有连接的远程站点长达一周)。此外,一个站点可能有不止一台 PC 托管该应用程序,并且这些本地应用程序实例中的每一个都必须彼此保持同步,即使它们与云应用程序断开连接也是如此

  • 我们预计每个企业有 10 到 100 个站点,每个站点安装多达 10 个本地应用程序。
  • 我们主要是 .NET/C# 开发人员。
  • 过滤应用于记录级别,主要是为了允许通过有时有限的 WAN 连接配置新站点/机器,并持续减少在站点传输和存储的数据量。
  • 我们更愿意坚持使用 Azure/SQL Azure/.NET。

我一直在寻找各种选择,但似乎都达不到要求:

  • MS Sync Framework 似乎已被放弃(我错了吗?没有 SQL Compact 4 支持?)。此外,它似乎对过滤有一些限制,在监控和解决问题方面似乎非常不透明,并且在应用过滤时可能存在知识碎片问题。
  • 非 MS 嵌入式关系数据库要么不提供同步机制,仅限于中心辐射型,要么似乎一年内没有更新(例如 empress)。
  • No-SQL 数据库(我承认我只看过大约 20 个,然后只是表面上看)似乎更专注于分布数据和查询负载,而不是实际在所有节点上复制数据。当 LAN 与 WAN 断开连接时,我找不到任何允许 LAN 上的对等方之间进行同步的方法。

即使忽略了在与云断开连接时保持 LAN 上的对等点同步的愿望,我也无法找到任何支持来自 .NET/Azure 的记录级过滤同步的嵌入式数据库。

有没有人解决过类似的问题并找到了解决方案?在这种情况下构建我们自己的解决方案是否有意义?

4

1 回答 1

0

好吧,最终决定以不同的方式解决问题。基本上它相当于:

  • 通过将尽可能多的操作保持为仅在线操作,最大限度地减少我们需要同步的数据量。
  • 在可能的情况下,只在一个方向传递数据(即在站点生成并传递到云,或者在云中生成并发送到站点)。
  • 对于我们需要数据来支持必要的离线功能并具有真正的双向同步的其余部分,请使用事件源模型并在在线时在站点和云之间交换事件。
  • 站点会立即将事件应用到他们的数据中,并且只会保留他们尚未能够传递到云的事件的副本。
  • 云应用程序将跟踪发送到每个站点的最后一个事件是什么,并从站点连接时的那个点开始。它根据收到的顺序对所有事件进行排序。
  • 云会为它检测到的任何冲突生成解决事件(在任何情况下都应该很少见)。

不是我们最初的想法,也不是没有自己的挑战和缺点。但这似乎是前进的最佳选择。

于 2013-12-06T06:15:06.230 回答