@15ms/shikiid
v0.1.0
Published
A compact parameterized identifier encoder.
Readme
@15ms/shikiid
紧凑的参数化标识编码器。
特性
- 时间有序,字典序即时间序,B-tree 索引天然友好
- 无状态生成,不依赖中心化服务,不注册节点,拿来即用
- URL 安全,base36 字符集(
0-9a-z),大小写不敏感 - 紧凑可控,10 位起步,适配
varchar(20),参数化调节精度与容量
快速开始
import { ShikiIDGen } from '@15ms/shikiid';
const gen = new ShikiIDGen({ t: 4, c: 2, r: 4, tspan: 1800 });
gen.nextID(); // "0a1b00x7k2"
gen.nextID(); // "0a1b01m3p9"
gen.nextID({ time: 100, count: 0 }); // 指定时间桶和计数器
gen.nextID({ random: 'abcdef01' }); // 指定随机片段Shiki(t, c, r) 格式
| 段 | 位数 | 用途 | |----|------|------| | 时间 | t (4–6) | 桶编码的创建时间戳 | | 计数 | c (2–4) | 进程内自增轮转计数器 | | 随机 | r (4–14) | 密码学安全随机后缀 |
配置参数
| 参数 | 类型 | 说明 |
|------|------|------|
| t | number | 时间编码位数(4–6) |
| c | number | 自增轮转位数(2–4) |
| r | number | 随机片段位数(4–14) |
| tspan | number | 时间桶距(秒) |
| epoch | Date? | 纪元起点(默认 2025-01-01) |
预设配置
| 配置 | 时间桶距 | 寿命 | 总长 | |------|---------|------|------| | Shiki(4,2,4) | 1800s (~30分钟) | ~96 年 | 10 | | Shiki(4,2,6) | 3600s (~1小时) | ~191 年 | 12 | | Shiki(6,2,12) | 10s | ~690 年 | 20 |
寿命 = tspan × 36^t,由外部根据业务需求计算后传入
tspan。
碰撞率
以 Shiki(4,2,4)、tspan=1800s(30 分钟桶距)、1296 个 count 分组为例:
| 每桶 ID 数 | 碰撞率 | |-----------|--------| | 1,000 | ~10⁻⁷ | | 10,000 | ~0.002% | | 100,000 | ~0.18% |
