9

看到这个值是唯一的并且对 mongo 数据库中的所有用户都存在,在 Web 应用程序中使用它作为用户标识符有什么特别的警告吗?

我可能正在考虑的特定问题包括将来是否需要转移用户。

4

1 回答 1

10

...在 Web 应用程序中使用它作为用户标识符有什么特别的注意事项吗?

我见过的几个:

  1. 这对 URL 来说不是很好。Twitter 给了我一个像http://twitter.com/gatesvp这样的 URL ,使用 ObjectId 你会得到一个像http://example.com/ab12ab12ab12ab12ab12ab12这样的 URL 。
  2. ObjectId 分片非常差。它不是真正随机的,它有点顺序,所以新用户将聚集在分片上而不是随机分布。
  3. 您经常需要另一个唯一标识符。大多数网站都要求唯一的电子邮件或唯一的用户名。是的,您可以在“用户名”上创建一个唯一索引,但是您有两个唯一索引,一个很有用,一个只是一个随机数。
  4. 您将在任何地方引用它。您的用户数据通常会分布在多个集合中,所有集合都带有指向“userId”的指针。拥有 ObjectIds(或 Guids)意味着您不断地将这些大 ID 复制粘贴到任何地方并将它们存储在数据库中。

我可能正在考虑的特定问题包括将来是否需要转移用户。

转移到哪里?一旦您开始在 MongoDB 中存储用户的数据,ID 将是您转移到另一个数据库的最少问题。所有现代数据库都可以处理某种形式的字符串或二进制作为主键 ID,因此您的传输应该可以正常工作。但大部分复杂性与 ID 无关。

于 2012-07-28T02:59:35.380 回答