对我的问题的后续行动:Unique Linux filename, sortable by time产生以字母数字排序的UUID的一段时间
我需要生成一个UUID是本身随着时间的推移以字母数字顺序。我假设我需要追加自纪元和纳秒以来的系统日期秒数。这意味着我真的只需要一个UUID算法,该算法在给定的纳秒内以字母数字顺序排列。
因此,举例来说,我在想的UUID的是这样的:
SECONDS_SINCE_EPOCH。 NANOSECONDS。 UID
以下的bash:在
for i in `seq 1 10`;
do
echo `date '+%s.%N'`.`uuidgen -t`
done
结果:
1424718695.481439000.c8fef5d4-bb8f-11e4-92c7-00215e673861
1424718695.484130000.c8ff5eb6-bb8f-11e4-ae12-00215e673861
1424718695.486718000.c8ffc2ca-bb8f-11e4-ae15-00215e673861
1424718695.489267000.c90025bc-bb8f-11e4-a624-00215e673861
1424718695.491803000.c90089f8-bb8f-11e4-95ac-00215e673861
1424718695.494381000.c900ed76-bb8f-11e4-9058-00215e673861
1424718695.496899000.c901513a-bb8f-11e4-8018-00215e673861
1424718695.499460000.c901b440-bb8f-11e4-b382-00215e673861
1424718695.502007000.c90217a0-bb8f-11e4-89cd-00215e673861
1424718695.504532000.c90279d4-bb8f-11e4-b515-00215e673861
的名字出现,就好像它们就足够了,这些文件...但我担心的是,我不能保证这些名称将是字母数字顺序的,如果两个文件在同一纳秒内创建(考虑大型企业系统,其中10个核心运行许多并发用户)。因为那时我完全依赖于UUID算法来保存我的唯一名称,所有UUID算法的承诺都是唯一的,而不是“字母数字序列性”。
可以保证唯一性和字母数字顺序的方法的任何想法?因为我们正在处理大型企业系统,所以我需要尽可能保持我的要求,但我可能会摇摆一些旧版本的Python,以及如果纯粹的bash中的解决方案不可用。
这里是否涉及任何并发?如果同一纳秒内的两个文件不具有与其相对创建时间相对应的排序顺序,那么它有多重要? – 2015-02-23 19:25:04
我喜欢认为它并不重要....但是有并发性,而且我们总是按照在系统上处理它们的特定顺序排列事件(我们正在处理企业数据复制和审计)。在实践中,我们在这里碰撞的可能性有多大?我会说不太可能...可能。但是,如果有任何可用的解决方案,我愿意实施它,而不是让可能性开放。 – slumtrimpet 2015-02-23 19:33:13
我以为我有一个解决方案,只是为了实现在UUID中首先使用RFC 4122 UUID的时间部分和* low *的一半,所以前4个八位组快速重复,使整个UUID概念不按字典顺序排列。 – 2015-02-23 19:53:04