2016-08-02 3 views
1

Я знаю, что чтение AWS Dynamo DB в конечном итоге и сильно консистенция. И я прочитал документ, в котором говорится, что The individual PutItem and DeleteItem operations specified in BatchWriteItem are atomic; however BatchWriteItem as a whole is not. Но я до сих пор не понимаю, как синхронизируется поведение метода записи.Что такое консистенция записи DB Dynamo DB?

Если это неудобный вопрос, сообщите мне.

ответ

2

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 в первом запросе провалится с не найден, потому что элемент был удален другим запросом на удаление. Это один из примеров того, как пакетная операция целая не является атомной.

+0

Спасибо, но это означает, что атомный эквивалент синхронизации? – Cenxui

+0

@Cenxui 'atomic' обычно относится к тому, что нельзя подразделить на более мелкие части. В контексте информатики операция называется атомарной, если (* по крайней мере, внешняя по отношению к операции *) ее нельзя разбить на более мелкие части и нет наблюдаемого промежуточного состояния. Синхронизация - это нечто другое, и его можно использовать для операций атома, но «атомный» - это не то же самое, что «синхронизация». –

+0

Это точно ответ, и спасибо. – Cenxui

Смежные вопросы