Сканирование DynamoDb при обновлении некоторых элементов - PullRequest
0 голосов
/ 27 февраля 2020

Когда я запускаю операцию сканирования на DynamoDb, я могу использовать LastEvaluatedKey, который возвращается как часть ответа, чтобы сканировать следующие доступные элементы. И я могу повторять этот процесс до тех пор, пока он больше не вернет LastEvaluatedKey, и это будет означать, что больше нет элементов для сканирования.

Мой вопрос: если во время этой операции сканирования некоторые элементы, которые были извлечены из процесса сканирования обновлены (положить), я должен ожидать, что эти элементы появятся снова?

1 Ответ

1 голос
/ 27 февраля 2020

Нет - если вы уже получили элемент, вы не получите его снова в той же операции Scan, даже если он был изменен. Более того, если ваша модификация добавляет новый элемент, этот новый элемент может или не может быть возвращен текущим сканированием - вы не знаете.

Чтобы понять, почему это так, вам нужно понять, как на самом деле работает Scan:

Хотя DynamoDB не гарантирует какой-либо порядок сортировки между ключами раздела, в их внутренней реализации есть некоторый порядок для этих ключей раздела (основанный на ха sh функция клавиши - вот почему эти ключи также известны в документации к DynamoDB как га sh клавиши ). A Scan перебирает ключи раздела в этом порядке ha sh и не go назад. Если проверка прошла какую-то позицию в значениях ha sh, она не пройдет ее снова, и, в частности, тот же элемент с тем же ключом разделения не будет получен снова, а новые элементы будут или не будут получены в зависимости от от того, находится ли ключ раздела нового элемента до или после текущей позиции сканирования.

Если вам действительно нужно получать все новые модификации, как они происходят, вам следует рассмотреть возможность использования функции «Поток» в DynamoDB вместо - или в дополнение к - Scan. Функция Stream в DynamoDB позволяет вам читать все изменения в базе данных по мере их возникновения. Некоторые приложения объединяют как Scan для чтения существующих элементов, так и поток для чтения элементов, измененных после запуска сканирования.

...