我正在构建一个 iPhone 应用程序/Web 应用程序,并且我正在尝试考虑实现数据库双向同步的最佳方式。我可能会在 iPhone 上使用 sqlite 并在网络上使用 mysql(这就是我所知道的),但我不确定如何处理使它们保持同步。
这是一个示例架构:
index_id(自动增量) | 标题 | 金额 | 用户 ID | 创建(日期时间)
好的,我对如何解决这个问题有两个后续想法,认为作为答案而不是编辑会更好:
1)你有两个数据库,一个用于手机,一个用于网络应用。架构将如下所示:
index_id | title | amount | user_id | created | environment | foreign_id
因此,假设我的移动设备上有一个条目: 1,'Title',2.00,1,NOW() 和我的网络应用程序上的一个条目 1,'Something',5.00,1,NOW() 。为避免这两件事发生冲突,Web 应用程序将添加一行 2,'Title',2.00,1,NOW(),'mobile',1。
通过这种方式,我可以正确维护所有 index_id。这似乎是维护和正确处理的绝对噩梦。
2)如果将一个数据库(比如网络应用程序)指定为主机,将设备指定为从机,这样您在网络应用程序上有一个表,在设备上有两个表。对于设备,您将有一个表“队列”,在网络连接时,它将更新实时 Web 应用程序数据库(同时清除自身),然后 WEB APP 数据库将同步,一种方式,回到设备的第二个主表。
在同步之前,设备上的业务逻辑必须将两个本地表视为一个。这似乎比上述更容易解决。
这是一个问题,因为您必须处理某些情况,例如。A = 服务器,B = iPhone
A - Adds new entry
B - Adss new entry
A - Get B's entry
B - Get A's entry
A - Update entry
B - Delete A's entry
(您使用哪一个,您是同步 A 对 B 所做的更改,还是删除 A 在 B 上所做的项目?)
同步部分可以是一个简单的推/拉式 http 请求,它是如何正确保持它们同步的后勤问题,这引起了人们的关注。
对于如何:只需让 iPhone 检查服务器页面(update.php)是否有任何更改及其更改。使用 iPhone 发送的更改更新服务器,并使用请求发回的任何更改(使用 JSON 或 XML)更新 iPhone。
只需在两个地方复制模式并在每个表的每一行中添加一个时间戳。然后让客户端发送其最新的时间戳并让服务器返回比它更新的行。
最简单的方法...
为什么不让您的 Web 应用程序为您的 iPhone 客户端提供安全/经过身份验证的 Web 服务?
例如,iPhone 将与此服务进行通信(使用 JSON、XML、SOAP 等),您只需维护一个数据库。