Crates.io | track_rs |
lib.rs | track_rs |
version | 0.1.0 |
source | src |
created_at | 2023-10-28 05:46:46.221892 |
updated_at | 2023-10-28 05:46:46.221892 |
description | A version control and incremental data storage tool based on Rust, |
homepage | https://github.com/sonichen/track_rs |
repository | https://github.com/sonichen/track_rs |
max_upload_size | |
id | 1016731 |
size | 13,436 |
track_rs
is a version control based on Rust, allowing you to store only data blocks that have not been stored in previous versions, effectively managing and restoring different versions of data.
The design of track_rs is centered around the following key principles:
Version Control: The project allows users to maintain and manage multiple versions of data. Each version is represented as a Delta.
Incremental Data Storage: To reduce storage space usage, track_rs stores only the data blocks that have not been stored in previous versions. This is achieved through a block-based approach.
Block-Based Storage: Data is divided into blocks, and each block is associated with a unique identifier. When a new version is created, only the new and previously unsaved blocks are stored, along with the composition order. This design minimizes redundant data storage.
Quick Data Restoration: Users can efficiently restore data to a specific version by specifying the version number and data block index.
track_rs is designed to be useful in various scenarios, including:
Add track_rs as a dependency in your Cargo.toml:
[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);
}
}
Output
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
is licensed under this licensed: