php取表中最大的id,用Golang和PHP生成mongodb的24位的id

mongodb id的用途在分布式存储上作为全局唯一id使用;

mogodb转为其他数据库,比如pgsql时,沿用原先的id规则;

需要隐藏真实数量的地方,比如用mysql存储用户,其自增id很容易看出用户数量;

防止某种形式的机器攻击,比如根据mysql、pgsql等自增id很容易通过机器生成url,在做采集时很方便。

mongodb的生成规则

mongodb根据版本不同,生成规则有部分调整,不同的地方在中间的10位(5 byte)。根据mongodb的文档,在mongodb3.2以下的ObjectId生成规则:8位的时间戳 + 6位的机器标志 + 4位的进程id + 6位的自增计数a 4-byte value representing the seconds since the Unix epoch,

a 3-byte machine identifier,

a 2-byte process id, and

a 3-byte counter, starting with a random value.

mongodb3.4及以上的版本的ObjectId生成规则:8位的时间戳 + 10位的随机码 + 6位的自增计数a 4-byte timestamp value, representing the ObjectId’s creation, measured in seconds since the Unix epoch

a 5-byte random value

a 3-byte incrementing counter, initialized to a random value

PHP生成mongodb id

下列算法是mongodb3.2之前的ObjectId生成算法,来自于网上,参考注释部分

下列php代码用于生成mongodb3.4级以上版本的ObjectId

golang生成mongodb ObjectId注意:go playground中生成mongodb3.4以上版本的id每次都一样,经观察应该是随机数生成一致的原因,本人本机测试没问题。

基准测试结果

小结实际上我自己使用时,传入的参数是用到这个id的表的名称,而lastId则通过内存缓存存储,每次要用的时候从缓存获取并加一。

0968df00314936fd09463746d252794c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值