首页 > 解决方案 > 如何使用nodejs在lambda函数中进行dynamodb分页

问题描述

我希望前端在 event.queryStringParameters 中决定 currentPage、pageSize(一页中的数据数)和排序(+ 表示升序/- 表示降序)。

Dynamodb 属性
-id(string)(partition key)
-createdAt(date)
-url(string)
-createdBy(string)
-title(string)

但是我创建这个函数很麻烦,我只能设置pageSize,我不知道如何处理currentPage和我的函数中的排序。

下面是我当前的 lambda 函数。
getBanner.js

'use strict'
const AWS = require('aws-sdk');

exports.handler = async function (event, context, callback) {
    const documentClient = new AWS.DynamoDB.DocumentClient();

    let responseBody = "";
    let statusCode = 0;

    const queryParams = JSON.stringify(event.queryStringParameters);

    /* queryParams will look like this
     {
       "currentPage": "0",
       "pageSize": "30",
       "sorting": "-status"
     }
    */

    const params = {
        TableName : "Banner",
        Limit:queryParams.pageSize
    };

    try{
        const data = await documentClient.scan(params).promise();
        responseBody = JSON.stringify(data.Items);
        statusCode = 200
    }catch(err){
        responseBody = `Unable to get Alerts: ${err}`;
        statusCode = 403
    }

    const response = {
        statusCode: statusCode,
        headers:{
            "Content-Type": "application/json",
            'Access-Control-Allow-Origin': '*', // Required for CORS support to work
        },
        body: responseBody
    }

    return response
}

标签: amazon-web-servicesamazon-dynamodb

解决方案


分页在 DynamoDB 中不起作用(链接到文档)。这是另一个示例,说明 SQL 数据库实践知识可能会阻碍您对 DynamoDB 的理解。

DynamoDB 对scanquery操作的响应限制为 1MB。任何比这更大的东西都会被分页。这意味着 DynamoDB 将根据响应的大小而不是响应中的项目数对结果进行分页。此限制可确保您的响应保持较小且易于管理,同时您的查询保持高性能。

一次获取 1MB 的数据与一次获取N行不同,这在 SQL 数据库中的分页中很常见。在实现前端解决方案之前,花点时间阅读一下 DDB 如何使用LastEvaluatedKey和处理分页。ExclusiveStartKey


推荐阅读