离线应用程序的双向同步(Windows,过滤,嵌入式数据库)

时间:2013-07-25 01:46:14

标签: .net windows filtering replication offline

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

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

我一直在寻找各种选择,但似乎都没有做到:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

不是我们原本想到的,也不是没有自己的挑战和弊端。但它似乎是向前发展的最佳选择。