Как мне разбить мой запрос 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, как вы предложили.
Данные, передаваемые между базой данных и службой/лямбдой, будут намного меньше, если их разбить на страницы, что сэкономит время и деньги.
Памяти, необходимой для хранения данных в службе, будет меньше, поэтому вам не понадобится более мощная лямбда для выполнения вычислений.
Отзывчивость сервиса/лямбда будет лучше в результате вышеизложенного.