我们正在寻找一种解决方案,为Web、iOS和Android客户端之间交换的消息/信号生成唯一的标识符,并在后端进行持久化。
由于UUID表示法的存在,我们无法仅通过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的字符串表示对其进行排序,因此我们必须使用比较函数。
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但在客户端之间重新排列它,这样客户端可以按字符串表示进行排序,而不必每次都使用比较函数进行排序,这样做是否正确?