#工程 #应用 #哈希 #EID #时间 #字符串 #数据库

datafet

我们在所有 Rust 应用程序中使用的少数几个函数

2 个版本

0.3.1 2023 年 3 月 10 日
0.3.0 2023 年 2 月 13 日
0.2.1 2023 年 1 月 13 日
0.2.0 2023 年 1 月 13 日
0.1.0 2023 年 1 月 13 日

#1672 in Rust 模式

MIT 许可证

7KB
136

Datafet

一些针对我们大部分数据工程应用的实用函数。

EID

一些基于外部 [1] ids 生成一致哈希的函数。

pub fn get_external_id_str(name: &str, prefix: &str) -> String {
    let mut spooky_hasher = SpookyHasher::new(1337, 7331);
    spooky_hasher.write(name.as_bytes());
    let hash_uint64 = spooky_hasher.finish();
    let hash_hex = format!("{:x}", hash_uint64);
    let base32 = base32::encode(Alphabet::RFC4648 { padding: false }, hash_hex.as_bytes());
    format!("{}-{}", prefix, base32.to_ascii_lowercase())
}

在我们的大多数应用中都有几种这样的类型

pub fn get_db_eid(database_name: &str) -> String {
    get_external_id_str(database_name, "db")
}

pub fn get_table_eid(table_name: &str) -> String {
    get_external_id_str(table_name, "table")
}

pub fn get_job_eid(job_name: &str) -> String {
    get_external_id_str(job_name, "job")
}

pub fn get_query_eid(query_name: &str) -> String {
    get_external_id_str(query_name, "query")
}

[1]: 意味着代码库之外的部分可以保留特定的 id,并且始终表示相同的底层实体。

时间

这里只有一个获取 Utc::now() 的字符串版本的函数。

pub fn utc_now() -> String {
    let now: DateTime<Utc> = Utc::now();
    now.to_rfc3339()
}

依赖项

~2MB
~23K SLoC