Запрос к GSI сразу после получения события DynamoDB streams — надежно ли это?

#amazon-dynamodb

#amazon-dynamodb

Вопрос:

Из приведенной ниже цитаты я с трудом понимаю, происходит ли распространение транзакции на глобальные вторичные индексы (GSI), потоки и резервные копии параллельно или последовательно.

После завершения транзакции изменения, внесенные в рамках этой транзакции, распространяются на глобальные вторичные индексы (GSI), потоки и резервные копии.

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html

Отсюда мой вопрос: возникает ли событие потока dynamodb только после того, как все GSI перестроены (реплицированы), или такое утверждение является ложным? Другими словами, могу ли я быть уверен, что смогу найти проекцию для элемента в некотором GSI, если я запрашиваю GSI с соответствующими ключами сразу после получения события stream для его INSERT

Чтобы дать некоторый контекст — я работаю над концепцией процедуры, которая может охватывать несколько лямбд, и каждая лямбда выполняет только одну транзакцию. Перед запуском процедуры я точно знаю, сколько транзакций я должен ожидать, и я подсчитываю их с помощью динамических потоков и атомарных счетчиков, таким образом, я могу определить, когда процедура завершена (редактировать Пожалуйста, не перенаправляйте меня на использование пошаговых функций, я знаю их большой потенциал, но мой стеквзорвется :))

Однако, если приведенная выше цитата из AWS не гарантирует репликацию GSI до выдачи события dynamo stream, я немного запутался, потому что я не могу немедленно запустить другие процедуры, которые полагаются на вставленные данные, но хотят запросить их через GSI…

Спасибо!

редактировать: после полезных обсуждений и еще нескольких поисков я нашел эту статью aws, которая дает мне дополнительное понимание, в частности Best practices for working with DynamoDB Streams раздел

Ответ №1:

Потоковые события и репликация GSI происходят одновременно. Нет гарантии, что одно произойдет раньше другого. При правильно настроенных GSI, которые не испытывают никакого обратного давления со стороны горячих разделов, репликация произойдет менее чем за 10 мс. Обработка событий потока обычно происходит менее чем за 1 секунду. При хорошо спроектированной модели данных весьма вероятно, что репликация GSI завершится до обработки события Stream, но нет никакой гарантии, что это будет так.

Комментарии:

1. Спасибо, Рик! Я пишу решение с низким уровнем кода, чтобы разработчики могли экспериментировать, а затем оптимизировать свою модель. Он включает служебную шину / сопоставление с образцом / для вызова атомарных / идемпотентных / транзакционных лямбд, но по своей сути касается динамических моделей. Я был вдохновлен вашими презентациями, и я надеюсь, что когда-нибудь вы сможете взглянуть на решения, которые я принял. Monorepo с открытым исходным кодом, но все еще немного хаотичен без надлежащих документов. это пакет для dynamodb из monorepo

2. Тогда, я думаю, имея в виду это параллельное распространение на streams / GSI, я должен убедиться, что «процедуры», запускаемые после некоторых других процедур, достаточно хорошо отложены во времени, возможно, путем отправки отложенных событий в SQS процессора lambda

Ответ №2:

Да, это возможно. GSI и потоки записываются параллельно, но также и асинхронно. Время варьируется, но обычно оно составляет от десятков до сотен миллисекунд для обоих. В качестве цели проектирования распространение должно происходить в течение 1 секунды, но есть отклонения.