gpt4 book ai didi

javascript - 用于多平台应用程序的可排序 UUID v1

转载 作者:行者123 更新时间:2023-11-29 11:02:40 29 4
gpt4 key购买 nike

我们正在寻找一种解决方案来为 Web、iOS 和 Android 客户端之间交换的消息/信号生成唯一 ID,这些消息/信号随后会保留在后端。

  • 解决方案必须标准化

  • 可在多个平台上使用

  • 可按创建时间排序,可由数据库索引

除了排序和索引需要重新排列字符串标识符这一小事外,UUID v1 具有这些属性。

UUID 文档解释了时间 block 的顺序是相反的(从毫秒开始)(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进行排序,我们必须使用比较函数。

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 但在重新排列的客户端之间交换它是否正确,以便客户端可以按字符串表示排序,而不必每次都使用比较函数进行排序?

现场测试:https://codesandbox.io/s/q5oRxgnp

最佳答案

如果重新排列 UUID 的位,您不再拥有 UUID。

另请注意,UUID 标准的目的之一是允许混合不同版本 UUID 的值。换句话说,通常你不应该假设你的 UUID 完全是一个版本。

UUID 从未打算被撕裂,永远不会被视为容器。想到这样做的聪明程序员对他们自己的利益来说是聪明了。

然而,有些人确实改变了他们的 UUID 的结构或内容。我不建议这样做。

相反,我建议您确定并分离您的顾虑。

  • 标识符
    如果您需要在不与中央服务器协调的情况下跨越时间和空间唯一地标识您的实体,请使用适当的 UUID。
  • 排序
    如果您想要排序,则为排序值添加另一个字段。例如,如果您想按时间顺序排序,请存储一个时间戳值(如果您的数据库或数据接收器支持)。如果不支持,以标准的 UTC 格式存储日期时间值的文本表示 ISO 8601格式。这种格式经过巧妙设计,因此按字母顺序排序时也按时间顺序排列。

2017-01-23T01:23:45.123Z

关于javascript - 用于多平台应用程序的可排序 UUID v1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44356237/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com