Сканирование таблицы DynamoDB не возвращает данные

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

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


person Kiran    schedule 05.12.2018    source источник
comment
См. Этот ответ ... stackoverflow.com/questions/16789516/   -  person Sagan    schedule 18.06.2019


Ответы (1)


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

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

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

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

person Michael - sqlbot    schedule 06.12.2018