5 个版本
0.2.4 | 2023年12月23日 |
---|---|
0.2.3 | 2023年12月23日 |
0.1.0 |
|
#492 in 数据库接口
每月 43 次下载
11MB
200K SLoC
DDCP
通过 Veilid 的数据库到数据库复制(DDCP)。
没有服务器,没有云。没有神,没有主人。
什么是 DDCP?
DDCP(数据库到数据库复制)是两件事
- A Git-like CLI for VLCN's CR-SQLite。
- A Rust-native networking layer, which coordinates VLCN database changes among remote peers.
两者都通过 Veilid 运行,以实现简单、私有和安全的点对点网络,并具有强大的加密身份。
我为什么要使用 DDCP?
快速开发本地优先分布式应用程序。去除 API 的样板代码和 yak-shaving,专注于数据。
将传统的 RDBMS 应用程序转换为本地优先,无需围绕低级 CRDTs 重新设计架构。
我如何使用它?
DDCP 仍处于开发初期,但已经非常有趣。以下是您可以用它做什么
初始化 SQLite 数据库
ddcp init
这将为您的数据库注册 Veilid DHT 公钥。
2023-09-27T16:50:03.646448Z INFO ddcp: Registered database at DHT key="VLD0:73iT7NuqplS2nab1AH4P7lJYiQROR_k4NyUhag_K4DY"
发布它
ddcp serve
2023-09-27T16:50:36.319921Z INFO ddcp: Serving database at DHT key="VLD0:73iT7NuqplS2nab1AH4P7lJYiQROR_k4NyUhag_K4DY"
2023-09-27T16:50:36.321171Z INFO ddcp: Database changed, updated status db_version=2 key="VLD0:73iT7NuqplS2nab1AH4P7lJYiQROR_k4NyUhag_K4DY"
此过程必须保持在后台运行,以便远程节点能够从该数据库检索更改。
此过程还会打印 Veilid 公钥,供您的同伴使用。
填充它
在数据库中创建一些 VLCN CRRs(无冲突复制的关联)。这可以在 DDCP 运行并发布数据库时完成。更改将由远程订阅者自动获取。
ddcp shell < fixtures/cr_tables.sql
ddcp shell < fixtures/ins_test_schema_alice.sql
复制它
添加要同步的远程节点数据库
ddcp remote add alice 73iT7NuqplS2nab1AH4P7lJYiQROR_k4NyUhag_K4DY
前缀 VLD0:
是可选的。
在发布更改的同时,自动将远程更改应用到本地数据库。
ddcp serve
2023-09-27T17:01:30.615367Z INFO ddcp: Pulled changes from remote database remote_name="alice" db_version=5
VLCN 注意事项
CRRs 有一定的限制,才能按预期工作,甚至根本无法工作
- CRRs 的更改必须在加载 crsqlite.so 扩展之后发生。运行
ddcp shell
会为您自动完成此操作。但在使用 cr-sqlite 从其他应用程序时,请记住这一点。 - 节点必须共享公共模式才能复制更改。VLCN 支持模式迁移。
- 复制在主键上发生。避免自动递增主键,这些键无法很好地合并。更喜欢强大的内容标识符或类似于 UUID 的随机大键。
开发
OCI 图像
可能是评估 DDCP 的最简单方法。基于 Debian Bookworm 构建 OCI 图像。
docker build -t ddcp .
用法
docker run -v $(pwd)/data:/data ddcp:latest init
docker run -v $(pwd)/data:/data ddcp:latest remote add alice 73iT7NuqplS2nab1AH4P7lJYiQROR_k4NyUhag_K4DY
cat fixtures/cr_test_schema.sql | docker run -v $(pwd)/data:/data -i ddcp:latest shell
docker run -v $(pwd)/data:/data ddcp:latest pull
Nix
DDCP目前构建在Nix flake devshell中。如果您使用Nix,
nix develop
cargo build
其他平台
这可能可能工作,如果已经安装了编译器和开发库
# Install serde tooling; used in cargo build (for now)
./scripts/install_capnproto.sh
./scripts/install_protoc.sh
cargo build --release
您也可以尝试 cargo install ddcp
,但构建仍然需要安装serde工具。
路线图
DDCP仍然是一个技术预览。线路协议、模式和API都是不稳定的,可能会进行破坏性更改。
DDCP仍需改进的几个领域
私有共享
DHT地址目前公开可访问;如果您知道地址,就可以从数据库中检索。这对于数据集的公开分发(博客、“任何人都可以编辑”等)是可以的,但不适用于私有应用程序。
支持认证DHT的共享。
更改集过滤和转换
更多关于如何合并更改的控制。在某些用例中,您希望将所有对等方的更改合并到一致的状态中。在其他用例中,您可能希望保持对等方的内容分离但相互链接。支持这些不同同步模式的原语。crsql_changes
上的过滤器和转换。身份验证和授权(谁可以更改或检索什么)。
大更改集
克服app_call
消息大小限制。目前对此没有检查,因此发送大型更改集(如猫的照片)可能会以不受控制的方式失败。Veilid消息通常限制在32k。
32k可能足以存放一行没有大型列数据。大型列数据可能需要引用块存储,如PostgreSQL的Toast。
缺少Veilid功能
用DHT更改的监控代替轮询(据我所知目前尚未实现)。
Veilid块存储集成准备就绪时。
一些应用程序
关于可以共享的数据类型的思想
- 分布式BBS
- 书签和链接共享
- 网络扫描结果
- 远程传感器聚合
- 代码托管以将此项目从Git**b推出
关于
Veilid核心集成的一些内容来自vldpipe中的示例。
依赖关系
~46–84MB
~1.5M SLoC