0

介绍

嗨,我要问一个对我来说似乎是乌托邦的问题,但我需要知道是否有办法实现我所需要的。如果没有,我需要知道为什么不

这个想法

假设我在MySql中有一个数据库结构。

我想创建一些解决方案,以允许任何人(无论谁,无论在哪里)都可以拥有该数据库(及其内容)的同步副本(更新的克隆)

好吧,它不会只是一个同步副本,它可以(并且应该)是多个复制(假设是基本的,这意味着,例如,全世界有十个副本)

而且,最重要的是:它必须是安全的。所谓安全,我的意思是只有真正接受的事务才会与所有其他(无论有多少)数据库副本/克隆同步。

注意:由于实时同步非常困难,因此我将设计一切使此功能可有可无。所以它不是必需的。

我的自动建议

这就是我想管理它的方式:

时间标识符和更新检查:每个动作(插入、更新、删除......)都将作为动作指令本身存储,与时间标识符相关联。[我认为比 DATETIME 字段更好,它将是一个 INT 字段,例如从 2013 年 1 月 1 日起经过的毫秒数]。因此,每个副本都会向“邻居副本”询问自上次更新以来完成的新操作,并在检查它们是否被允许后执行它们。

问题 1“邻居副本”也可能已过时。
解决方案 1:不要只问一个邻居,创建一个包含一些副本/克隆的随机列表并询问他们的消息(我可以避开该列表并询问所有克隆的更新,但如果克隆数量也增加,这将是低效的很多)

问题 2:实时全局同步未激活。如果...

   Someone at CLONE_ENTERPRISING inserts a row into TABLE.
   ... this row goes to every clone ...
   Someone at CLONE_FIXEMALL deletes this row.
   ... and at the same time, somewhere in an outdated clone ...
   Someone at CLONE_DROPOUT edits this row (now inexistent at the other clones)

解决方案 2:简单的东西,在执行任何新的“依赖于第三方数据的操作” (例如,编辑)之前强制进行 GLOBAL 同步。这种全球同步。例如,在进行 INSERT 时将是不必要的。

注意:好吧,有人可能会玩得开心,并在两个克隆中进行相同的插入...由于它们没有实时更新,因此该行将存在两次。但是,这与我们只有一个数据库时相同,在某些需要的情况下,我们会在执行最终操作之前检查是否存在现有的同一行。不是问题。

问题 3:可以编辑代码而不过滤操作,因此有人可以传播指令以删除所有内容,或者只是进行一些拖钓活动。这不是问题,因为好的克隆总会在某个地方。变坏的人不会再感兴趣了。

如果你阅读,我真的很感激。我知道这不是完美的解决方案,它可能有数百个洞,但这是我的基本开始。我现在会感激你现在能教给我的任何东西。非常感谢。

PS.:可能是我正在尝试的所有这些都已经存在并且有自己的名字。很抱歉当时问(我无论如何都会感谢这个名字,如果它存在的话)

4

1 回答 1

0

我建议看一下Microsoft 的Sync Framework。它可能更适合 SQL Server,但它也应该适用于 MySQL。您要解决的问题是一个相当复杂的问题。

于 2014-07-01T19:56:58.033 回答