我正在开发一个销售点应用程序,它需要非常好的同步机制。我们有Magento数据库。安卓设备有SQLite本地Db。现在我们需要以下列方式进行同步:
本地------同步到--------------->服务器(向上同步)
服务器------同步到--------------->本地人(向下同步)
有两件事:
1)写(如何保重?)
对于我在本地进行的每项更改,它都会直接将本地同步到服务器
2)回写(如何保重???)
每当服务器发生变化时,我们都需要将所有本地服务器与服务器同步。
因此,任务是:识别服务器更新
并同步我们的当地人。 就像有4个设备在商店中运行,我们通过一个设备添加了一个新客户。现在我希望其他三个设备本地数据库也更新了有关该客户和服务器的信息也已更新。
我听说后台线程并在一段时间后运行线程。但是,这样做的最佳方法是什么,不会影响应用程序。此外,所有Big Retail商店都使用同步过程。他们用的是什么?
感谢任何帮助。
答案 0 :(得分:12)
这完全取决于你的数据库结构......
DATABASE
和LOCAL (device)
SERVER
立即强>
您需要将TIMESTAMP fieLd
添加到TABLES
实际上您想要保留在SYNC中。
如果您在服务器上进行任何更改,TIMESTAMP
将在那里更新,本地数据库的情况也是如此,您现在需要做的就是。
在后台运行服务,该服务将TIMESTAMPS
LOCAL
与SERVER
的{{1}}进行比较。
现在你必须提出条件,TIMESTAMP
SERVER
LOCAL
比SERVER
更新,然后将LOCAL
更改为and vice versa will be the condition to take changes from LOCAL to SERVER.
,
SERVER
您可以在LAST_SYNCHED
上创建表格,以便为特定设备存储TIMESTAMPS
日期
每当您登录您的设备(或您希望它执行此操作的任何其他特定事件)时,服务器将检查 -
,反之亦然LOCAL(设备)到SERVER
你必须使用GCM
休息,你可以拥有自己的逻辑来构建数据库。
当我参与这样一个类似的项目时,我告诉过你我所观察到的事情
修改强>
以上流程定义了如何将设备与服务器同步我的意思是策略..
如果您希望设备从服务器收到通知的时间,而不是反复点击WEB服务..
您可以使用 PUSH NOtification ,{{1}}是向设备发送推送通知的其中之一,您可以将其集成到您的项目中
答案 1 :(得分:6)
对于同步,您需要处理以下两种情况。
接收服务器更新的方式和时间:
要接收更新,我们可以使用 GCM(Google云消息传递)。如果在服务器中进行任何更新,则服务器会向所有设备发送推送消息。设备将接收该推送,并根据消息,设备将从服务器下载数据。 (我认为这比在某些特定时间间隔内连续点击服务更好的方法,如轮询)
为了仅接收来自服务器的更新数据,服务器维护所有表的modified_timestamp 列。首次设备将发送空时间戳,以便服务器使用服务器时间戳将所有数据发送到设备。设备接收新数据并更新本地数据库并保存最新的服务器时间戳。对于下次获取服务器更新,设备将发送存储的服务器时间戳,然后服务器将仅在该时间戳之后仅发送已修改的数据。对于每个响应服务器发送服务器时间戳,设备需要存储该时间戳,并在调用服务时需要使用。
如何识别本地未同步的数据:
要发送本地更新,本地数据库需要在表中维护一个'isSynced'列。如果在本地isSynced中修改的任何行将为false,则在成功将本地数据同步到服务器isSynced后将为true。这样我们就可以使用服务器来处理最新的本地数据。
<强>更新强>
您可以找到有关此developer link
的更多信息答案 2 :(得分:1)
答案 3 :(得分:1)
我会说问题陈述不完整。在上面描述的设置中,缺少的是您实际要同步的内容。
POS中的常见情况是存在很少的索引(id,value,...)表,这些表应从中央服务器分发到客户端设备。在大多数情况下,它是价格表,库存清单等。这些表应该很少在客户端设备上进行修改(实际上可以,但必须从中央服务器重新分配并由客户端设备确认)。
在您生成账单或发票的客户端设备上,另一个方向也非常简单。这些也是本地的东西,应该传播到服务器。因此,您实际上将它们存储在本地,并在同步点将它们分发到服务器。稍后您可能会从服务器收到您自己的项目作为确认。
编辑:要检测更改,必须按上述提及写入时间戳。
上面描述的是数据流。
接下来,您必须进入解决方案域并实施这些规则。有几种同步方法(即.SyncML)。另一方面保持简单规则。因此,主要的关注点应该是某种锁定和排队,使事情变得健壮。
它也可以使用基于代理的客户端,在这种情况下,每个设备都有自己的代理(可能是设备数据库的最后已知状态的副本),但我认为这是未来版本中可能出现的高级功能: - )
答案 4 :(得分:0)
我也正在开发销售应用程序,我必须将服务器和服务器目标的本地目标用于我的本地目标
我的处理程序是,当我的应用程序启动时,我从我的所有成员的服务器获取最新数据并使用此数据更新我的本地数据库,当我在本地数据库中更改数据时也会在服务器上更新侧
我还使用了一个同步按钮,如果我的团队成员更改其目标或个人资料,它将从服务器获取最新数据
答案 5 :(得分:-1)
如果您想要在所有设备上更新数据,为什么不仅使用远程数据库,为什么要为此引入本地数据库。
对于您的情况,我建议您直接使用远程数据库,这样就可以实时完成。