Offtopic:
我是堆叠溢出的新手,我想打个招呼!
关于主题:
我正在为需要通过时间戳time()
到
my $md5_UUID = create_uuid_as_string(UUID_MD5, time."$job");
这些文件夹是在每个作业上每次运行生成的,并在运行后删除。如果以某种方式生成相同的UUID,则正在运行的+ -1000个作业可能会停止。
是否有任何可以从此处获取的信息或任何冲突的可能性(生成相同UUID的不同数据)?他们真正独特吗?另外,我应该在SHA1和MD5之间使用哪个版本的UUID?
答案 0 :(得分:2)
可能有一个纯粹的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地址),但这似乎是病态的设计。