#版本控制 #增量 #跟踪 #Delta #版本 #块索引

bin+lib track_rs

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

1 个不稳定版本

0.1.0 2023 年 10 月 28 日

#4#块索引

MIT/Apache

14KB
201

track_rs 0.1.0

track_rs 是一个基于 Rust 的 版本控制 工具,允许您仅存储之前版本中未存储的数据块,有效地管理和恢复数据的不同版本。

设计概述

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

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

  • 增量数据存储:为了减少存储空间的使用,track_rs 仅存储之前版本中未存储的数据块。这是通过基于块的策略实现的。

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

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

示例用例

track_rs 被设计成在各种场景中有用,包括

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

快速入门

安装

在您的 Cargo.toml 中添加 track_rs 依赖项

[dependencies]
track_rs = "0.1.0"

使用示例

 

use track_rs::track_rs::{ get_content, Track};

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

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

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

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

输出

The text in 0 time is '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 }

The text in 1 time is '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 }

The text in 2 time is '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 }

The text in 3 time is '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 }

许可

track_rs 在此许可证下授权

无运行时依赖