设置协调算法的实现

我正在寻找集合协调算法的实现。 问题在于:有两个集合,其中元素由位于不同机器上的一些相对紧凑的值(例如UUID或MD5 / SHA1 /任何散列)标识。 这些集合在相对较少的元素中有所不同,我希望在传输最少量的数据时同步这些集合。 大多数谷歌搜索引领这里 。 这是GPL实施的似乎是最先进的任务方法。 问题是我不能在我的应用程序中使用GPL代码。 我很可能必须使用像nzmath这样的东西重新实现它,但也许还有其他实现(最好是Python或C / C ++),或者还有其他更好的算法?

不能使用GPL通常是抽象的问题; 如果它是您遇到问题的许可证。 因此,如果您创建一个小型GPL应用程序(在GPL下发布),您可以从非GPL应用程序中调用它。 为什么重新发明轮子?

特别是如果你可以使用已经存在的python脚本:为什么不利用它呢? 当然,如果您不能公开元素重新整合算法,情况会有所不同。

此代码不在我的脑海中,因此适用于此站点中代码示例的任何许可证。

# given two finite sequences of unique and hashable data, # return needed opcodes and data needed for reconciliation def set_reconcile(src_seq, dst_seq): "Return required operations to mutate src_seq into dst_seq" src_set= set(src_seq) # no-op if already of type set dst_set= set(dst_seq) # ditto for item in src_set - dst_set: yield 'delete', item for item in dst_set - src_set: yield 'create', item 

使用方法如下:

 for opcode, datum in set_reconcile(machine1_stuff, machine2_stuff): if opcode == 'create': # act accordingly elif opcode == 'delete': # likewise else: raise RuntimeError, 'unexpected opcode' 

Synchronizing Keyserver项目在OCaml中实现有效的集合协调。