扫描 DynamoDB table 未返回数据
Scan DynamoDB table is not returning data
我正在尝试从没有任何索引的 dynamodb 数据库 table 中扫描失败的令牌计数。它从数据库返回 0。我怀疑它没有扫描完整的数据库。下面是我的方法和 dynamoDBClient
工作条件之一,它有连接细节。我在这里只发布扫描查询部分
public int getFailedAuthStatusCount() {
Map<String,String> expressionAttributesNames = new HashMap<>();
expressionAttributesNames.put("#status","auth_status");
Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>();
expressionAttributeValues.put(":val", new AttributeValue().withS("FAIL"));
ScanRequest scanRequest = new ScanRequest()
.withTableName("Token")
.withFilterExpression("#status = :val")
.withExpressionAttributeNames(expressionAttributesNames)
.withExpressionAttributeValues(expressionAttributeValues);
ScanResult scanResult = dynamoDBClient.scan(scanRequest); //client is working fine.
return scanResult.getCount();
}
这是回复。
{Items: [],Count: 0,ScannedCount: 1456,LastEvaluatedKey: {GUID={S: 0c4b281e6f9290c0fb3bf13f28c88fd,}, VENDOR={S: DELL,}},}
我的请求有什么问题?
您的请求没有问题。扫描时,您必须继续重新提交请求,之前的 LastEvaluatedKey
作为下一个请求的 ExclusiveStartKey
,直到您不再收到响应中的 LastEvaluatedKey
。
您的第一个请求仅评估 table 中的前 ScannedCount: 1456
项(≈ 1MB 数据)。
见https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination
Table 扫描在所有数据库环境中都是缓慢且昂贵的。这是索引很重要的一个关键原因。由于可用的低级别 API,DynamoDB 使这一点更加明显。
我正在尝试从没有任何索引的 dynamodb 数据库 table 中扫描失败的令牌计数。它从数据库返回 0。我怀疑它没有扫描完整的数据库。下面是我的方法和 dynamoDBClient
工作条件之一,它有连接细节。我在这里只发布扫描查询部分
public int getFailedAuthStatusCount() {
Map<String,String> expressionAttributesNames = new HashMap<>();
expressionAttributesNames.put("#status","auth_status");
Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>();
expressionAttributeValues.put(":val", new AttributeValue().withS("FAIL"));
ScanRequest scanRequest = new ScanRequest()
.withTableName("Token")
.withFilterExpression("#status = :val")
.withExpressionAttributeNames(expressionAttributesNames)
.withExpressionAttributeValues(expressionAttributeValues);
ScanResult scanResult = dynamoDBClient.scan(scanRequest); //client is working fine.
return scanResult.getCount();
}
这是回复。
{Items: [],Count: 0,ScannedCount: 1456,LastEvaluatedKey: {GUID={S: 0c4b281e6f9290c0fb3bf13f28c88fd,}, VENDOR={S: DELL,}},}
我的请求有什么问题?
您的请求没有问题。扫描时,您必须继续重新提交请求,之前的 LastEvaluatedKey
作为下一个请求的 ExclusiveStartKey
,直到您不再收到响应中的 LastEvaluatedKey
。
您的第一个请求仅评估 table 中的前 ScannedCount: 1456
项(≈ 1MB 数据)。
见https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination
Table 扫描在所有数据库环境中都是缓慢且昂贵的。这是索引很重要的一个关键原因。由于可用的低级别 API,DynamoDB 使这一点更加明显。