Есть ли в DynamoDB механизм блокировки строки для чтения? - PullRequest
0 голосов
/ 08 мая 2020

Есть ли в Amazon DynamoDB механизм блокировки строки для чтения? Что-то похожее на то, что описано для PostgresQL на https://www.2ndquadrant.com/en/blog/what-is-select-skip-locked-for-in-postgresql-9-5/

Я не смог найти никакой документации, поэтому хотел подтвердить.

EDIT : Я хочу заблокировать строку, чтобы при "чтении" эта строка не отображалась, пока она заблокирована. После снятия блокировки он снова доступен для чтения.

EDIT2 : Цель состоит в том, чтобы имитировать очередь для распределенной обработки. Разным клиентам нужно извлекать элемент из стола для обработки. См. Ссылку выше, чтобы получить представление о том, как это достигается в PostgresQL.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

DynamoDB не поддерживает это.

RDMBS связывают блокировки строк с транзакцией и связывают транзакции с одним клиентским подключением к базе данных (и автоматически снимают эти блокировки, если соединение, удерживающее их, исчезает), но DynamoDB без установления соединения - все между вашим кодом и базой данных происходит посредством серии некоррелированных HTTPS-запросов. (И, конечно же, DynamoDB также не является СУБД.) или явный пропуск строк) и не имеет ни одной из возможностей, которые следовали бы из этого.

Ближайшее - что, по общему признанию, не очень близко - будет использовать согласованные чтения и условные записи (которые позволяют обновлять атрибут только если он уже соответствует ожидаемому состоянию) для проверки, установки и очистки определенного пользователем атрибута блокировки, который отмечает состояние каждой записи и, возможно, оставляет след того, как запись оказалась в этом состоянии (заполненная, например, что-то вроде «запись заблокирована на отметке времени w потоком x из pid y на хосте z», полезно при выяснении того, что происходит, если записи застревают в заблокированном состоянии).

0 голосов
/ 08 мая 2020

Изучили ли вы варианты согласованности чтения? From https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html:

Строго согласованное чтение

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

  • Строго согласованное чтение может быть недоступно, если есть задержка в сети или сбой. В этом случае DynamoDB может вернуть ошибку сервера (HTTP 500).
  • Строго согласованные чтения могут иметь большую задержку, чем в конечном итоге согласованные чтения.
  • Строго согласованные чтения не поддерживаются глобальными вторичными индексами.
  • Строго согласованные чтения используют больше пропускной способности, чем в конечном итоге согласованные чтения. Дополнительные сведения см. В разделе Режим емкости чтения / записи

Примечание

DynamoDB использует в конечном итоге согласованные чтения, если вы не укажете иное. Операции чтения (такие как GetItem, Query и Scan) предоставляют параметр ConsistentRead. Если вы установите для этого параметра значение true, DynamoDB будет использовать строго согласованные чтения во время операции.

Это примерно самое близкое значение, которое вы получите с DynamoDb.

...