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

arc*_*rty 6 mongodb

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

我可能正在考虑的具体问题包括如果将来需要转移用户.

Gat*_* VP 10

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

我见过的一些:

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

我可能正在考虑的具体问题包括如果将来需要转移用户.

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