【发布时间】:2020-07-06 09:47:25
【问题描述】:
例如。
我在数据库中有 20000 份餐食
第一个请求来自前端:我只需要显示 10 顿饭,
所以我向后端发送了一个请求,从数据库中获取 1000 份餐食, 然后从这 1000 餐中,我只显示前 10 餐(餐 1、餐 2、...、餐 10)。
然后页面滚动,直到需要显示更多餐点
第二个请求来了:
现在当前端向后端询问 11-20 餐时, 后端不应为此请求访问数据库, 它应该显示后端在第一次请求中从数据库中获取的 1000 餐中的这些数据
只是想知道这是否可能......
感谢您的宝贵时间...
Meal.aggregate([{
$skip: (req.query.page - 1) * 10,
},{$lookup: {
from: 'restaurants',
localField: 'restaurantID',
foreignField: '_id',
as: 'restaurant'
}
}, {
$replaceRoot: {newRoot: {$mergeObjects: [{$arrayElemAt: ["$restaurant", 0]}, "$$ROOT"]}}
}, {
$addFields: {
returnObject: {
$or: [
{$regexMatch: {input: '$mealName', regex: search}},
{$regexMatch: {input: '$name', regex: search}}
]
}
}
}, {
$match: {'returnObject': {$ne: false}, 'nutrient': {$ne: {}}, mealPrice: {$lt: req.query.upperPrice, $gt: req.query.lowerPrice}}
}, {
$project: { mealName: 1, name: 1, nutrient: 1, mealPrice: 1}
}, {
$limit: 5000
}]);
这是我用来从数据库中获取数据的查询,
收到数据后,我需要执行一些计算,这些计算会因用户而异。
然后我将对计算的数据应用分页。
所以问题是,当第二个请求到来时,我当前的系统会进行所有计算,然后显示接下来的 10 个数据。
所以我需要以某种方式保存我在第一个请求到达时所做的那些计算。
【问题讨论】:
-
听起来您需要一个服务器端缓存,因此您可以将 1000 个放入缓存中,然后根据需要从缓存中一次获取 10 个。
-
Node JS 中是否有缓存库可以帮助我解决这个问题?
-
您要缓存的项目是否公开供所有用户查看(意味着您可以为所有用户使用单个缓存)?您能否展示查询或客户端请求的外观以及记录的外观,以便我们了解如何为缓存建立索引?
-
我必须在前端显示的列表将因用户而异。
标签: node.js database mongodb performance optimization