我应该使用存储在cookie中的信息进行索引吗?

时间:2017-06-24 19:09:10

标签: mongodb cookies mongoose query-performance json-web-token

我正在创建我的第一个主要应用,我想到了一种优化查询性能的方法。我不确定我是否应该接受它。

以下是我的方法的说明。

每次创建用户帐户时,都会为该用户分配1到10之间的随机数,该数字存储在其用户文档中。该号码称为号码ID。以下是用户架构的外观:

let User = new Schema({

/// I left out all the other fields for clairty sake
numberId: {
          type: Number,
          default: Math.floor(Math.random() * 11),
          index: true
    }
}

每次用户创建博客帖子和帖子时,他们的号码ID都会在该博文的文档中引用并发布。这是通过索引用户number-id来使查询更快。以下是Blogo文档在MongoD中的样子:

{ 
   "title": "my Blog Post",
   "_id": "ObjectId("594824b2828d7b15ecd7b6a5")",
   /// Here is the numberId of the user who posted the blogpost, it is added 
   /// to the document of the blogpost when it is created.
   "postersNumberId": 2
   /// the Id of the user who posted the blogpost
   "postersId": "59481f901f0c7d249cf6b050"
}

让我们说我想获得特定用户制作的所有博客帖子。我可以通过使用相关用户的number-Id作为索引来更快地优化我的查询,因为他们的编号ID在他们制作的所有博客帖子和评论帖子中被引用。

 BlogPost.find({postersId: user_id, postersNumberId: user.numberId});

似乎这种方法保证我将用户number-id存储在req.user中,以便在我需要优化查询时随时可用。这意味着我必须通过护照将用户数据存储在cookie中:

passport.serializeUser(function(user, done){
    done(null, user._id);
});

passport.deserializeUser(function(id, done) {
    User.findById(id, function (err, user){
        if (err || !user) return done(err, null);
        done(null, user);
    });
});

鉴于这种方法,我现在可以使用存储在cookie中的所有信息,特别是numberId,来优化检索用户所做的评论和博客帖子的查询:

BlogPost.find({postersId: req.user_id, postersNumberId: req.user.numberId});

但是,我使用json-web-tokens来验证用户而不是cookie。因此除了使用JWT进行身份验证之外,我还必须使用cookie来存储number-Id以进行索引。但是,我听说有cookie会影响可伸缩性,所以我担心在req.user中存储用户number-Id最终会影响性能。

我应该继续采用这种方法吗?性能影响是什么?

1 个答案:

答案 0 :(得分:0)

除了身份验证JWT还有一个payload,它可用于在生成的令牌中存储其他信息:

var jwt = require('jsonwebtoken');

var token = jwt.sign({
    data: {
        numberId: 7
    }
}, 'jwtSecret', {
    expiresIn: '1h'
});

用于检索:

jwt.verify(token, 'jwtSecret', function(err, decoded) {
    if (err) {
        console.log(err)
    } else {
        console.log(decoded);
        //{ data: { numberId: 7 }, iat: 1498350787, exp: 1498354387 }
    }
});