我正在研究使用复制操作模式的方法 解决以下设计问题的方法。 我没有复制MySQL数据库的经验,请继续 阅读时请记住这一点。
我必须开发一个远程计算机的分布式系统(平板电脑) 特定的),共享一个(中央)MySQL数据库进行数据存储。 该系统由一个包含mysql数据库的中央单元组成 接口的终端 数据库用于简单查询和便携式设备(平板电脑) 通过接口连接到数据库 wifi网络。
该系统用于管理客户,订单,销售和库存 对于销售产品的本地商店 平板电脑从家里出来。 对于每个“事务”,我需要将平板电脑与mysql数据库同步 在它退出本地网络之前, 插入自己从mysql表中获取的必要数据,描述 客户,产品等等。
我在平板电脑上使用包含这些必要数据的SQLite数据库 所有外部活动都利用它来插入新的销售,更新客户状态等。 在这个转录的最后,平板电脑回到家里,它必须再次同步 与中央单位,因此与mysql。
如何跨数据库实例管理数据一致性?我应该用吗? 一个特别的解决方案(定制的同步软件逻辑),或者,我希望 并期望,内置的复制设施能够 有效地解决了这种情况下的一致性问题?
现在我害怕这些交易后的数据完整性,因为可能 插入或更新了其他数据 在平板电脑返回同步之前。 如何确保各种数据的完整性和一致性 通过这些远程平板电脑进行操作,定期同步?
重要的是要指出在操作期间这个远程平板电脑 不一定与中心节点有连接(通常 案件)。因此,复制/完整性操作应该在a中运行 延迟模式,即当平板电脑再次连接到 中心节点。
由于
答案 0 :(得分:1)
快速注意 - 如果我在下面闲聊,我很抱歉:)请求澄清,我会尝试。
如果您只想复制数据,则可以使用数据库系统提供的内置功能。然而,这些通常旨在创建一个精确的副本,没有任何智能设置(例如调整库存水平)。
执行此操作并允许智能的最简单方法是提供处理事件的方法。事件可以是您决定需要的任何事件,例如针对库存项目的订单,并且通常具有事件类型以指定该事件的含义。重要的是,事件具有时间戳。这使您可以在将设备同步回中央集线器时确定哪些事件是相关的。它还可以帮助您解决在双方为同一事件生成事件时的冲突。
重要的是,如果您可以定义可以从两端发生的事件及其范围,那么可以更轻松地识别和解决这些冲突。它还有助于确定解决它们所需的信息,简单的时间戳是否足够或某种优先级系统(即主服务器上的更改优先)。此外,他们是否需要解决,或者事件是否只能单向处理。
连接设备时,将处理自上次连接以来发生的事件。这可以让您自定义处理的事件(主系统或移动设备)及其产生的效果。重要的是,为了简单起见,只需要为移动设备上可以更改的内容生成事件。
从您的示例中,同步股票清单,客户以及所有其他内容是将数据直接复制到移动设备,并且可能通过某种自动复制来处理,但您必须能够指定要复制的信息(因为你不想要所有东西的精确副本)。
移动设备随后会在创建订单或类似内容时在现场生成事件。这些事件将告诉主系统已创建/取消订单等。您还可以添加一个表格来指定订购/取消的产品和数量。
当您同步时,移动设备上传它的事件,主机处理它们并解决与其自身事件的任何冲突。然后,它允许客户端下载可能影响其已包含的项目的任何相关事件(或者它可能不会,并且只是根据系统的复杂性用新数据重新填充设备)。
可能还有其他一些事情,例如现场更改客户信息或其他任何内容,但同样主要是简单的数据同步,尽管您可能希望创建一个事件来说明是否已经确定是否更改了客户信息。主系统(因为它可能也被其他人改变了......)
例如,我曾经工作的公司为客户服务代表修复小部件开发了一个移动系统。它们甚至可能不和主系统处于同一状态。在早上,客户服务人员将打开他们的笔记本电脑,与主系统同步并在当天以事件的形式接收他们的工作更新。这可能包括新的工作,或状态更新,说工作已被取消,重定向到另一位代表,重新安排,等等。这些是由总部(通常)正在接听电话并通过某种界面更新系统的人员生成的。我们甚至不知道那个接口是什么,只是它在我们可以使用的数据库中产生了某些事件。
当生成指定新作业的事件时,就是这样。作业详细信息(包括客户和窗口小部件信息)都直接同步到设备。重要的是,部分列表和所有内容仅以一种方式同步到移动设备。
当他们找到工作时,他们将其标记为已开始,做他们的事情,如果他们缺少某些东西,则订购所需的部件,标记已完成,等等。这发生在离线状态,并在移动设备上生成事件。
在某些时候,代表会连接并进行另一次同步。这将处理在移动设备上创建的事件,解决任何冲突,然后允许移动设备使用来自主系统的新事件来更新自身。重要的是,冲突解决仅限于发生的事件 - 显然如果代表修复了小部件,那么任何取消预约都是无关紧要的。此外,如果他们需要部件,这是数据的直接同步,只是告诉主系统订购这些部件,但没有相关事件就不会发生这种情况。
答案 1 :(得分:0)
AD Hoc Syncing解决方案。它将完全符合您的要求,考虑您的所有特殊情况,确切地考虑您的操作,因为您必须手工制作并将所有边缘情况和用例考虑到设计。
除了最琐碎的案例外,“通用”解决方案根本不起作用。您的解决方案了解数据元素之间的关系,了解可以和不可以做出哪些假设,需要强制执行哪些特定业务规则等。
这可能是很多工作,或者它可以相当简单。取决于您的域名和数据要求。但它绝对不是“通用”复制/同步问题。很少是。
所以,让你的代码凿出来并开始锤击。现在最好咬紧牙关并完成它,而不是尝试强制使用一些通用的解决方案,这只是浪费时间。