TypeScript 8位(8 bytes)内容ID生成器 思路参照Ob - Assbbs
TypeScript 8位(8 bytes)内容ID生成器 思路参照ObjectId: https://www.runoob.com/mongodb/mongodb-objectid.html 但是MongoDB已经修改了ObjectId生成逻辑,其中机器码和进程ID改为随机数,因为两者在不同机器上的重复概率很高。 我在其基础上进行了精简和修改: 前5位表示…
TypeScript 8位(8 bytes)内容ID生成器 思路参照ObjectId: https://www.runoob.com/mongodb/mongodb-objectid.html 但是MongoDB已经修改了ObjectId生成逻辑,其中机器码和进程ID改为随机数,因为两者在不同机器上的重复概率很高。 我在其基础上进行了精简和修改: 前5位表示当前时间戳,最多支持3万多年的秒级计数,从公元0年开始计数。 后3位为递增数,每秒最多支持16777215个ID生成,已达到性能瓶颈。 如果后期需要对系统进行分布式改造,那么将后3位的递增数进行拆分。 在初始化时,给每台服务器分发不同的的递增ID范围,这样可确保生成ID非重复。 当然所有递增ID加起来肯定也不能超过16777215这个极限,每秒生成这么多内容够用了。 最后将这个ID封装成恰好8位的BigInt类型,然后存储进KV(大部分Key支持Int64)。 class Aid { private static = 0; static bin : string { if this. >= 10000000 { this. = 0; } this. ++; return Math.round Date.now / 1000 + 62167219200 .toString 2 .padStart 40, '0' + this. .toString 2 .padStart 24, '0' ; } static big : bigint { return BigInt '0b' + this.bin ; } }