BatchWriteItem
- пакетный API - это означает, что он позволяет указать несколько различных операций, которые должны быть отправлены в Dynamo для выполнения в том же запросе. Поэтому, когда вы отправляете BatchItemRequest, вы просите DynamoDB выполнить несколько запросов PutItem или DeleteItem для вас.
Утверждение, что отдельные запросы PutItem
и DeleteItem
являются атомарными, означает, что каждый из них является атомарным по отношению к другим запросам, которые могут захотеть изменить один и тот же элемент (идентифицированный его ключами раздела/сортировки) - это означает, что это невозможно для искажения данных внутри элемента, поскольку два запроса PutItem выполняются одновременно с изменением некоторой части элемента и, таким образом, оставляя его в непоследовательном состоянии.
Но тогда утверждение состоит в том, что весь запрос BatchWriteItem не является атомарным. Это означает, что последовательность запросов PutItem и/или DeleteItem не будет изолирована, поэтому у вас могут быть другие запросы PutItem или DeleteItem - независимо от того, выполняются ли один или несколько сеансов одновременно с запросом BatchWriteItem, который может повлиять на состояние таблицу (-ы) между отдельными запросами PutItem/DeleteItem, которые составляют партию.
Чтобы иллюстрировать точку, скажем, у вас есть BatchItemRequest, который состоит из следующих 2-х вызовов:
- PutItem (PartitionKey = 1000, имя = 'Альфа', значение = 100)
- DeleteItem (PartitionKey = 1000)
И что примерно в то же время, как вы отправите этот запрос есть еще один запрос, который имеет следующую операцию в нем:
- DeleteItem (PartitionKey = 1000)
Вполне возможно, что запрос второго удаления элемента может удалить элемент до первого запроса выполняется, и поэтому в то время как PutItem успешно, DeleteItem в первом запросе провалится с не найден, потому что элемент был удален другим запросом на удаление. Это один из примеров того, как пакетная операция целая не является атомной.
Спасибо, но это означает, что атомный эквивалент синхронизации? – Cenxui
@Cenxui 'atomic' обычно относится к тому, что нельзя подразделить на более мелкие части. В контексте информатики операция называется атомарной, если (* по крайней мере, внешняя по отношению к операции *) ее нельзя разбить на более мелкие части и нет наблюдаемого промежуточного состояния. Синхронизация - это нечто другое, и его можно использовать для операций атома, но «атомный» - это не то же самое, что «синхронизация». –
Это точно ответ, и спасибо. – Cenxui