使用mongo ObjectId作为用户的id是不好的做法吗?

时间:2012-07-28 02:00:29

标签: mongodb

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

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

1 个答案:

答案 0 :(得分:9)

  

...使用它作为Web应用程序中的用户标识符有什么特别的警告吗?

我见过的一些:

  1. 对于网址来说并不好。 Twitter为我提供了一个类似http://twitter.com/gatesvp的网址,通过ObjectId可以获得类似http://example.com/ab12ab12ab12ab12ab12ab12的网址。
  2. ObjectId分片非常糟糕。它并不是随机的,它有点顺序,因此新用户将在分片上聚类而不是随机分发。
  3. 您经常需要另一个唯一标识符。大多数网站都要求提供唯一的电子邮件或唯一的用户名。是的,你可以在“用户名”上创建一个唯一的索引,但是你有两个独特的索引,一个是有用的,另一个只是一个随机数。
  4. 你将在任何地方引用它。您的用户数据通常会分布在多个集合中,并且都指向“userId”。拥有ObjectIds(或Guids)意味着您不断地将这些大型ID复制粘贴并存储在数据库中。
  5.   

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

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