在Android中的同步和向下同步?

我正在开发一个销售点应用程序,需要非常好的同步机制。 我们有Magento数据库。Android设备有SQLite本地Db。 现在我们需要按以下方式进行同步:

本地——同步到—————>服务器(上同步)

服务器——同步到—————>本地(向下同步)

有两件事情:

1)写入(如何保重??)

对于我在本地进行的每一项更改,都会直接将本地服务器同步到服务器

2)回写(如何保重???)

每当服务器发生变化时,我们需要将所有本地人与服务器同步。

所以,任务是:确定一个服务器更新

并同步我们的本地人。 就像有4个设备在商店中运行,我们已经通过一个设备添加了一个新的客户。 现在我想要的三个其他设备本地数据库也更新有关该客户和服务器的信息也更新。

我听说过后台线程,并在一段时间之后运行线程。 但是,做什么不影响应用程序的最好方法是什么? 所有大零售商店也使用同步过程。 他们用的是什么?

任何帮助表示赞赏。

Solutions Collecting From Web of "在Android中的同步和向下同步?"

它完全取决于你的数据库结构…

你有LOCAL (device)SERVER上的DATABASE

现在

您需要将TIMESTAMP fieLd添加到实际上您希望保留在SYNC中的TABLES中。

当你在服务器上进行任何更改时, TIMESTAMP将会在那里更新,而对于本地数据库也是如此,你现在也要做的是。

在后台运行一个服务,继续比较LOCALTIMESTAMPSSERVERTIMESTAMPS

现在你必须把条件是,如果SERVER TIMESTAMPLOCAL更新,那么把SERVER变化带到LOCAL

 and vice versa will be the condition to take changes from LOCAL to SERVER. 

此外,你必须决定你想要运行这个SERVICE的频率。

或者:

您可以在SERVER上创build表格,该表格将存储特定设备的LAST_SYNCHEDdate

每当你登入你的设备(或任何其他特定的事件,你希望它执行此)服务器将检查 –

  • 当这个设备是LAST_SYNCHED
  • 那么它会比较今天的date
  • 并会检查这些date之间发生的实际情况,并将更改发送到本地(设备)

反之亦然LOCAL(设备)到服务器

你必须玩TIMESTAMPSrest你可以有自己的逻辑如何构build数据库。

当我参与过类似的项目时,我告诉过你我所观察到的

编辑

上面的过程定义了如何将设备与服务器同步我的意思是策略..

如果您希望您的设备从服务器获得通知,而不是周期性地击中WEB-SERVICE。

您可以使用PUSH NOtificationGCM是发送推送通知给设备的其中之一,您可以将它集成到您​​的项目

为了同步你需要处理以下两种情况。

  1. 如何以及何时接收服务器更新
  2. 如何识别本地非同步数据

如何以及何时接收服务器更新:

为了接收更新,我们可以使用GCM(Google云消息传递) 。 如果在服务器中做出任何更新,则服务器向所有设备发送推送消息。 设备将收到推送信息,设备将根据消息从服务器下载数据。 (我认为这是比轮询等一些特定的时间间隔连续的服务更好的方法)

为了只接收来自服务器的更新数据, 服务器维护所有表的modified_timestamp列。 第一次设备将发送空的时间戳,以便服务器将所有数据发送到具有服务器时间戳的设备。 设备接收新数据并更新本地数据库并保存最新的服务器时间戳。 为了下一次获得服务器更新,设备将发送存储的服务器时间戳,然后服务器将只在该时间戳后发送修改的数据。 对于每个响应服务器发送服务器时间戳,设备需要存储该时间戳并在调用服务时需要使用。

如何识别本地非同步数据:

为了发送本地更新, 本地数据库需要在表中维护一个“isSynced”列。 如果在本地isSynced中修改的任何行都将为false,那么在成功将本地数据同步到服务器isSynced之后将是true。 这样我们就可以和服务器处理本地数据。

更新:

您可以在此开发者链接find更多信息

你有考虑使用商业解决scheme吗?

http://www.mobeelizer.com/似乎是你想要实现的。 可能还有很多其他的。

注意:与该公司没有任何关系。

我想说问题陈述是不完整的。 在上述设置中,缺less的是实际上要同步的内容。

POS中的常见情况是,从中央服务器到客户端设备分布的索引(id,value,…)表很less。 在大多数情况下,它是价格表,库存清单等。这些表应该很less在客户端设备上进行修改(实际上可能必须从中央服务器重新分配,并由客户端设备确认)。

另一个方向往往是在客户端设备上生成账单或发票也非常简单。 这些又是本地的东西,应该向服务器传播。 因此,您实际上将它们存储在本地,并在同步点将它们发送到服务器。 稍后,您可能会从服务器收到您自己的项目作为确认。

编辑:检测变化,上面提到的写入时间戳是必须的。

到目前为止所描述的是数据stream。

接下来,您必须进入解决scheme领域并实施这些规则。 有几个同步方法(ieSyncML)。 另一方面保持简单的规则。 因此,主要关心的应该是某种locking和排队,这使得事情稳健。

它也可以使用基于代理的客户端,在这种情况下,每个设备都有自己的代理(可能是设备数据库的最后一个已知状态的副本),但是我认为这是可能在未来版本中发布的高级function:-)

我也在开发销售应用程序,在这个应用程序中,我必须将本地目标作为服务器和服务器目标,以达到本地目标

我的过程是,当我的应用程序启动时,我从我的所有成员的服务器上获取最新的数据,并用这些数据更新我的本地数据库,当我更改我的本地数据库中的数据时也在服务器端更新

我也使用了一个同步button,如果我的团队成员改变目标或configuration文件,将从服务器获取最新的数据

如果你想在所有的设备上更新数据,为什么不使用远程数据库,为什么你要为此引入本地数据库。

对于你的情况,我会build议你直接使用远程数据库,所以事情可以做到实时。