Как получить максимальное значение ключа диапазона в DynamoDB, когда ключ диапазона - это номер версии? - PullRequest
0 голосов
/ 17 июня 2020

Я создал одну службу X , где запросы на учет с некоторыми данными поступают от многих других служб Y . Я создаю один idempotent_id из этих данных, добавляя множество атрибутов, чтобы этот idempotent_id оставался уникальным. Я также создаю одну idempotent_version и устанавливаю для нее значение 1. Я сохраняю эту запись в DynamoDB (, используя idempotent_id и idempotent_version как ключ раздела и ключ сортировки ). теперь я вызываю другую службу Z с этим idempotent_id и idempotent_version. Через некоторое время, предположим, что приходит запрос с теми же данными, я создаю idempotent_id, но он будет таким же, как и раньше, поскольку мы обрабатываем ту же запись. теперь мне нужно создать idempotent_version, который в этом случае будет 2, потому что такой же запрос поступил раньше ( это может быть n, если запрос n-1 уже пришел ). как я могу найти, что будет idempotent_version для текущей записи данных, потому что я буду хранить данные в DynamoDB с этой версией, а также вызывать службу Z с этой версией. ( что будет 2 для текущего сценария )

1 Ответ

1 голос
/ 17 июня 2020

В документах есть раздел Использование ключей сортировки для контроля версий .

Обычно, когда вы создаете v1, также создавайте как копию v1 как v0. Версия 0 всегда будет самой последней. Один дополнительный атрибут v0 называется «Последний» и будет начинаться с 1.

Итак, когда пришло время для v2 ...

GetItem(hash:v0)
PutItem(hash:v2)
Copy v2 to v0, update "Latest" to 2
UpdateItem(hash:v0)

С новой поддержкой транзакций вы можете гарантировать что Путь v2 и обновление v0 согласованы.

...