Я пытаюсь понять, является ли Оптимистическая блокировка DynamoDB правильной вещью для моего варианта использования, или я должен делать что-то еще.Правильный способ использования Оптимистической блокировки DynamoDB
Я пытаюсь сделать следующее в своем методе Java.
function updateItem(String key) {
Item item = mapper.load(Item.class, key);
if (some condition) {
item.setValue(item.getValue() + 1);
mapper.save(item);
}
}
Я хочу обновить один и тот же элемент на основе некоторого состояния. Я создал атрибут версии, так что оптимистическая блокировка работает, и когда у меня появляется несколько запросов, только один запрос получает и обновляет данные.
Я пытаюсь понять следующее:
Что происходит, когда другой поток пытается обновить значение, но и номер версии изменился, я не мог найти какой-либо документации о том, что исключение будет бросили?
Должен ли я использовать синхронизированную функцию для этого? Принимая во внимание несколько запросов? Но для меня это похоже на то, что он побеждает цель оптимистической блокировки, так как мне все равно, какой запрос получает доступ в первую очередь.
Есть ли альтернативное решение этой проблемы?
Я через следующую документацию: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html
Hi Mark. Спасибо за это. Не могли бы вы сослаться на источник для исключения? Я проверил Javadoc здесь goo.gl/ZRAzOQ, но ничего не нашел. Эта страница http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#APIError упоминает что-то об этом, но ей не хватает деталей. – abeer
Как я могу гарантировать, что сбой произошел из-за измененной версии, а не какого-то другого условия? Вызывает ли 'ConditionalCheckFailedException' какой тип отказа? Или есть другие способы узнать это? – Nawaz