用于实时数据一致性检查的良好算法

时间:2015-08-13 21:06:29

标签: algorithm bigdata

给定多个服务器(多个服务器),每个服务器都存储以下信息:

key1 => value1
key2 => value2
key1 => newValue1
key3 => value3
...
key4 => value4
...
key3 => newValue3
...
keyN => valueN

每个服务器接收的键值对实时按顺序进行。我们想设计一个监控程序来自动检查不同服务器之间的数据一致性。

提案1 >最简单的想法是为服务器上的每个(键值)对构建一个哈希表。但是哈希表的大小非常大,如果我们必须每分钟/秒比较一个完整的表,它将非常慢。每个服务器都会收到一些网络延迟的数据序列,因此我们必须不断检查多个服务器的一致性。

提案2 >如果我们不关心哪个键值不一致,那么我们可以根据每个(键值)对生成一个唯一的哈希值,并将计算出的哈希值与不同的服务器进行比较。但是,此方法无法帮助确定服务器中哪个键值对丢失或不匹配。

问题>这个问题应该非常普遍,我们期望有一种先前存在的算法可以帮助我们有效地解决问题。欢迎提出任何建议。

谢谢

1 个答案:

答案 0 :(得分:2)

可能正在寻找Merkle Tree

在Merkle树中,每个叶子都是一个键值对,以及它的哈希值。
每个内部节点都是其子节点值的某种组合(其值的哈希是常见的做法)。

这允许你(很有可能):

  1. 快速(O(1))检查两个服务器是否存储了相同的键值。
  2. 查找每个不匹配的对数时间(添加/更改的键值对)。
  3. 每个服务器中每个条目的对数时间插入/删除/修改。