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

Ios 客户机-服务器数据同步算法,ios,core-data,client-server,rdbms,data-synchronization,Ios,Core Data,Client Server,Rdbms,Data Synchronization,客户端数据库-CoreData(iOS) 服务器数据库-MySQL 我试图实现客户端和服务器之间的数据同步,但复杂的部分是模式是高度相关的。我正在研究已经在使用的两种同步模式,看起来它们大多数都基于NOSQL或无模式DB。想知道对于高度相关的数据是否有任何同步模式。我已经通过了couchbase、dropbox sync api、wasabi synch等。以下是关注点 1) 高度关系数据意味着,有几个表相互关联,所有表上都会发生创建/更新。现在我计划对每个表分别执行CRUD请求。这是一个好方法

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

我试图实现客户端和服务器之间的数据同步,但复杂的部分是模式是高度相关的。我正在研究已经在使用的两种同步模式,看起来它们大多数都基于NOSQL或无模式DB。想知道对于高度相关的数据是否有任何同步模式。我已经通过了couchbase、dropbox sync api、wasabi synch等。以下是关注点

1) 高度关系数据意味着,有几个表相互关联,所有表上都会发生创建/更新。现在我计划对每个表分别执行CRUD请求。这是一个好方法吗?但问题是,应该对请求进行严格排序,因为在收到表2数据之前,无法处理表3中的更改。这种关系使得同步变得困难

2) 客户端上的更改跟踪。识别特定表(CoreData实体)中的更改的最佳方法是什么。我正在计划一种增量方法,在这种方法中,一次只上传类似对象中的更改。是否有相关的见解/链接

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

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

问题#1已解释 假设有10个表,API为这10个表公开CRUD请求。1请求将只执行任何一个表的C/R/U/D。所以我的问题是,当涉及到离线同步数据时,这是一种很好的设计API的方法吗。例如,考虑关系数据

组织->员工->部门->项目


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

您可能没有意识到这一点

支持通过多个会话同时进行写访问,使其适用于多用户、高并发和OLTP应用程序

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

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

3) 您可以使用显式的客户端串行事务id,以便client plus id指示客户端认为其事务发送的顺序,而不考虑其时钟


您的服务器API是什么样子的?或者说,这也是尚未设计的?@TomHarrington服务器在Heroku上运行,API是在nodejsI中设计的,实际上意味着API调用是什么样子的,而不是用什么框架构建的。听起来你很关心在你的客户端应用程序中复制MySQL的需求,这是不寻常的。感谢你的回复。我已经用更多的细节编辑了我的问题#1-请参考问题1说明。我的问题是,这种方法是否适用于任何其他选择#2-这仅与iOS CoreData相关,因为应在客户端上跟踪更改。