Mongodb:对象id作为集合中的短主键

时间:2011-04-25 14:59:36

标签: mongodb nosql

如何更好地利用MongoDB生成的objectId。我不是专家用户,但到目前为止我最终为我的对象(userid,postid)等创建了单独的id,因为对象id太长并且如果用作主ID则使url变得丑陋。我保持_id完整,因为它有助于索引等。我想知道任何更好的策略,以便可以使用mongo objectId作为更友好和易记的密钥。我读到密钥是日期等的组合,因此任何部分都可以在集合中用于此目的。

感谢,
BSR /

2 个答案:

答案 0 :(得分:3)

如果您拥有现有ID(来自现有数据集),那么用你拥有的那个覆盖_id就完全可以了。< / p>

  

...保持_id原封不动,因为它有助于索引等

MongoDB默认为_id字段编制索引。如果你开始在_id字段中输入整数,它们将被编入其他所有内容的索引。

因此大多数RDBM都提供“自动增量”ID。这对于小型数据集很有用,但在可伸缩性方面确实很差。如果您尝试一次向20台服务器插入数据,那么如何保持“自动增量”不变?

正常的答案是你没有。相反,您最终会使用GUID等内容来处理这些ID。对于MongoDB,已经提供了ObjectId

  

我想知道任何更好的策略,以便可以使用mongo objectId作为更友好且易记的密钥

所以这里的问题是“容易记住”ID并不真正与“高度可扩展的数据库”相匹配。当你有十亿个文件时,这些ID并不是“容易记住”。

所以你必须在这里做出权衡。如果你有一个可以变大的表,我建议使用ObjectId。如果你有一个相对较小且不经常更新的表(如“查找”表),那么你可以构建自己的自动增量。

选择权取决于你。

答案 1 :(得分:0)

您可以自己覆盖_id 。没有义务使用自动生成的对象ID。根据您自己的需要在您的应用内覆盖_id有什么问题?