What May Surprise You About UUIDv7
8 months ago
- #UUIDv7
- #Database
- #Distributed Systems
- UUIDv7是一种受ULID启发的128位标识符,包含时间戳和随机数据。
- 在数据库和分布式系统中,UUIDv7相比UUIDv4、ULID和Snowflake ID等其他标识符类型更受青睐。
- RFC 9562为UUIDv7设定了要求,包括使用加密安全的伪随机数生成器(CSPRNG)。
- UUIDv7的实现提供了多种字段和位布局,以确保单调性,即使在时钟回退的情况下。
- 可以通过计数器、互斥锁或亚毫秒时间戳段来确保单调性,服务器端生成能提供更好的结果。
- 不建议从UUIDv7中提取时间戳,显式的时间戳列是更好的选择。
- UUIDv7可以用作数据库的分区键。
- UUIDv7中的时间戳偏移有助于隐藏创建日期、避免锁争用,并确保远程客户端的单调性。
- UUIDv7采用“十六进制加短横线”格式,但也可以使用Crockford的Base32以提高可读性。
- 以128位二进制格式存储UUIDv7,相比字符串表示可减少30-40%的存储开销。
- UUIDv7标识符可以通过元数据和校验和扩展到128位以上。
- UUIDv7包含一个4位的版本字段(7)和一个2位的变体字段。
- UUIDv7和bigint在搜索和写入性能上相近,UUIDv7的生成速率不会影响数据库性能。
- UUIDv7消除了自增键的问题,如同步问题、键冲突和暴力破解风险。
- UUIDv7可以与其他UUID版本或二进制格式的ULID存储在同一列中。