Rust高性能哈希库fasthash-sys的使用,提供快速稳定的非加密哈希算法实现

Rust高性能哈希库fasthash-sys的使用,提供快速稳定的非加密哈希算法实现

安装

在你的项目目录中运行以下Cargo命令:

cargo add fasthash-sys

或者在Cargo.toml中添加以下行:

fasthash-sys = "0.3.2"

使用示例

以下是一个使用fasthash-sys库的完整示例:

use fasthash_sys::{city, farm, metro, mum, murmur, spooky, xx};

fn main() {
    let data = b"hello world";
    
    // 计算CityHash32哈希值
    let city_hash = unsafe { city::hash32(data.as_ptr() as *const _, data.len()) };
    println!("CityHash32: {}", city_hash);
    
    // 计算FarmHash32哈希值
    let farm_hash = unsafe { farm::hash32(data.as_ptr() as *const _, data.len()) };
    println!("FarmHash32: {}", farm_hash);
    
    // 计算MetroHash64哈希值
    let metro_hash = unsafe { metro::hash64(data.as_ptr() as *const _, data.len()) };
    println!("MetroHash64: {}", metro_hash);
    
    // 计算MumHash64哈希值
    let mum_hash = unsafe { mum::hash64(data.as_ptr() as *const _, data.len()) };
    println!("MumHash64: {}", mum_hash);
    
    // 计算MurmurHash32哈希值
    let murmur_hash = unsafe { murmur::hash32(data.as_ptr() as *const _, data.len()) };
    println!("MurmurHash32: {}", murmur_hash);
    
    // 计算SpookyHash32哈希值
    let spooky_hash = unsafe { spooky::hash32(data.as_ptr() as *const _, data.len()) };
    println!("SpookyHash32: {}", spooky_hash);
    
    // 计算XXHash32哈希值
    let xx_hash = unsafe { xx::hash32(data.as_ptr() as *const _, data.len()) };
    println!("XXHash32: {}", xx_hash);
}

完整示例demo

use fasthash_sys::{city, farm, metro, mum, murmur, spooky, xx};
use std::time::Instant;

fn benchmark<F>(name: &str, f: F) 
where
    F: Fn(&[u8]) -> u64
{
    let data = b"benchmarking hash performance with fasthash-sys";
    let start = Instant::now();
    
    for _ in 0..1_000_000 {
        f(data);
    }
    
    let duration = start.elapsed();
    println!("{}: {:?}", name, duration);
}

fn main() {
    let data = b"hello world";
    
    // 计算并打印各种哈希值
    println!("Hashing 'hello world':");
    
    let city_hash = unsafe { city::hash32(data.as_ptr() as *const _, data.len()) };
    println!("CityHash32: {}", city_hash);
    
    let farm_hash = unsafe { farm::hash32(data.as_ptr() as *const _, data.len()) };
    println!("FarmHash32: {}", farm_hash);
    
    let metro_hash = unsafe { metro::hash64(data.as_ptr() as *const _, data.len()) };
    println!("MetroHash64: {}", metro_hash);
    
    let mum_hash = unsafe { mum::hash64(data.as_ptr() as *const _, data.len()) };
    println!("MumHash64: {}", mum_hash);
    
    let murmur_hash = unsafe { murmur::hash32(data.as_ptr() as *const _, data.len()) };
    println!("MurmurHash32: {}", murmur_hash);
    
    let spooky_hash = unsafe { spooky::hash32(data.as_ptr() as *const _, data.len()) };
    println!("SpookyHash32: {}", spooky_hash);
    
    let xx_hash = unsafe { xx::hash32(data.as_ptr() as *const _, data.len()) };
    println!("XXHash32: {}", xx_hash);
    
    // 性能基准测试
    println!("\nBenchmarking hash functions (1,000,000 iterations):");
    
    benchmark("CityHash32", |d| unsafe { 
        city::hash32(d.as_ptr() as *const _, d.len()) as u64 
    });
    
    benchmark("FarmHash32", |d| unsafe { 
        farm::hash32(d.as_ptr() as *const _, d.len()) as u64 
    });
    
    benchmark("MetroHash64", |d| unsafe { 
        metro::hash64(d.as_ptr() as *const _, d.len()) 
    });
    
    benchmark("MumHash64", |d| unsafe { 
        mum::hash64(d.as_ptr() as *const _, d.len()) 
    });
    
    benchmark("MurmurHash32", |d| unsafe { 
        murmur::hash32(d.as_ptr() as *const _, d.len()) as u64 
    });
    
    benchmark("SpookyHash32", |d| unsafe { 
        spooky::hash32(d.as_ptr() as *const _, d.len()) as u64 
    });
    
    benchmark("XXHash32", |d| unsafe { 
        xx::hash32(d.as_ptr() as *const _, d.len()) as u64 
    });
}

说明

