26

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

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

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

有两件事:

1)写信(如何照顾??)

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

2)回写(如何照顾???)

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

所以,任务是:识别服务器更新

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

我听说过一段时间间隔后的后台线程和运行线程。但是,在不影响应用程序的情况下,最好的方法是什么。此外,所有大型零售商店都使用同步过程。他们用来做什么?

任何帮助表示赞赏。

4

6 回答 6

13

It fully depends on you database structure...

you have DATABASE in LOCAL (device) and on SERVER

NOW

You need to have TIMESTAMP fieLd added to the TABLES which actually you want to keep in SYNC.

When ever you will make any changes on server the TIMESTAMP will be updated there and same will be the case for the local database also what you have to do is now.

Run a service in the background which will keep on comparing the TIMESTAMPS of LOCAL with that of SERVER.

Now you have to put condition that if TIMESTAMP of SERVER is newer to that of LOCAL then bring changes from SERVER to LOCAL,

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

Further you have to decide how frequently you want to run this SERVICE.

ALTERNATIVELY:

You can make the table there on SERVER which will store LAST_SYNCHED date for particular device

Whenever you will login in you device (or any other particular event on which you want it to perform this) the server will check-

  • when this device was LAST_SYNCHED
  • then it will compare it to TODAYS DATE
  • and will check what upadets actualy happened between these dates and will send the changes to the LOCAL (device)

and vice versa for LOCAL (device) to SERVER

you have to play with TIMESTAMPS rest you can have your own logic how to structure the database.

I told you what I have have observed, when I have been a part of such similar project

EDIT

The above Process defines how to sync the devices with server I mean the strategy..

If you want your devices to get notified from server when to sync instead of hitting the WEB-SERVICE recurrently ..

You can make use of PUSH NOtification, GCM is one of them that send push notification to devices, you can integrate it to your project

于 2013-05-06T07:19:40.877 回答
6

对于同步,您需要处理以下两种情况。

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

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

为了接收更新,我们可以使用GCM (Google Cloud Messaging)。如果服务器中进行了任何更新,服务器会向所有设备发送推送消息。设备将收到该推送,并根据消息,设备将从服务器下载数据。(我认为这比在轮询等特定时间间隔内连续命中服务更好)

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

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

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

更新:

您可以在此开发者链接上找到更多信息

于 2013-05-13T05:24:32.563 回答
1

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

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

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

编辑:要检测更改,如上所述的写入时间戳是必须的。

到目前为止,上面描述的是数据流。

接下来,您必须进入解决方案领域并实施这些规则。有几种同步方法(即SyncML)。另一方面保持简单规则。因此,主要关注点应该是某种使事情变得健壮的锁定和排队。

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

于 2013-05-12T23:56:28.463 回答
1

您是否考虑过使用商业解决方案?

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

注:与该公司无关。

于 2013-05-12T18:18:13.170 回答
0

我还在开发销售应用程序,在该应用程序中,我必须将本地目标服务器和服务器目标服务器连接到本地目标

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

我还使用了一个同步按钮,如果我的团队成员更改其目标或个人资料,它将从服务器获取最新数据

于 2013-05-10T07:28:07.733 回答
-1

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

对于您的情况,我建议您直接使用远程数据库,以便可以实时完成这些事情。

于 2013-05-04T12:57:00.297 回答