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

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

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


我正在尝试实现客户端和服务器之间的数据同步,但是复杂的部分是架构是高度相关的。我正在经历一些已经在使用的同步模式,看起来它们大多数都是基于NOSQL或无模式数据库。想知道高度关系数据是否存在任何同步模式。我已经通过了沙发床,Dropbox同步api,芥末同步等。

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

2)在客户端上更改跟踪。什么是识别特定表(CoreData Entity)中的更改的最佳方法。我正在计划采用增量方法,一次仅上载同类对象的更改。是否有任何见解/链接?

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

我想知道与RDBMS支持的服务器以这种同步模式或任何其他方法所带来的影响/挑战。

问题#1说明

假设有10个表,并且API公开了这10个表的CRUD请求。 1个请求只能执行任何一张表的C / R / U / D。所以我的问题是,在脱机同步数据时,这是设计此类API的一种好方法。例如考虑关系数据

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

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

最佳答案

看来您可能不知道典型的relational DBMS facilities and protocols

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

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

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

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

I wonder how much you have googled.

关于ios - 客户端-服务器数据同步算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736483/

相关文章:

java - 通过套接字发送对象

cocoa - 将表示一对多关系的 NSSet 绑定(bind)到 NSArrayController 的选择

Linux操作系统下C语言的客户端和服务器通信

java - 如何知道哪个客户端调用了服务器上的RMI方法

android - 统一游戏 : Best practices for setting up a config file

swift - 我如何在 Core Data 中使用一对多?

cocoa - 如何将 NSMutableString 转换为 double 以便存储在 Core Data 中?

ios - UITableView reloadData() 不刷新显示的单元格

iphone - 从 Instagram 复制过滤器

iOS:XMPP:群聊消息的消息归档