Perl中的第5版UUID

时间:2013-06-20 19:42:27

标签: perl time uuid

Offtopic:

我是堆叠溢出的新手,我想打个招呼!

关于主题:

我正在为需要通过时间戳time()

创建和删除随机文件夹的应用程序生成版本5 UUID
my $md5_UUID  = create_uuid_as_string(UUID_MD5, time."$job");

这些文件夹是在每个作业上每次运行生成的,并在运行后删除。如果以某种方式生成相同的UUID,则正在运行的+ -1000个作业可能会停止。

是否有任何可以从此处获取的信息或任何冲突的可能性(生成相同UUID的不同数据)?他们真正独特吗?另外,我应该在SHA1和MD5之间使用哪个版本的UUID?

3 个答案:

答案 0 :(得分:2)

使用OS工具

可能有一个纯粹的Perl解决方案,但它可能有点过分。如果您使用的是Linux系统,则可以捕获 mktemp uuidgen 的结果,并在Perl脚本中使用它们。例如:

$ perl -e 'print `mktemp --directory`'
/tmp/tmp.vx4Fo1Ifh0

$ perl -e '$folder = `uuidgen`; print $folder'
113754e1-fae4-4685-851d-fb346365c9f0

mktemp 实用程序很不错,因为除了返回目录名外,它还会自动为您创建目录。您还可以通过修改模板为目录提供更有意义的名称(请参阅man 1 mktemp);相比之下,UUID并不擅长传达有用的语义。

答案 1 :(得分:0)

如果文件夹仅持续作业的长度,并且所有作业都在同一台计算机上运行,​​则只需将pid用作文件夹名称即可。根本不需要uuids。

答案 2 :(得分:0)

使用v1 UUID

Perl的time()功能准确到秒。因此,如果您每秒多次启动作业,或者同时在不同的主机上启动作业,则很容易发生冲突。

相比之下,v1 UUID的时间字段是粒度到纳秒,它包括生成主机的MAC地址。见RFC 4122 详情。我可以想象一个不保证唯一性的情况(客户端机器是独立的第3层虚拟网络上的虚拟机,所有虚拟机都具有相同的虚拟MAC地址),但这似乎是病态的设计。