【发布时间】: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