Amazon web services 扫描大容量10gb的Amazon DynamoDB数据
下面的代码适用于我,但1个API请求需要19分钟才能返回结果。如能获得最佳结果,将不胜感激。我不想去段,因为这样我将不得不做线程管理Amazon web services 扫描大容量10gb的Amazon DynamoDB数据,amazon-web-services,amazon-dynamodb,boto3,large-data,Amazon Web Services,Amazon Dynamodb,Boto3,Large Data,下面的代码适用于我,但1个API请求需要19分钟才能返回结果。如能获得最佳结果,将不胜感激。我不想去段,因为这样我将不得不做线程管理 dynamodb=boto3.resource('dynamodb',region_name='us-west-2',endpoint_url='http://localhost:8000") table=dynamodb.table('Movies') fe=键(‘年’)。介于(1950年和1959年)之间 pe=“#年、头衔、信息评级” #表达式属性名称仅适
dynamodb=boto3.resource('dynamodb',region_name='us-west-2',endpoint_url='http://localhost:8000")
table=dynamodb.table('Movies')
fe=键(‘年’)。介于(1950年和1959年)之间
pe=“#年、头衔、信息评级”
#表达式属性名称仅适用于投影表达式。
ean={“年”:“年”}
esk=无
响应=table.scan(
FilterExpression=fe,
ProjectionExpression=pe,
表达式attributeNames=ean
)
对于响应['Items']中的i:
打印(json.dumps(i,cls=DecimalEncoder))
//只要LastEvaluatedKey处于响应状态,就意味着查询中仍有与数据相关的项
响应中的“LastEvaluatedKey”时:
响应=table.scan(
ProjectionExpression=pe,
FilterExpression=fe,
表达式attributeNames=ean,
ExclusiveStartKey=响应['LastEvaluatedKey']
)
对于响应['Items']中的i:
打印(json.dumps(i,cls=DecimalEncoder))
不幸的是,扫描本质上很慢。除了重新设计表以优化此访问模式之外,没有其他方法可以在代码级别进行优化。因为它正在搜索所有分区,所以扫描操作可能非常缓慢。您将无法像处理关系数据库时那样“调优”此查询
为了更好地帮助您,我需要更多地了解您的访问模式(按年份获取电影?)以及您的表当前的外观(分区键/排序键、其他属性等)。DynamoDb表中的键是什么?如果你的用例一般会在一年中搜索,考虑使用一年作为一种密钥。