在mongo数据库中使用用户名作为“主要/唯一键”是否有益处?

问题描述:

User1 { 
    _id: "my_user1", 
    name: "john smith", 
    email: "[email protected], 
    friends: [ 
    "my_user2", 
    "my_user3", 
    "my_user4", 
    ] 
} 

这将是例子。我的网站布局是blah.com/user/。通过仅使用用户名作为数据库的唯一密钥,似乎事情会变得更加容易。这是否会造成减速或者这是错误的?在mongo数据库中使用用户名作为“主要/唯一键”是否有益处?

一般来说,你看人家使用固定的ID而不是用户名的一对夫妇的原因:

  • 通常情况下,用户名可以改变(比如,从“鲍勃”到“罗伯特”改变我的用户名)
  • ID,特别是数字ID通常可以更有效地存储和索引
+0

我应该使用内置objectid吗? – carboncomputed 2013-02-10 18:10:08

+0

Mongo让你自由地做* * *。也许我错了,但我不知道至少在早期之间很难在一种或另一种形式之间进行转换。这两种形式的关键都有其优势,但如果这一点阻止你开始开发模型,那么我会说掷硬币或者选择第一个选择,但是准备好应对后果。 – JayC 2013-02-10 18:32:09

在用户名不经常更改的前提下,使用用户名作为密钥有其好处。

当您查看用户的个人资料时,您当然希望看到他们的朋友列表。当您将朋友存储为可读名称时,您可以显示此列表而无需额外的数据库查询。但是,当您将它们存储为ID时,需要使用附加查询查找每个朋友的姓名,这可能需要一段时间。

+0

人们会认为朋友列表会为他的朋友自动生成ID(因为这是自动ID的点...他们不会改变,如果用户杀死一个旧帐户并获得一个新帐户,一个新的ID)。 – JayC 2013-02-10 17:55:46

+0

与此同时,使用用户名当然也有其好处。这只是对旧的自然键/自动键参数的重新评估。 – JayC 2013-02-10 17:57:10

+0

@JayC,但这个说法不适用于MongoDB,就像它适用于关系数据库一样。由于MongoDB中的连接非常昂贵,因此您应该尝试将所有相关数据存储在一个集合中,而不是将其分散在多个集合中。 – Philipp 2013-02-10 18:05:49