让我们举一个博客文章,其中从帖子的标题:sample_blog_post生成一个独特的slug。不要将mongo ObjectId存储为_id,而是将slug存储在_id中。除了明显的情况,如果标题发生变化,slug可能会发生变化,那么使用字符串而不是数字_id在性能方面是否存在主要缺点?例如,如果帖子的数量变得非常大,比如超过一百万,那么这可能会成为问题。但是,如果帖子的数量相对较低,比如2000,它会有很大的不同吗?到目前为止,我认为我将利用的唯一关于ObjectId的是免费提供的created_on日期。
总而言之,将slug存储为_id并且不使用ObjectId是否值得?似乎有关于如何将备用值存储为_id的讨论,而不是它的性能优势/劣势。
答案 0 :(得分:3)
总而言之,将slug存储为
_id
并且不使用ObjectId
是否值得?
在我看来,没有。对于大多数情况(除了分页),性能差异可以忽略不计,但
_id
密钥可以帮助您避免一些麻烦,最重要的是避免通过skip
和take
进行昂贵的分页(使用$lt
/ {{1而在$gt
代替)。_id
。在我的代码中,我有一个例外,我使用特殊的哈希作为id,因为值不能改变,集合具有极高的写入速率而且很大。基本上,你最终会得到像
这样的架构_id