Сканирование таблицы DynamoDB не возвращает данные - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь отсканировать ошибочные значения токенов из таблицы базы данных DynamodB без каких-либо индексов.Возвращает 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,}},}

что не так с моим запросом?

1 Ответ

0 голосов
/ 06 декабря 2018

С вашим запросом все в порядке.При сканировании вы должны продолжить повторную отправку запроса с предшествующим LastEvaluatedKey в качестве следующего запроса ExclusiveStartKey, пока вы не перестанете получать LastEvaluatedKey в ответе.

Ваш первый запрос оценивает только первыйScannedCount: 1456 элементов в таблице (≈ 1 МБ данных).

См. https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination

Сканирование таблиц выполняется медленно и дорого во всех средах баз данных.Это основная причина, почему индексы важны.DynamoDB делает это более очевидным из-за доступного низкоуровневого API.

...