PHP中生成UUID的最高效方法是什么?

3

在多次调用以下函数时,是否存在显著的开销(CPU、内存和/或IO):

public function getUuid()
{
    return `uuidgen -r`; # -r = version 4
}

使用C库生成UUID,与使用全PHP实现生成UUID(v4)相比有何区别?如果项目使用Apache (Prefork MPM) 2.2.22PHP 5.3.10(带APC),请注意这一点。

我的初步感觉是,使用C库生成UUID的好处远远超过系统调用开销。此外,由于uuidgenutil-linux软件包的一部分,我会更相信它可以正确生成UUID,而不是使用PHP库,但我很想得到一些额外的意见。


你能不能使用这个函数:http://php.net/manual/zh/function.uniqid.php - user557846
@dagon 我们正在与一些非PHP系统集成,因此能够在所有系统中生成相同风格的标识符非常重要。 - InvertedAcceleration
2
我想知道关闭这个问题的人在想什么。这显然是一个编程问题,不适合在SuperUser上讨论。 - ofrommel
@Fred-ii- 我非常强烈地认为这是一个编程问题,应该重新开放。我正在使用PHP,并且需要以高效的方式生成UUID,我的问题是在使用PHP调用系统库或使用全PHP实现来生成它之间的代码差异。 - InvertedAcceleration
你可能仍然考虑我的答案。 - ofrommel
1个回答

1
我建议您对问题进行分析。PHP函数shell_exec()也会生成一个shell,所以它可能不像您想象的那样便宜。然而,您提到的PHP类似乎也会调用子进程。我在OS X上进行了一些测试,使用PHP类可以在约一分钟内生成10,000个UUID,与shell_exec('uuidgen')相比,后者只需要40秒。
此外,PHP类似乎还调用了ifconfig,这可能是略微大一些的开销的原因。
另外,您选择的哈希算法也可能会影响结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接