我是否应该将存储在 cookie 中的信息用于索引目的?
Should I use information stored in a cookie for indexing purposes?
我正在创建我的第一个主要应用程序,我想到了一种优化查询性能的方法。我不确定我是否应该完成它。
这是我的方法的描述。
每次创建用户帐户时,都会为该用户分配一个 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
}
}
每次用户创建博客post 和post,他们的编号-Id 都会在该博客的文档中被引用post 和post。这是为了通过索引用户 number-id 来加快查询速度。下面是博客文档post 在 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"
}
假设我想获取特定用户创建的所有博客post。我可以通过使用相关用户的 number-Id 作为索引更快地优化我的查询,因为他们的 number-Id 在他们所做的所有博客 posts 和评论 posts 中被引用.
BlogPost.find({postersId: user_id, postersNumberId: user.numberId});
似乎这种方法保证我将用户编号存储在 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,来优化检索用户发表的评论和博客post的查询:
BlogPost.find({postersId: req.user_id, postersNumberId: req.user.numberId});
但是,我使用 json-web-tokens 来验证用户而不是 cookie。因此,除了使用 JWT 进行身份验证之外,我还必须使用 cookie 来存储 number-Id 以用于索引目的。但是,我听说拥有 cookie 不利于可伸缩性,因此我担心将用户编号-Id 存储在 req.user 中最终会影响性能。
我应该继续这种方法吗?性能影响是什么?
除了身份验证 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 }
}
});
我正在创建我的第一个主要应用程序,我想到了一种优化查询性能的方法。我不确定我是否应该完成它。
这是我的方法的描述。
每次创建用户帐户时,都会为该用户分配一个 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
}
}
每次用户创建博客post 和post,他们的编号-Id 都会在该博客的文档中被引用post 和post。这是为了通过索引用户 number-id 来加快查询速度。下面是博客文档post 在 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"
}
假设我想获取特定用户创建的所有博客post。我可以通过使用相关用户的 number-Id 作为索引更快地优化我的查询,因为他们的 number-Id 在他们所做的所有博客 posts 和评论 posts 中被引用.
BlogPost.find({postersId: user_id, postersNumberId: user.numberId});
似乎这种方法保证我将用户编号存储在 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,来优化检索用户发表的评论和博客post的查询:
BlogPost.find({postersId: req.user_id, postersNumberId: req.user.numberId});
但是,我使用 json-web-tokens 来验证用户而不是 cookie。因此,除了使用 JWT 进行身份验证之外,我还必须使用 cookie 来存储 number-Id 以用于索引目的。但是,我听说拥有 cookie 不利于可伸缩性,因此我担心将用户编号-Id 存储在 req.user 中最终会影响性能。
我应该继续这种方法吗?性能影响是什么?
除了身份验证 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 }
}
});