mysql - 去中心化同步安全数据存储

标签 mysql database synchronization distributed

简介

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

想法

假设我有一个数据库结构,在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:简单的东西,在执行任何新的“取决于第三方数据操作”之前强制进行全局同步(例如编辑) 。这个全局同步。例如,在进行 INSERT 时就不需要了。

注意:好吧,有人可以找点乐子,并在两个克隆中进行相同的插入...因为它们没有实时更新,所以这一行将存在两次。但是,这与我们只有一个数据库时相同,在某些需要的情况下,我们在执行最终操作之前检查是否存在现有的同一行。没问题。

问题 3:可以编辑代码而不过滤操作,因此有人可以传播删除所有内容的指令,或者只是进行一些恶意攻击事件。这不是问题,因为好的克隆总是在某个地方。那些表现不好的人将不再感兴趣。

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

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

最佳答案

我建议看看 Sync Framework来自微软。它可能更适合 SQL Server,但也应该适用于 MySQL。您要解决的问题相当复杂。

关于mysql - 去中心化同步安全数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17409724/

相关文章:

Android:SyncAdapter 如何启动自动同步

PHP 形式到 mySql 数据库。数组格式问题

php - 下拉菜单 mysql PHP

mysql - 来自 sql select 的十六进制值

mysql - 在MySQL中使用 "SELECT"命令按特定单词排序?

database - 一个关系可以在具有多个外键的 3NF 中吗?

sql - 从一个表批量插入到服务器上的另一个表

c - 线程开销性能

java - 同步BlockingQueues的ArrayList

mysql - 使用可选列正确规范化数据库