#版本控制 # #区块 #区块索引 #增量存储

已删除 delta_rs

基于Rust的版本控制和增量数据存储工具,

2个版本

0.1.1 2023年10月27日
0.1.0 2023年10月27日

#10 in #区块索引

MIT/Apache

14KB
201

delta_rs 0.1.0

delta_rs 是一个基于Rust的 版本控制增量数据存储工具,允许您只存储之前版本中没有存储的数据块,从而有效地管理和恢复数据的不同版本。

设计概述

delta_rs的设计围绕以下关键原则

  • 版本控制:项目允许用户维护和管理多个版本的数据。每个版本表示为一个Delta。

  • 增量数据存储:为了减少存储空间的使用,delta_rs只存储之前版本中没有存储的数据块。这通过基于块的方法实现。

  • 基于块存储:数据被分成块,每个块都与一个唯一的标识符相关联。当创建新版本时,只存储新的和之前未保存的块,以及组成顺序。这种设计最小化了冗余数据存储。

  • 快速数据恢复:用户可以通过指定版本号和数据块索引来高效地将数据恢复到特定版本。

示例用例

Delta_rs旨在在各种场景中发挥作用,包括

  • 有效地管理带版本的文档或文件。
  • 减少随时间演变的数据的存储空间。
  • 快速将数据恢复到特定版本以进行分析或历史目的。

快速开始

安装

在Cargo.toml中将delta_rs添加为依赖项

[dependencies]
delta_rs = "0.1.1"

用法示例

use delta_rs::{ get_content, Deltas};

fn main() {
    // Write data
    let mut deltas=Deltas::create("Hello, I am a rust developer.");
    
    // First modify
    deltas.modify("Hello, I am a Java developer.");

    // Second modify
    deltas.modify("Hello, I am a Python developer.");

    // Third modify
    deltas.modify("Hello, I am a Go developer.");

    // print the data block and the content
    for item in &deltas.deltas {
        println!("{}", get_content(item.id, deltas.deltas.clone()));
        println!("{:?}\n", item);
    }
    
}

输出

Hello, I am a rust developer.
Delta { id: 0, index: [0, 1, 2], blocks: [DataBlock { block_number: 0, data: [72, 101, 108, 108, 111, 44, 32, 73, 32, 97] }, DataBlock { block_number: 1, data: [109, 32, 97, 32, 114, 117, 115, 116, 32, 100] }, DataBlock { block_number: 2, data: [101, 118, 101, 108, 111, 112, 101, 114, 46] }], snapshot: true }

Hello, I am a Java developer.
Delta { id: 1, index: [0, 3, 2], blocks: [DataBlock { block_number: 3, data: [109, 32, 97, 32, 74, 97, 118, 97, 32, 100] }], snapshot: true }

Hello, I am a Python developer.
Delta { id: 2, index: [0, 4, 5, 6], blocks: [DataBlock { block_number: 4, data: [109, 32, 97, 32, 80, 121, 116, 104, 111, 110] }, DataBlock { block_number: 5, data: [32, 100, 101, 118, 101, 108, 111, 112, 101, 114] }, DataBlock { block_number: 6, data: [46] }], snapshot: true }

Hello, I am a Go developer.
Delta { id: 3, index: [0, 7, 8], blocks: [DataBlock { block_number: 7, data: [109, 32, 97, 32, 71, 111, 32, 100, 101, 118] }, DataBlock { block_number: 8, data: [101, 108, 111, 112, 101, 114, 46] }], snapshot: true }

许可证

delta_rs 在此许可证下授权

无运行时依赖项