我们正在寻找一种解决方案,为在 Web、iOS 和 Android 上的客户端之间交换的消息/信号生成唯一 ID,然后在后端持久保存。
解决方案必须标准化
可在多个平台上使用
可按创建时间排序,可按数据库索引
UUID v1 具有这些属性,除了排序和索引需要重新排列字符串标识符的一件小事。
UUID 文档解释了时间块的顺序是颠倒的(从毫秒开始)(链接)。
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 进行排序,我们必须使用比较函数。
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 但在重新排列的客户端之间交换它是否正确,以便客户端可以按字符串表示进行排序,而不必每次都使用比较函数进行排序?