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