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"
可用哈希算法
- CityHash
- FarmHash
- Lookup3
- Murmur
- SpookyHash
- 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-32字节),CityHash和FarmHash通常最快
- 对于大数据,xxHash通常表现优异
选择建议
- 通用场景: CityHash或FarmHash
- 短字符串: MurmurHash
- 大数据块: xxHash
- 需要稳定性: 注意算法版本
通过合理选择哈希算法,fasthash-sys可以显著提升应用程序中哈希相关操作的性能。