Mongodb 将mongo ObjectId用作用户是一种不好的做法吗';谁的身份证?

Mongodb 将mongo ObjectId用作用户是一种不好的做法吗';谁的身份证?,mongodb,Mongodb,鉴于此值是唯一的,并且对于mongo数据库中的所有用户都存在,在web应用程序中使用此值作为用户标识符是否有任何特别的注意事项 我可能会考虑的具体问题包括将来是否需要转移用户 。。。在web应用程序中使用它作为用户标识符有什么特别的注意事项吗 我见过一些: 这对于URL来说不是很好。Twitter给了我一个类似的URL,用ObjectId你会得到一个类似的URL ObjectId碎片非常糟糕。这并不是随机的,而是有点顺序的,所以新用户会聚集在碎片上,而不是随机分布 您通常需要另一个唯一标识符。大

鉴于此值是唯一的,并且对于mongo数据库中的所有用户都存在,在web应用程序中使用此值作为用户标识符是否有任何特别的注意事项

我可能会考虑的具体问题包括将来是否需要转移用户

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

我见过一些:

  • 这对于URL来说不是很好。Twitter给了我一个类似的URL,用ObjectId你会得到一个类似的URL
  • ObjectId碎片非常糟糕。这并不是随机的,而是有点顺序的,所以新用户会聚集在碎片上,而不是随机分布
  • 您通常需要另一个唯一标识符。大多数网站都要求有唯一的电子邮件或唯一的用户名。是的,你可以在“用户名”上创建一个唯一的索引,但是你有两个唯一的索引,一个是有用的,另一个只是一个随机数
  • 您将在任何地方引用此。用户的数据通常分布在多个集合中,所有集合都带有指向“userId”的指针。拥有objectid(或guid)意味着您不断地复制粘贴这些大id并将它们存储在数据库中
  • 我可能会考虑的具体问题包括将来是否需要转移用户


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

    我也计划提供用户名和电子邮件(因此短链接是可能的),但我的意思是,在我的应用程序逻辑内部,ObjectID是否合适,或者我是否应该生成另一个数字ID?分片是否必须按ID排序?以及在传输方面,我的意思是导出数据并导入到另一个mongodb实例。(不切换到sql或任何东西)。我知道_id大部分时间是在insert上分配的,所以它们会保留旧的还是所有引用都需要更新?@arcyqwerty:正如GatesVP所提到的,默认ObjectID对于唯一性来说是很好的,但不会产生任何影响。然而。。您不必在
    \u id
    字段中输入。ObjectID通常比递增的数字ID更容易使用。。因为任何类型的字段都需要您计算出下一个要分配的字段。@arcyqwerty:还需要注意,您选择的
    \u id
    字段都将是一个(即,永远不能更改)。在GatesVP的建议3中,你可以考虑使用用户名作为子ID。只要这不需要改变。如果您正在查看相关文档,则用户名的副作用将是比ObjectID/GUID更具可读性的引用。尺寸差异可能不是问题。。objectid将是12个二进制字节;一个平均用户名只能稍微少一点。