在MongoDB中哪个更好:多个索引或多个集合

时间:2014-12-10 20:38:34

标签: javascript node.js mongodb mongoose

我正在开发一个使用第三方服务(Facebook,Google等)对用户进行身份验证的应用程序。我给每个用户一个与他们的第三方ID相关联的内部id(uuid v4)。现在,我的(猫鼬)用户文档模型看起来像这样:

var user = new mongoose.Schema({
    uuid: {type: String, required: true, unique: true, index: true, alias: 'userId'},
    fbid: {type: String, required: false, index: true, alias: 'facebookId'},
    gid: {type: String, required: false, index: true, alias: 'googleId'}
});

因为我可以查询任何ID,所以我需要所有ID的索引。我认为这可能会成为大量用户的问题(或者如果我添加更多第三方登录(Twitter,LinkedIn等)。现在,我的问题是这是否是正确的方法,或者如果有更好的解决方案。

我有一个想法是拥有多个集合,每个ID类型一个。像这样:

var user = new mongoose.Schema({
    uuid: {type: String, required: true, unique: true, index: true, alias: 'userId'},
});

var facebookUser = new mongoose.Schema({
    fbid: {type: String, required: false, index: true, alias: 'facebookId'},
    userId: {type: Schema.Types.ObjectId, ref: 'user'}
});

这样做的好处是不会弄乱用户模型和更容易分片,但是它意味着更多的查询来检索用户,甚至更多的是创建新用户(1.如果用户存在则检查facebookUser集合,如果不存在,则创建一个新用户,保存它,然后创建一个新的facebookUser,其中包含指向该新用户的链接,然后保存该用户。

哪种方式“更好”(缩放好,处理负载等)?

0 个答案:

没有答案