Это как я использую метод getUnprocessedKeys () DynamoDBMapper.BatchGetItemException, чтобы получить список необработанных ключей? - PullRequest
1 голос
/ 18 января 2020

Скажем, у меня есть следующий POJO с необходимыми методами и материалами для успешной загрузки и сохранения элементов в таблицу DDB:

@DynamoDBTable(tableName = "my_ddb_table")
public class MyDDBTableItem {

    @DynamoDBHashKey(attributeName="id") 
    private String id;    // primary key
    private String a_value;
    private Set<String> some_values;
}

Я использую DynamoDBMapper.batchload (), поэтому мне нужно принять меры если исключение выдается. Я никогда раньше не работал с DDB, поэтому я не уверен, что означают некоторые из их терминов (например, для getKeys () : «Значения атрибутов первичного ключа, которые определяют элементы и атрибуты, связанные с элементами. «).

В настоящее время я хочу получить некоторую коллекцию (list, set, et c.) Необработанных первичных ключей. Это правильный способ сделать это (я не знаю, как я это проверю)?

try {
    dynamoDBMapper.batchload(itemsToGet)...
} catch (BatchGetItemException e) {
    // I could get them as strings or as the instances of the class MyDDBTableItem, but I'll use String here.
    List<String> unprocessedKeys = e.getUnprocessedKeys()
        .get("my_ddb_table")
        .getKeys()    // after this is where I am unclear.
        .stream()
        .map(map -> map.get("id").getS())
        .collect(Collectors.toList());
    ...
}

1 Ответ

1 голос
/ 18 января 2020

Поскольку вы используете маппер DynamoDB более высокого уровня, вам не нужно перехватывать это исключение. Вы можете указать, как обрабатываются необработанные ключи, используя класс стратегии, реализующий DynamoDBMapperConfig.BatchLoadRetryStrategy. По умолчанию клиент DynamoDB будет использовать DefaultBatchLoadRetryStrategy.

// TODO: implement the strategy interface
BatchLoadRetryStrategy myCustomStrategy = ...;

dynamoDBMapper.batchLoad(itemsToGet, new DynamoDBMapperConfig.Builder().
     withBatchLoadRetryStrategy(myCustomStrategy))

. Класс KeysAndAttributes используется для создания списка элементов (путем указания их первичных ключей) и атрибутов. (какие столбцы выбрать) из таблицы DynamoDB. Вы можете создать экземпляр этого класса следующим образом:

KeysAndAttributes kna = new KeysAndAttributes().withKeys(keysToLoad);

По сути, вы можете вызывать getUnprocessedKeys() вручную, только если вы работаете с API нижнего уровня для загрузки элементов в пакетах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...