#index #sorting #uuid #readable #oid #explode #double-click-copyable

oid2

一个兼容uuid、字典序排序(不会导致数据库索引爆炸)、可读、可双击复制的id模式

1 个不稳定版本

0.1.0 2023年4月15日

2283数据库接口

MIT 许可证

9KB
185

oid

一个id方案。为什么还需要另一个呢?

  • lexicographically sortable - uuidv4 不可排序并且会导致数据库索引爆炸。像 ulid 一样,oid 是可按字典序排序的。
  • 命名 - oid 可以用名称作为前缀,例如 team_0da0fa0e02cssbhkanf04c_srb0
  • 短编码 - oid 可以用简写形式编写,例如 team_srb0
  • 可双击复制 - 尝试双击此uuid:a827f03c-f5b0-40ef-8d53-3fb3cdf4e055。然后尝试这个 oidteam_0da0fa0e02cssbhkanf04c_srb0

用法

label!(Team, "team");
label!(User, "usr");
label!(Transaction, "tx");

fn main() {
    let id = Team::oid();
    // e.g. id: team_0da0fa0e02cssbhkanf04c_srb0
    println!("id: {}", id);
    // e.g. id: team_srb0
    // e.g. uuid: a827f03c-f5b0-40ef-8d53-3fb3cdf4e055
    println!("short: {}", id.short());
    println!("uuid: {}", id.uuid());
    
    // We didn't use a Label, so it's simply missing.
    let id = new_oid();
    // e.g. id: 0da0fa0e02cssbhkanf04c_srb0
    println!("id: {}", id);
}

路线图

  • 创建一个PostgreSQL扩展,将oids存储为u128,但以可读的格式显示。

依赖关系

~1–14MB
~162K SLoC