2

我正在使用 Boto3 从 AWS Lambda 查询 AWS Aurora (MySQL) 无服务器。我想查询一个记录超过 10k 条的表。我的查询可以获取超过 7k 的记录。现在如何在数据库级别或 Lambda 级别对这些数据进行分页,以便每页获得更少的数据并将该小数据集发送到用户界面进行显示?我无法发送 7k 条记录的整个数据集。

这是我的 Python 代码

rdsDataClient.execute_statement(resourceArn=cluster_arn,
                                secretArn=secret_arn,
                                database='myTestDB',
                                sql=sqlQuery,
                                parameters = paramSet
                               )

我知道 SQL 查询 LIMIT 和 OFFSET 但想知道是否有其他更好的方法来执行此操作。请帮忙。

谢谢。

4

2 回答 2

0

我认为最好的方法是让数据库处理分页,原因如下:

  • 该查询编写起来非常简单,只需按照您的建议添加一个 LIMIT 和 OFFSET 。

  • 如果分页,数据库和服务/lambda之间传输的数据会少得多,从而节省时间和成本。

  • 在服务中存储数据所需的内存会更少,因此您不需要更强大的 lambda 来进行计算。

  • 由于上述原因,服务/ lambda 的响应性会更好。

于 2021-01-24T15:28:43.047 回答
0

是的,我使用了将限制和偏移量传递给 sqlQuery 的方法。这是我所做的

def lambda_handler(event, context):
    queryParameters = event["queryStringParameters"]
    search = getQueryStringElement("search", queryParameters, '')
    pageSize = int(getQueryStringElement("pageSize", queryParameters, 5))
    page = int(getQueryStringElement("page", queryParameters, 1))
    
    limit = pageSize
    offset = (pageSize * page) - pageSize
    
    sqlQuery = sqlQuery + ' LIMIT {} OFFSET {} ;'.format(limit, offset)

    rdsDataClient.execute_statement(resourceArn=cluster_arn,
                                secretArn=secret_arn,
                                database='myTestDB',
                                sql=sqlQuery,
                                parameters = paramSet
                               )

这个解决方案非常适合我用来在 UI 中显示分页记录列表的用例

谢谢

于 2021-01-25T07:21:51.403 回答