我是AWS工作区的新手,截至目前我们正在使用 DynamoDB
为每个作业执行提供日常基础日志,然后每天我们从前一天发布到dynamoDB的所有数据生成摘要报告 .
我在生成摘要报告时从dynamoDB获取数据时遇到问题 . 为了获取数据,我正在使用 Java Client inside my scala class
. 问题是我无法从dynamoDB中检索任何过滤条件的所有数据 . 但是在检查DynamoDB UI时,我可以看到更多的记录 .
..使用下面的代码..
val client: AmazonDynamoDB = AmazonDynamoDBClientBuilder.standard.build
//Function that returns filter expression and ExpressionAttribute
val (filterExpression, expressionAttributeValues) = getDynamoDBQuery(inputArgs)
val scanRequest: ScanRequest = new ScanRequest()
.withTableName("table_name")
.withFilterExpression(filterExpression)
.withExpressionAttributeValues(expressionAttributeValues)
client.scan(scanRequest)
经过大量分析后,看起来DynamoDB需要一段时间来获取任何过滤条件的所有数据(当我们扫描数据集时) . 当从DynamoDB检索所有记录时,Java客户端不会等待 . 有没有解决方法呢?请帮忙 .
谢谢
3 回答
DynamoDB以分页方式返回结果 . 对于给定的
ScanRequest
,ScanResult
包含getLastEvaluatedKey,应该通过下一个ScanRequest
的setExclusiveStartKey来获取下一页 . 你应该遍历这个,直到ScanResult
中的getLastEvaluatedKey
为空 .顺便说一句,我同意之前的回答,即DynamoDB可能不是从成本角度存储此类数据的理想选择,但您可以更好地判断所做出的选择!
Dynamodb不适用于您正在使用的目的 . 存储不仅成本更高,而且查询数据也会更昂贵 .
DynamoDb用于事务密钥值存储 .
您可以将它存储在Firehose,S3中并使用Athena进行查询 . 这样更便宜,可扩展且适合分析使用 .
关于您的问题,当您请求时,DynamoDB不会返回所有记录 . 它将返回一组记录并将给出lastevaluatedkey .
有关DynamoDB Scan的更多文档 .
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html
希望能帮助到你 .
感谢@Vikdor的帮助..我按照你的建议做了同样的工作,并且完美无缺 . 以下是代码..