快速说明 - 如果我在下面漫无目的,我很抱歉 :) 请要求澄清,我会尝试。
如果您只想复制数据,那么您可以使用数据库系统提供的内置功能。然而,这些通常旨在创建一个精确的副本,没有提供任何智能(例如调整库存水平)。
做到这一点并允许智能的最简单方法是提供一种处理事件的方法。事件可以是您决定需要的任何内容,例如针对库存项目下的订单,并且通常具有事件类型来指定该事件的含义。重要的是,事件具有时间戳。这允许您在将设备同步到中央集线器时决定哪些事件是相关的。当同一事物的双方都生成事件时,它还可以帮助您解决冲突。
重要的是,如果您可以定义可能从两端发生的事件及其范围,则可以更轻松地识别和解决这些冲突。它还有助于确定您需要哪些信息来解决它们,简单的时间戳是否足够或某种优先级系统(即主服务器上的更改优先)。此外,它们是否需要解决,或者事件是否只能单向处理。
连接设备时,您将处理自上次连接以来发生的事件。这可以让您自定义在哪里(主系统或移动设备)处理哪些事件,以及它们产生的效果。重要的是,为了简单起见,只需为您可以在移动设备上更改的内容生成事件。
在您的示例中,同步库存清单、客户和所有其他内容是将数据直接复制到移动设备,并且可能通过某种自动复制来处理,尽管您必须能够指定信息以复制(因为您不想要所有内容的精确副本)。
然后,移动设备会在创建订单或类似的东西时在现场生成事件。这些事件将告诉主系统订单已创建/取消/等。您还将包括一个表格来指定已订购/取消的产品和数量。
当你同步时,移动设备上传它的事件,主机处理它们并解决与它自己的事件的任何冲突。然后,它允许客户端下载任何可能影响它已经包含的项目的相关事件(或者它可能不会,并且只是用新数据重新填充设备,具体取决于系统的复杂性)。
可能还有其他事情,例如现场更改客户信息或其他任何事情,但这主要是直接的数据同步,尽管您可能希望创建一个事件来说明它已经决定是否更改主系统中的客户信息(因为它可能也被其他人改变了......)
例如,我曾经工作过的一家公司为客户服务代表开发了一个移动系统来修复小部件。它们甚至可能与主系统处于不同的状态。早上,客户服务人员会打开他们的笔记本电脑,与主系统同步,并以事件的形式接收当天的工作更新。这可能包括新工作,或状态更新,说明工作已被取消、重定向到另一位代表、重新安排等等。这些是由总部的某个人(通常)通过某种界面接听电话和更新系统生成的。我们甚至不知道那个接口是什么,只是它在数据库中产生了我们可以使用的某些事件。
当生成指定新作业的事件时,这就是它所做的一切。工作详细信息,包括客户和小部件信息,都直接同步到设备。重要的是,零件清单和所有这些东西只能通过一种方式同步到移动设备。
当他们找到一份工作时,他们将其标记为开始,做他们的事情,如果他们缺少某些东西,就订购所需的零件,标记完成,等等。这是离线发生的,并在移动设备上生成了事件。
在某个时候,代表会连接并进行另一次同步。这将处理在移动设备上创建的事件,解决任何冲突,然后允许移动设备使用来自主系统的新事件更新自身。重要的是,冲突解决仅限于发生的事件 - 显然,如果代表修复了小部件,那么任何取消约会都是无关紧要的。此外,如果他们需要零件,这是数据的直接同步,只是告诉主系统订购这些零件,但如果没有相关事件,这不会发生。