CRDT

一个 Swift 包,用于帮助构建 收敛且可交换的复制数据类型

CRDT 对于同步最终收敛到一致状态的数据非常有用。当节点/副本可能无法直接相互通信时,CRDT 会很有用。CRDT 可以用来代替始终处于活动状态的前台同步协议。

用法

Swift 包管理器

将此包添加到您的 Package.swift dependencies 和目标的 dependencies

import PackageDescription

let package = Package(
    name: "Example",
    dependencies: [
        .package(
            url: "https://github.com/bluk/CRDT",
            from: "0.1.0"
        ),
    ],
    targets: [
        .target(
            name: "YourProject",
            dependencies: ["CRDT"]
        )
    ]
)

代码

import Foundation

import CRDT

// First system
let actorA = UUID()
var a = GCounter<UUID>()

a.incrementCounter(for: actorA)
// a.value == 1

// Second system
let actorB = UUID()
var b = GCounter<UUID>()

b.incrementCounter(for: actorB)
// b.value == 1

try b.merge(a)
// b.value == 2

a.incrementCounter(for: actorA)
a.incrementCounter(for: actorA)
// a.value == 3

try b.merge(a)
// b.value == 4

请参阅测试以获取更多示例。

相关链接

CRDT 论文

其他项目

请参阅其他具有 CRDT 实现的项目

许可

Apache-2.0 许可