我们可以在node.js中将process.hrtime()用作UUID吗?

我们可以在node.js中将process.hrtime()用作UUID吗?,node.js,npm,process,uuid,v8,Node.js,Npm,Process,Uuid,V8,我们可以使用process.hrtime()作为当前进程中的通用唯一id吗 var uuid = parseInt(process.hrtime().join('')); 您可以使用process.hrtime()来创建冲突几率很低的标识符,但它们不是唯一的,尤其是在应用程序重新启动时(如果将其中任何一个标识符持久化到数据库或类似的数据库中,这一点很重要),并且在涉及多个线程/进程/实例时也不是唯一的 从: 这些时间与过去的任意时间相关,与一天中的时间无关 此外,通过使用parseInt(….

我们可以使用
process.hrtime()
作为当前进程中的通用唯一id吗

var uuid = parseInt(process.hrtime().join(''));

您可以使用
process.hrtime()
来创建冲突几率很低的标识符,但它们不是唯一的,尤其是在应用程序重新启动时(如果将其中任何一个标识符持久化到数据库或类似的数据库中,这一点很重要),并且在涉及多个线程/进程/实例时也不是唯一的

从:

这些时间与过去的任意时间相关,与一天中的时间无关

此外,通过使用
parseInt(…..join('')
,您引入了发生冲突的第二种方式:例如
[1,23]
[12,3]
将导致相同的结果


如果您想构建自己的解决方案(
a[0]*1e9+a[1]
是一种幼稚的方法),您还应该了解JavaScript数字的精度限制--
hrtime()
返回一个元组而不仅仅是一个数字是有原因的。当有疑问时,当您需要适当的UUID时,您可能应该使用适当的UUID;-)

这个问题很老了,但我设法找到了这样的方法(部分是在一台机器上,但还没有完全验证)。看见(注意,需要节点10或11,到目前为止,我只在Mac OS Mojave上进行了验证)


该解决方案不会提供UUID,但它应该生成一个总是在增值的ID。必须附加一些其他机器/进程ID才能使其真正独一无二。

我们对数字uuid还有其他建议吗!如果您需要UUID(实际上有一个规范,请参阅),请查看。如果您只需要随机标识符,请使用
Math.random()