#分布式数据库 #CRDT #分布式 #异步 #tokio #数据库 #分布式系统

datacake-eventual-consistency

作为库的最终一致性状态复制(共识、RPC 和冲突解决),用于构建自己的最终一致性数据库

4 个版本 (2 个重大更新)

0.5.1 2023 年 6 月 22 日
0.4.0 2023 年 2 月 26 日
0.2.1 2023 年 1 月 6 日
0.2.0 2023 年 1 月 6 日

#1158 in 并发

每月下载 32 次
用于 3 crates

MIT 许可证

385KB
8K SLoC

Datacake 集群

构建自己的分布式数据存储或复制状态的全面库。

此库主要基于 Riak 和 Cassandra 的相同概念。共识、成员资格和故障检测由 Quickwit 的 Chitchat 管理,而状态对齐和复制由 Datacake CRDT 管理。

此库侧重于提供简单且易于构建的框架,用于您的分布式应用程序,而不会令人不知所措。事实上,只需实现一个异步特质即可启动和运行。

基本示例

use std::net::SocketAddr;
use datacake_node::{Consistency, ConnectionConfig, DCAwareSelector, DatacakeNodeBuilder};
use datacake_eventual_consistency::test_utils::MemStore;
use datacake_eventual_consistency::EventuallyConsistentStoreExtension;

async fn main() -> anyhow::Result<()> {
    let addr = "127.0.0.1:8080".parse::<SocketAddr>().unwrap();
    let connection_cfg = ConnectionConfig::new(addr, addr, Vec::<String>::new());
    let node = DatacakeNodeBuilder::<DCAwareSelector>::new(1, connection_cfg)
        .connect()
        .await
        .expect("Connect node.");

    let store = node
        .add_extension(EventuallyConsistentStoreExtension::new(MemStore::default()))
        .await
        .expect("Create store.");
    
    let handle = store.handle();

    handle
        .put(
            "my-keyspace",
            1,
            b"Hello, world! From keyspace 1.".to_vec(),
            Consistency::All,
        )
        .await
        .expect("Put doc.");
    
    Ok(())
}

完整示例

深入了解示例 在此处 可以找到。

依赖关系

~8–20MB
~249K SLoC