我们正在寻找一种解决方案,为在Web,iOS和Android上的客户端之间交换的消息/信号生成唯一ID,然后保留在后端。
UUID v1具有这些属性,除了排序和索引需要重新排列字符串标识符的一小部分。
UUID文档解释了时间块的顺序是相反的(从毫秒开始)(link)。
UUID = time-low "-" time-mid "-"
time-high-and-version "-"
clock-seq-and-reserved
clock-seq-low "-" node
time-low = 4hexOctet
time-mid = 2hexOctet
time-high-and-version = 2hexOctet
clock-seq-and-reserved = hexOctet
clock-seq-low = hexOctet
node = 6hexOctet
由于UUID表示,我们不能简单地通过ID的字符串表示对ID进行排序,我们必须使用compare函数。
const toSortableUUID = uuidV1 =>
uuidV1.replace(/^(.{8})-(.{4})-(.{4})/, '$3-$2-$1');
const uuidCompare = (uuidV1A, uuidV1B) => {
if (uuidV1A === uuidV1B) {
return 0;
}
const a = toSortableUUID(uuidV1A);
const b = toSortableUUID(uuidV1B);
return a < b ? -1 : 1;
};
const sortedArrayOfUUIDV1 = arrayOfUUIDV1.concat().sort(uuidCompare);
您是否知道另一种不会出现此问题的标准化方法?
使用UUID v1是否正确,但在重新安排的客户端之间进行交换,以便客户端可以按字符串表示排序,而不必每次都使用比较函数进行排序?
如果重新排列UUID的位,则不再具有UUID。
还要注意,UUID标准的目的之一是允许混合不同版本的UUID的值。换句话说,通常您不应该假设您的UUID完全是一个版本。
UUID从未打算被撕裂,永远不会被视为容器。聪明的程序员如果想要这样做,那就太聪明了。
然而,有些人确实改变了UUID的结构或内容。我不推荐。
相反,我建议您确定并区分您的疑虑。
2017-01-23t 01:23:45.123 g