我们可以在当前流程中使用process.hrtime()
作为通用唯一ID吗?
var uuid = parseInt(process.hrtime().join(''));
答案 0 :(得分:1)
您可以使用process.hrtime()
创建碰撞机率较低的标识符,但它们并不是唯一的,尤其是在应用程序重新启动时不重要(如果您将其中的任何一个保留到数据库或类似数据库,这很重要),而不是涉及多个线程/进程/实例。
这些时间相对于过去的任意时间,与时间无关
此外,通过使用parseInt(....join(''))
,您将引入第二种方式来发生冲突:例如[1, 23]
和[12, 3]
会产生相同的结果。
如果你想构建自己的解决方案(a[0] * 1e9 + a[1]
作为一种天真的方法而想到),你也应该知道JavaScript数字的精度限制 - 这就是hrtime()
返回的原因一个元组而不仅仅是一个数字。如果有疑问,当您需要适当的UUID时,您应该使用正确的UUID; - )
答案 1 :(得分:0)
这个问题已经很老了,但是我设法弄清楚了类似的东西(部分是在一台机器上,尚未完全验证)。参见Is this a viable, monotonically increasing timeId in javascript?。 (请注意,需要节点10或11,到目前为止,我仅在Mac OS Mojave上进行过验证)
该解决方案将不提供UUID,但应生成一个ID,该ID的值始终在增加。某些其他机器/进程ID必须附加到它上,以使其真正唯一。