-1

我正在调查使用复制操作模式是否是解决以下设计问题的一种方式。我之前没有复制 MySQL 数据库的经验,请在阅读时记住这一点。

我必须开发一个远程计算机(具体是平板电脑)的分布式系统,共享一个(中央)MySQL 数据库用于数据存储。该系统由一个包含 mysql 数据库的中央单元、一个与数据库接口以进行简单查询的终端和一个通过 wifi 网络与数据库接口的便携式设备(平板电脑)组成。

该系统用于管理客户、订单、销售和库存的本地商店,通过平板电脑在家里销售产品。对于每个“交易”,我需要在平板电脑从本地网络退出之前将其与 mysql 数据库同步,插入从 mysql 表中获取的必要数据,描述客户、产品等等。

我在平板电脑上使用包含这些必要数据的 SQLite 数据库,所有外​​部活动都利用它来插入新的销售、更新客户状态等。在这个转换平板电脑结束时,它必须再次与中央单元同步,因此用 mysql。

我应该如何管理跨数据库实例的数据一致性?我应该使用临时解决方案(自定义同步软件逻辑),还是像我希望和期望的那样,内置复制工具能够有效地解决这种情况的一致性问题?

现在我担心这些事务之后的数据完整性,因为可能在平板电脑返回同步之前插入或更新了其他数据。如何通过这些定期同步的远程平板电脑确保各种操作的数据完整性和一致性?

需要指出的是,在操作期间,此远程平板电脑不一定与中央节点连接(通常情况下)。所以复制/完整性操作应该在延迟模式下操作,即当平板电脑再次连接到中心节点时。

谢谢

4

2 回答 2

1

快速说明 - 如果我在下面漫无目的,我很抱歉 :) 请要求澄清,我会尝试。

如果您只想复制数据,那么您可以使用数据库系统提供的内置功能。然而,这些通常旨在创建一个精确的副本,没有提供任何智能(例如调整库存水平)。

做到这一点并允许智能的最简单方法是提供一种处理事件的方法。事件可以是您决定需要的任何内容,例如针对库存项目下的订单,并且通常具有事件类型来指定该事件的含义。重要的是,事件具有时间戳。这允许您在将设备同步到中央集线器时决定哪些事件是相关的。当同一事物的双方都生成事件时,它还可以帮助您解决冲突。

重要的是,如果您可以定义可能从两端发生的事件及其范围,则可以更轻松地识别和解决这些冲突。它还有助于确定您需要哪些信息来解决它们,简单的时间戳是否足够或某种优先级系统(即主服务器上的更改优先)。此外,它们是否需要解决,或者事件是否只能单向处理。

连接设备时,您将处理自上次连接以来发生的事件。这可以让您自定义在哪里(主系统或移动设备)处理哪些事件,以及它们产生的效果。重要的是,为了简单起见,只需为您可以在移动设备上更改的内容生成事件。

在您的示例中,同步库存清单、客户和所有其他内容是将数据直接复制到移动设备,并且可能通过某种自动复制来处理,尽管您必须能够指定信息以复制(因为您不想要所有内容的精确副本)。

然后,移动设备会在创建订单或类似的东西时在现场生成事件。这些事件将告诉主系统订单已创建/取消/等。您还将包括一个表格来指定已订购/取消的产品和数量。

当你同步时,移动设备上传它的事件,主机处理它们并解决与它自己的事件的任何冲突。然后,它允许客户端下载任何可能影响它已经包含的项目的相关事件(或者它可能不会,并且只是用新数据重新填充设备,具体取决于系统的复杂性)。

可能还有其他事情,例如现场更改客户信息或其他任何事情,但这主要是直接的数据同步,尽管您可能希望创建一个事件来说明它已经决定是否更改主系统中的客户信息(因为它可能也被其他人改变了......)


例如,我曾经工作过的一家公司为客户服务代表开发了一个移动系统来修复小部件。它们甚至可能与主系统处于不同的状态。早上,客户服务人员会打开他们的笔记本电脑,与主系统同步,并以事件的形式接收当天的工作更新。这可能包括新工作,或状态更新,说明工作已被取消、重定向到另一位代表、重新安排等等。这些是由总部的某个人(通常)通过某种界面接听电话和更新系统生成的。我们甚至不知道那个接口是什么,只是它在数据库中产生了我们可以使用的某些事件。

当生成指定新作业的事件时,这就是它所做的一切。工作详细信息,包括客户和小部件信息,都直接同步到设备。重要的是,零件清单和所有这些东西只能通过一种方式同步到移动设备。

当他们找到一份工作时,他们将其标记为开始,做他们的事情,如果他们缺少某些东西,就订购所需的零件,标记完成,等等。这是离线发生的,并在移动设备上生成了事件。

在某个时候,代表会连接并进行另一次同步。这将处理在移动设备上创建的事件,解决任何冲突,然后允许移动设备使用来自主系统的新事件更新自身。重要的是,冲突解决仅限于发生的事件 - 显然,如果代表修复了小部件,那么任何取消约会都是无关紧要的。此外,如果他们需要零件,这是数据的直接同步,只是告诉主系统订购这些零件,但如果没有相关事件,这不会发生。

于 2011-12-01T17:20:45.223 回答
0

AD Hoc 同步解决方案。它将完全按照您的意愿去做,考虑到您的所有特殊情况,以及您想要的方式,因为您必须手工制作它并考虑所有边缘案例和用例设计。

“通用”解决方案在最微不足道的情况下根本行不通。您的解决方案了解您的数据元素之间的关系,了解可以做出和不可以做出哪些假设,需要执行哪些特定业务规则等。

这可能是很多工作,也可能相当简单。取决于您的域和数据要求。但这绝对不是“通用”复制/同步问题。很少有。

所以,把你的代码凿出来,开始锤炼吧。最好现在咬紧牙关完成它,而不是尝试强制安装一些通用解决方案,这只是浪费时间。

于 2011-02-18T00:13:07.047 回答