【问题标题】:Local sync with Azure Table Storage与 Azure 表存储进行本地同步
【发布时间】:2017-01-05 23:19:22
【问题描述】:

我想将 Azure 表存储中的数据与本地 Windows 桌面客户端同步。桌面客户端应该在不一直在线的情况下工作,因此他必须从 ATS 下载最新数据并上传对本地数据所做的任何更改。

是否有预先准备好的东西来处理这个问题,还是我必须从头开始编写代码?

可能网上有些文章我还没有看到。我想 Sync Framework 是这里的方法,但我没有找到任何关于 Azure 表存储使用的具体内容。

【问题讨论】:

  • 您能否详细说明将其与本地 Windows 客户端同步是什么意思?您是要同步到本地 SQL 服务器还是只是从 Windows 客户端访问 ATS 数据?
  • @Igorek 我试图详细说明。我希望现在更容易理解。

标签: synchronization azure azure-storage azure-table-storage


【解决方案1】:

我认为实际同步数据本身是最少的问题。实际上在断开连接时模拟 Azure 存储,以便将大部分代码从实际实现中抽象出来,这可能更具挑战性。 Azure 表存储很难模仿。您可以尝试在本地客户端桌面上使用 SQL Express,并在其中使用带有 PartitionKey、RowKey、TimeStamp 和基于 xml 的 BLOB 的表以与 ATS 类似的方式存储对象,但很难获得正确模拟。

我还没有看到任何技术或框架可以做到这一点。您对容量和/或可扩展性的需求是否足以使用 Azure 表存储?你可以用 SQL Azure 代替吗?在本地桌面客户端上运行 SQL Express,将 SQL Azure 与 SQL Express 同步,以及在两个数据存储之间切换会简单得多。

【讨论】:

  • 感谢您的回答。我的软件是为消费者量身定制的,我想多租户存储数据(每个用户一些 MB)。由于价格较高,我目前确实忽略了 SQL Azure。但是你说的话听起来我应该再考虑一下。我想为消费者安装 SQL Express 有点太多了。也许 SQL Compact 是一种选择。
【解决方案2】:

另一种方法是通过 RESTful 服务公开您的数据(查看 asp.net web api)。这个想法是你只需调用一个 url 来获取你的数据

 GET //yourapi/someresource

在标题或查询字符串中,您可以附加一些数据,以帮助服务决定返回什么。在我的情况下,我传递了设备 ID(在设备上生成的 Guid)和最后一个同步时间戳。

使用这些,您可以在 Web 服务后面设置一个小型同步管理器,该管理器可以返回在特定时间后从其他位置更改的所有实体。为了让这一切保持同步,我在 azure 存储中有一个同步日志,其中包含 userId、entityId、deviceId、Timestamp。

通过查询和更新这个表,我可以让服务器快速告诉我发生了什么变化,而且速度很快,因为分区是针对每个客户的。

由于我已经抽象出表存储,因此我实际上不需要在客户端上复制它,我可以随心所欲地存储数据。

【讨论】:

    【解决方案3】:

    Microsoft Sync Framework 可能会有所帮助?

    https://msdn.microsoft.com/en-us/library/bb902854(v=sql.110).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2012-04-05
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多