首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么一些著名的网站使用字母数字字符串作为资源ID而不是数字?

为什么一些著名的网站使用字母数字字符串作为资源ID而不是数字?
EN

Software Engineering用户
提问于 2015-11-03 18:28:00
回答 3查看 2.7K关注 0票数 3

例如,YouTube使用的视频ID不是简单的数字,而是区分大小写的字母数字字符串(如dQw4w9WgXcQ)。为什么某些网站,如YouTube和Dailymotion使用字母数字字符串来处理这些ID,而不是使用普通数字?

一个显而易见的答案可能是,结果的is会更短(例如,将它们编码在Base-64而不是Base-10中),但我发现有趣的是其他网站(如Vimeo )没有使用这种技术。

还有什么好的理由吗?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2015-11-03 21:09:20

首先,请参阅帽定理。它类似于一句古老的格言:“快,好,便宜:挑2”。

在理论计算机科学中,CAP定理,也称为Brewer定理,指出分布式计算机系统不可能同时提供以下三种保证:

  • 一致性(所有节点同时查看相同的数据)
  • 可用性(保证每个请求都收到关于其成功或失败的答复)
  • 分区容限(系统继续运行,尽管由于网络故障而造成任意分区)

整数

保持序列化的数字需要一致性..。一个是数字守护者的地方。在大型系统中,这可以成为一个瓶颈,一个单一的故障点,或者两者兼而有之。在分布式系统中,通常会开始放松这种约束(一致性),以利于其他两种系统。

在分布式系统(如HI-LO算法或其派生程序)中,有维护序列化数字标识的策略,但在节点故障时仍然可以跳过大量数字。

UUID

另一种常见的方法是使用UUID,这是一个随机生成的标识符(是Int64大小的两倍),它与任何其他生成的UUID相比具有很高(但不是100%)的惟一性。基本上是一个很大的随机数。这对于客户端操作来说很好,因为客户机可以很好地生成它,并且有很好的唯一性,并随后使用它来识别或跟踪事物。但是冲突(生成相同的ID )是可能的(特别是如果客户端有一个可怕的RNG),并且仍然必须处理。

我怀疑youtube的识别者是uuid的一些较短的变体,然后被转换成没有标点符号的base64变体。因为标点符号扼杀了链接中使用的能力。因此,它是一个非常大的数字(随机的或序列化的)已经转换为文本,以使它更短。

字符串

一个相当流行的标识符格式是“实体-#”或“系统-实体-#”,如果您有许多跨操作系统的话。#是由拥有的系统(仍然是分布在多个系统、微服务或其他方面)一致生成的,或者具有HI-LO变体。为了显示的目的,去掉前缀并只使用数字部分是非常简单的。

选择

以上显然不是一个完整的列表,最后它们都是磁盘上的二进制数字。使用其中一种或另一种的原因是对您的系统最有利的架构权衡。UUID对于分布式系统来说是最方便的体系结构属性,但是对于人为因素(用户可以记住并键入102875,而不是B9FE6378-E76C-40D5-883B-72FE376952A4,我刚刚制作的UUID)。

如果所识别的内容有任何不明确之处,那么UUID或数字都不是特别有用的,但是字符串是很好的。至少,序列化的数字可以给你一个比例的概念,这可以暗示什么是被引用的。

当然,我提到了字符串标识符的安全性问题,因为它可以让潜在攻击者深入了解您的系统。

我甚至见过一篇博客文章回避数字标识符,因为当用户获得低编号资源(例如帐户#5)时,它给人的印象是.我并不认为这是有价值的。毕竟,如果用户信心是一个有效的商业关注点,您可以始终以6位数开始您的数字序列。编辑:趋势分析可能是一个增加ID的安全问题。

票数 7
EN

Software Engineering用户

发布于 2015-11-03 20:46:43

还有什么好的理由吗?

好的。可能有很多很好的理由,尽管它们可能不是激发YouTube、DailyMotion等的原因:

  • 基础资源没有用数字键标识。
  • 非数字标识符使偶然发现变得更加困难。也就是说,您不能通过递增键随意浏览到另一个资源。
  • 字母数字字符串可以表示多个简单的键。谁知道里面有什么?
票数 7
EN

Software Engineering用户

发布于 2018-09-20 18:25:07

我一直认为理由是双重的和相当简单的:

  • 它很短,需要时可以手动输入
  • 使用大写/小写加数字和破折号意味着它们永远不会用完标识符。

Siebel在他们的CRM系统中使用了类似的方法。

这个堆栈溢出回答对这个主题进行了很好的讨论。

基本上每个youtube ID都是一个64位的数字。我很怀疑他们会用光这些东西。64比特足以让地球上的每一个人上传20亿个视频。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/301620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档