【问题标题】:Is there any way that backend does not have to request database for data multiple times in Node JS?有什么方法可以让后端不必在 Node JS 中多次请求数据库获取数据?
【发布时间】: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


【解决方案1】:

当然有可能,你说的可能是分页。

【讨论】:

    【解决方案2】:

    使用像redis这样的缓存框架。稍微调整一下你的场景,因为缓存成本很高。redis 很容易设置和运行。

    【讨论】:

    • 感谢您的回答,我会调查的。
    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2021-05-04
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多