【问题标题】:How Does Amazon Create Unique Base-36 Ids?亚马逊如何创建唯一的 Base-36 ID?
【发布时间】:2014-01-02 21:27:05
【问题描述】:

没什么邪恶的,只是作为一名网络开发人员好奇。

我查看了亚马逊如何实现他们的购物车页面,并注意到他们没有使用 base-10 int 值作为订单行标识符,而是使用 base-36。

他们是否将一些巨大的 bigint 序列值转换为 base-36 以保持 UI 输出简短(我认为不是这种情况,因为添加到我的购物车中的项目相隔几分钟就会超过数万亿条记录)?是否有内置 base-36 序列的数据库?其他一些原因/解释?

.Net/SQL Server 平台上是否有类似的功能(我知道 Guids)?

【问题讨论】:

  • 好吧,如果没有从亚马逊程序员那里得到答案,剩下的都是猜测。我的猜测是,他们从保留购物车行的数据库表中获取第一个下一个可用整数,他们在末尾添加 crc 校验位,并将其转换为 base-36 数字。当他们读取它时,将其转换回数字,检查 crc,获取 ID,从数据库中读取该行,仔细检查用户是否有权访问该行,然后显示它。
  • Aristos,CRC 通常需要多长时间?我的 14 位 base-36 订单项 ID 在解码时产生了 22 位 base-10(比 bigint 长)。有道理,它可能是 id 与 crc 连接,然后 base-36 编码的组合。
  • 没有“典型”的 CRC 长度,他们可以制作自己的校验和。阅读有关以下内容的一些不错的信息:ece.cmu.edu/~koopman/pubs/KoopmanCRCWebinar9May2012.pdf

标签: asp.net sql amazon identifier


【解决方案1】:

您确定它是 base-36 而不是 base-32?使用二的幂(16/32/64)有性能优势......无论如何,他们使用 Dynamo 存储该数据,因此这些可能是用作数据库记录键的哈希码。它们几乎肯定不是序列。我怀疑它们是UUIDs,因为将它们均匀地分布在集群中会很棘手。您可以在描述其架构的the paper 中阅读有关 Dynamo 的更多信息。

要在 .NET 中使用 base-32,我知道至少有 one library 可以做到这一点。 Base-32 方便、易读、URL 安全,并且比 base-16 更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多