Как мне разбить мой запрос mysql на страницы с помощью AWS rds-data, используя boto3 и AWS-aurora?

Я запрашиваю AWS Aurora (MySQL) без сервера из AWS Lambda с помощью Boto3. Я хочу запросить таблицу, содержащую более 10 тысяч записей. Мой запрос может получать записи более 7k. Теперь, как я могу разбить эти данные на страницы на уровне базы данных или уровне лямбда, чтобы я мог получать меньше данных на страницу и отправлять этот небольшой набор данных в пользовательский интерфейс для отображения? Я не могу отправить весь набор данных из 7к записей.

Вот мой код Python

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

Мне известны SQL-запросы LIMIT и OFFSET, но я хочу знать, есть ли другой лучший способ сделать это. Пожалуйста помоги.

Спасибо.

2 ответа

Да, я использовал подход передачи лимита и смещения в 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
                               )

Это решение отлично сработало для моего варианта использования, когда я показывал список записей с разбивкой на страницы в пользовательском интерфейсе.

Спасибо

Я считаю, что лучший способ - позволить базе данных обрабатывать разбиение на страницы по нескольким причинам:

  • Запрос довольно прост в написании, просто добавьте LIMIT и OFFSET, как вы предложили.

  • Данные, передаваемые между базой данных и службой/лямбдой, будут намного меньше, если их разбить на страницы, что сэкономит время и деньги.

  • Памяти, необходимой для хранения данных в службе, будет меньше, поэтому вам не понадобится более мощная лямбда для выполнения вычислений.

  • Отзывчивость сервиса/лямбда будет лучше в результате вышеизложенного.

Другие вопросы по тегам