客户端/服务器与Azure表存储同步

时间:2013-12-16 17:00:40

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

必须有一个解决方案,但我遇到了问题。

我们将数据存储在表存储中,我们正在通过restful api(Web API)将其与具有脱机功能的客户端Web应用程序同步。

我们使用高水位线(目前是日期时间)来确保我们只下载已更改/添加的数据。 例如clients / get?watermark = 2013-12-16 10:00

我们在这种方法中遇到的问题是在边缘情况下发生的情况,其中多个服务器在发生get时插入数据。有可能插入的数据的时间戳低于客户端的时间戳。

我们应该担心这个问题,还是有人可以推荐更好的方法来做到这一点?

我认为我们的主要问题是将数据插入商店。此时无法保证使用的时间戳或Azure框与其他天蓝盒的正确时间。

2 个答案:

答案 0 :(得分:1)

将数据插入表存储时,是否可以将数据插入队列?如果能够这样做,您可以构建一个监视队列的同步,并根据队列中的内容插入数据。这样您就不必担心时间戳和日期同步问题。 还可以使您的表存储扫描速度更快,因为您可以通过可能位于队列消息中的分区/行键直接进入表存储

编辑提供进一步资料: 我重新阅读了您的问题并意识到您希望与许多客户端应用程序同步,而不是我最初假设的单个前提同步系统。 在这种情况下,我稍微调整了我的建议:

每次更改/插入Azure表格故事(ATS)实体时,请考虑使用服务总线并将消息发布到服务总线主题。该消息可以包含单独的PartitionKey / RowKey,或者可能包含关于哪些ATS实体已被更改的一些其他元信息。 您的各个可断开客户端将通过单独的服务总线主题订阅订阅服务总线主题,并能够提取和处理各个服务总线消息并同步这些消息中描述的任何ATS实体。

这样您就不会真正关心实体的上次修改时间戳,只关心处理从服务总线主题中提取消息的问题。如果您的客户端从主题中提取所有消息并同步这些消息所描述的所有实体,则无论将数据插入ATS的工作者数量和插入这些实体的时间戳,它都会自行同步。

答案 1 :(得分:0)

当您在断开连接/分布式环境中工作时,很难根据实际时间保持同步(为了使其正常工作,所有参与者之间的时间需要同步)。

相反,你应该尝试查看逻辑时钟(如vector clock)。你会发现很多Java examples,但如果你打算在.NET中这样做,那么这些例子非常有限。

另一方面,您可能希望了解Sync Framework如何处理同步。