集和解算法的实现(Implementation of set reconciliation algo

2019-08-08 15:11发布

我在寻找一套和解算法的实现。 问题是以下内容:有两套由坐在在不同的机器的一些相对紧凑的值(例如UUID或MD5 / SHA1 /不管散列)标识的元件。 这些集较少的因素不同,我想这台同步传输数据时的最小量。 大多数的谷歌搜索的领导在这里 。 这是GPL的实施似乎是国家的最先进的方法来工作。 问题是,我不能在我的应用程序使用GPL代码。 最有可能我会使用类似nzmath重新实现它自己,但也许还有其他的实现方式(最好是Python或C / C ++),或许还有其他更好的算法?

Answer 1:

不能够使用GPL往往是抽象的事; 也就是说,如果它是你有问题的许可证。 所以,如果你创建一个小的应用程序GPL(GPL下发布的),你可以从你的非GPL应用程序调用此。 为什么要重新发明轮子?

特别是如果你可以使用已经存在的Python脚本:为什么不利用呢? 当然,事情是不同的,如果你不能暴露元素再巩固算法。



Answer 2:

此代码是从我的头,从而覆盖申请代码示例本网站的任何许可。

# 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'


Answer 3:

该同步密钥服务器项目实现OCaml中有效集和解。



文章来源: Implementation of set reconciliation algorithm