Сканирование больших 10 ГБ данных Amazon DynamoDB - PullRequest
0 голосов
/ 07 августа 2020

Следующий код работает у меня, но для возврата результата из 1 запроса API требуется 19 минут. Приветствуется оптимизированный результат. Я не хотел бы go для сегментов, потому что тогда мне придется управлять потоками.

dynamodb = boto3.resource('dynamodb', region_name='us-west-2', endpoint_url="http://localhost:8000")

table = dynamodb.Table('Movies')

fe = Key('year').between(1950, 1959)
pe = "#yr, title, info.rating"
# Expression Attribute Names for Projection Expression only.
ean = { "#yr": "year", }
esk = None


response = table.scan(
    FilterExpression=fe,
    ProjectionExpression=pe,
    ExpressionAttributeNames=ean
    )

for i in response['Items']:
    print(json.dumps(i, cls=DecimalEncoder))

// As long as LastEvaluatedKey is in response it means there are still items from the query related to the data
while 'LastEvaluatedKey' in response:
    response = table.scan(
        ProjectionExpression=pe,
        FilterExpression=fe,
        ExpressionAttributeNames= ean,
        ExclusiveStartKey=response['LastEvaluatedKey']
        )

    for i in response['Items']:
        print(json.dumps(i, cls=DecimalEncoder))

Ответы [ 2 ]

1 голос
/ 08 августа 2020

Поскольку поиск выполняется по всем разделам, операция scan может быть очень медленной. Вы не сможете "настроить" этот запрос, как если бы вы работали с реляционной базой данных. ?) и как выглядит ваша таблица в настоящее время (каковы ваши ключи разделов / ключи сортировки, другие атрибуты и т. д. c).

0 голосов
/ 07 августа 2020

К сожалению, scan медленный по своей природе. Невозможно оптимизировать на уровне кода, кроме изменения дизайна таблицы для оптимизации для этого шаблона доступа.

...