简介
嗨,我将为我提出一个似乎 utopic 的问题,但我需要知道是否有办法实现我的需要。如果没有,我需要知道为什么不。
想法
假设我有一个数据库结构,在 MySql 。
我想创建一些解决方案,允许任何(无论是谁,无论在哪里)拥有此数据库的同步副本(更新克隆) (及其内容)
好吧,它不会只是一个同步副本,它可以(并且应该)是多重复制(假设基本,这意味着,例如,十个副本世界各地)
而且,最重要的是:它必须安全。安全我的意思是只有真实接受的交易才能与所有其他交易同步(无论多少)数据库副本/克隆。
注意:由于实时进行同步非常困难,我将设计所有内容以使此功能可有可无。所以这不是必需的。
我的自动建议
我正在考虑管理它:
时间标识符和更新检查:每个操作(插入,更新,删除...)都将存储为与时间标识符关联的操作指令本身。 [我认为比DATETIME字段更好,它将是一个INT,例如,从2013年1月1日开始的毫秒数)。因此,每个副本都会向“邻居副本”询问自上次更新以来所做的新操作,并在检查完成后执行它们。
问题1 :“邻居副本”也可能过时。
解决方案1 :不要只问一个邻居,用一些副本/克隆创建随机列表并向他们索取新闻(我可以避免 list 并询问所有克隆的更新,但如果克隆数量上升太多,这将是低效的。)。
问题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。:可能是我正在尝试的所有这些已经存在且有自己的名字。很抱歉,然后问(我还是要感谢这个名字,如果它存在的话)