客户端 - 服务器数据同步算法

时间:2015-07-31 00:56:53

标签: ios core-data client-server rdbms data-synchronization

客户端数据库 - CoreData(iOS)
服务器数据库 - MySQL

我正在尝试在客户端和服务器之间实现数据同步,但复杂的部分是架构 高度关系 。我正在使用几个已经在使用的同步模式,看起来大多数同步模式都基于NOSQL或无模式数据库。想知道高关系数据是否存在任何同步模式。我已经通过了couchbase,dropbox sync api,wasabi synch等。以下是关注点

1)通过高度关系数据意味着,有几个表彼此相关,并且在所有表上都会发生创建/更新。现在我打算为每个表做单独的CRUD请求。这是一个好方法吗?但问题是应该对请求进行严格排序,因为在收到表-2数据之前无法处理表-3中的更改。这种关系使得很难同步。

2)更改客户端的跟踪。什么是识别特定表(CoreData Entity)中的更改的最佳方法。我正计划采用delta方法,一次只上传类似对象的变化。有什么见解/链接吗?

3)数据合并/冲突解决 - 我偶然发现了这一部分。 1种方法是在每个对象中都有修改后的时间戳,但是如果设备日期不同步或手动更改会怎样。

我想知道这种同步模式对RDBMS支持的服务器或任何替代方法的影响/挑战。

问题#1解释

假设有10个表和API公开这10个表的CRUD请求。 1请求只会执行任何一个表的C / R / U / D.所以我的问题是,当涉及到数据的离线同步时,这是设计这样的API的好方法。对于例如考虑关系数据

  

&组织情况GT;员工 - >&部 - GT;项目

假设这4个表的某些对象是脱机创建的。现在我们需要在网络恢复时将数据同步到服务器。所以它就像创建/更新组织一样,一旦它结束创建/更新员工,它就可以链接到组织。所以基本上每次都会从top->底层对象发出C / U / D.所以我的问题是这是否是同步问题中的好方法。因为如果数据不是关系数据,我们可以在单个C / U / D API调用中上传所有表中的更改。

1 个答案:

答案 0 :(得分:0)

您似乎可能不知道

的典型relational DBMS facilities and protocols
  

支持多个会话的同时写访问,使其适用于多用户,高度并发和OLTP应用程序。

1)您访问MySQL的API允许您通过事务以原子方式(全部或全部)进行更改。在该事务中,您应该同时更新尽可能多的表,但可以根据需要对这些更改进行排序。通过在使用它们时锁定表,然后以相反的顺序解锁,以避免死锁。您可以请求只锁定事务知道可能更改的表的部分内容,以便不重叠的客户端可以同时进行。

2)您的架构可以显式记录DBMS在更新时计算的冗余增量信息,或者它可以记录足够的过去更改以根据请求计算增量。您的客户端可以向DBMS提供其事务数据,DBMS可以根据它和过去返回相关信息。您可能不需要并且应该在客户端上保持任何持久状态。这就是服务器数据库的用途。客户端数据库是它和用户信息的缓冲区。

3)您可以使用显式客户端串行事务ID,以便客户端加ID可以指示客户端认为其事务的发送顺序,无论其时钟如何。

I wonder how much you have googled.