Интеграционное тестирование клиента DynamoDB, использующего непоследовательное чтение?

Ситуация:

  1. Веб-служба с API для чтения записей из DynamoDB. Он использует в конечном итоге согласованные чтения (режим GetItem по умолчанию)
  2. An integration test consisting of two steps:
    • create test data in DynamoDB
    • вызовите службу, чтобы убедиться, что она возвращает ожидаемый результат

Я беспокоюсь, что этот тест будет ненадежным из-за возможной согласованности данных.

Если я попытаюсь проверить данные сразу после записи с помощью GetItem withConsistenRead=true, это только гарантирует, что данные были записаны в большинство копий БД, но не во все, поэтому тестируемый сервис все еще имеет шанс читать из необновленной копии на следующем шаге.

Есть ли способ убедиться, что данные были записаны во все копии DynamoDB, прежде чем продолжить?


person alexandroid    schedule 10.02.2017    source источник


Ответы (1)


Обычно данные достигают всех географически распределенных реплик за секунду.

Мое предложение состоит в том, чтобы подождать (т.е. в терминах Java спать в течение нескольких секунд) в течение нескольких секунд, прежде чем вызов веб-службы должен дать желаемый результат.

После вставки данных в таблицу DynamoDB подождите несколько секунд, прежде чем вызывать веб-службу.

В конечном счете согласованное чтение (по умолчанию) — параметр конечной согласованности максимизирует пропускную способность чтения. Однако в конечном итоге согласованное чтение может не отражать результаты недавно завершенной записи. Согласованность всех копий данных обычно достигается в течение секунды. Повторение чтения через короткое время должно вернуть обновленные данные.

person notionquest    schedule 10.02.2017