#delta-compression #numerical #delta

pco

适用于数值序列的良好压缩

15个不稳定版本 (3个重大更改)

0.3.1 2024年7月6日
0.2.5 2024年5月6日
0.2.2 2024年3月22日
0.1.2 2023年12月15日
0.0.0-alpha.02023年7月7日

#45压缩

Download history 390/week @ 2024-05-04 390/week @ 2024-05-11 288/week @ 2024-05-18 209/week @ 2024-05-25 275/week @ 2024-06-01 328/week @ 2024-06-08 371/week @ 2024-06-15 462/week @ 2024-06-22 608/week @ 2024-06-29 440/week @ 2024-07-06 357/week @ 2024-07-13 155/week @ 2024-07-20 179/week @ 2024-07-27 154/week @ 2024-08-03 378/week @ 2024-08-10 286/week @ 2024-08-17

1,027 每月下载次数
用于 6 个crate (5个直接)

Apache-2.0

295KB
7.5K SLoC

Pco (Pcodec) 以高压缩比和适中的速度无损压缩和解压缩数值序列。

快速入门

use pco::standalone::{simpler_compress, simple_decompress};
use pco::DEFAULT_COMPRESSION_LEVEL;
use pco::errors::PcoResult;

fn main() -> PcoResult<()> {
  // your data
  let mut my_nums = Vec::new();
  for i in 0..100000 {
    my_nums.push(i as i64);
  }

  // compress
  let compressed: Vec<u8> = simpler_compress(&my_nums, DEFAULT_COMPRESSION_LEVEL)?;
  println!("compressed down to {} bytes", compressed.len());

  // decompress
  let recovered = simple_decompress::<i64>(&compressed)?;
  println!("got back {} ints from {} to {}", recovered.len(), recovered[0], recovered.last().unwrap());
  Ok(())
}

编译注意事项

为了在x86_64上获得最佳性能,请使用您的硬件支持的任何 bmi*avx* 指令集进行编译。 几乎所有当前的x86硬件都支持 bmi1bmi2avx2。这可以略微提高压缩速度,并显著提高解压缩速度!要确保您正在使用这些,您可以

  • 将以下内容添加到您的 ~/.cargo/config.toml
[target.'cfg(target_arch = "x86_64")']
rustflags = ["-C", "target-feature=+bmi1,+bmi2,+avx2"]
  • 或者使用 RUSTFLAGS="-C target-feature=+bmi1,+bmi2,+avx2" cargo build --release ...

请注意,设置 target-cpu=native 并不总是产生相同的效果,因为LLVM为广泛的CPU族编译指令的最低公共基数。

依赖项

~375KB