fasthash-sys库提供了多种快速稳定的非加密哈希算法实现,包括:

  • CityHash
  • FarmHash
  • MetroHash
  • MumHash
  • MurmurHash
  • SpookyHash
  • XXHash

这些哈希算法适合用于哈希表、布隆过滤器等需要快速哈希的场景,但不适用于加密用途。

注意:由于这是底层系统绑定库,使用时需要注意unsafe操作。大多数函数需要传入原始指针和数据长度,调用时需要确保指针和数据的安全性和有效性。


1 回复

Rust高性能哈希库fasthash-sys使用指南

简介

fasthash-sys是Rust的一个高性能哈希库,提供了一系列快速且稳定的非加密哈希算法实现。它是Rust对C++ fasthash库的绑定,特别适合需要高性能哈希的场景,如哈希表、布隆过滤器、数据校验等。

主要特性

  • 提供多种高性能哈希算法
  • 极快的哈希计算速度
  • 稳定的哈希输出
  • 适合非加密场景
  • 支持32位和64位哈希值

安装

在Cargo.toml中添加依赖:

[dependencies]
fasthash-sys = "0.3"

可用哈希算法

  1. CityHash
  2. FarmHash
  3. Lookup3
  4. Murmur
  5. SpookyHash
  6. xxHash

完整示例代码

以下是一个结合了多种功能的完整示例,展示了fasthash-sys的主要用法:

use fasthash_sys::{city_hash, farm_hash, murmur_hash, xx_hash};
use std::time::Instant;

fn main() {
    // 示例1: 基本哈希使用
    basic_usage();
    
    // 示例2: 不同算法的比较
    compare_algorithms();
    
    // 示例3: 带种子的哈希
    seeded_hashing();
    
    // 示例4: 流式哈希
    streaming_hashing();
    
    // 示例5: 性能基准测试
    performance_benchmark();
}

// 基本哈希使用示例
fn basic_usage() {
    println!("\n=== 基本哈希使用示例 ===");
    
    let data = b"hello fasthash-sys";
    
    // CityHash示例
    let city_hash = city_hash::hash64(data);
    println!("CityHash64: {}", city_hash);
    
    // FarmHash示例
    let farm_hash = farm_hash::hash64(data);
    println!("FarmHash64: {}", farm_hash);
    
    // 32位哈希示例
    let murmur_hash = murmur_hash::hash32(data);
    println!("MurmurHash32: {}", murmur_hash);
}

// 不同算法比较示例
fn compare_algorithms() {
    println!("\n=== 不同算法比较示例 ===");
    
    let data = b"comparison data";
    
    println!("输入数据: {:?}", data);
    println!("CityHash64: {}", city_hash::hash64(data));
    println!("FarmHash64: {}", farm_hash::hash64(data));
    println!("MurmurHash32: {}", murmur_hash::hash32(data));
    println!("xxHash64: {}", xx_hash::hash64(data));
}

// 带种子的哈希示例
fn seeded_hashing() {
    println!("\n=== 带种子的哈希示例 ===");
    
    let data = b"data with seed";
    let seed = 42;
    
    println!("使用种子: {}", seed);
    println!("CityHash with seed: {}", city_hash::hash64_with_seed(data, seed));
    println!("MurmurHash with seed: {}", murmur_hash::hash32_with_seed(data, seed));
}

// 流式哈希示例
fn streaming_hashing() {
    println!("\n=== 流式哈希示例 ===");
    
    // 使用xxHash的流式接口
    let mut hasher = xx_hash::Hash64::with_seed(0);
    
    // 分多次写入数据
    hasher.write(b"streaming ");
    hasher.write(b"hashing ");
    hasher.write(b"example");
    
    let final_hash = hasher.finish();
    println!("流式哈希结果: {}", final_hash);
}

// 性能基准测试示例
fn performance_benchmark() {
    println!("\n=== 性能基准测试示例 ===");
    
    let test_data = vec![b'a'; 1024]; // 1KB测试数据
    
    // 测试函数
    let benchmark = |name: &str, func: fn(&[u8]) -> u64| {
        let start = Instant::now();
        for _ in 0..100_000 {
            func(&test_data);
        }
        let duration = start.elapsed();
        println!("{}: {:?} (100,000 iterations)", name, duration);
    };
    
    benchmark("CityHash64", city_hash::hash64);
    benchmark("FarmHash64", farm_hash::hash64);
    benchmark("xxHash64", xx_hash::hash64);
}

注意事项

  1. 这些是非加密哈希算法,不适用于安全敏感场景
  2. 不同版本的库可能产生不同的哈希值
  3. 对于小数据(1-32字节),CityHash和FarmHash通常最快
  4. 对于大数据,xxHash通常表现优异

选择建议

  • 通用场景: CityHash或FarmHash
  • 短字符串: MurmurHash
  • 大数据块: xxHash
  • 需要稳定性: 注意算法版本

通过合理选择哈希算法,fasthash-sys可以显著提升应用程序中哈希相关操作的性能。

回到顶部