Как я могу пролистать элементы в таблице DynamoDB? - PullRequest
0 голосов
/ 13 февраля 2020

Как прокрутить элементы в таблице DynamoDB?

То есть, если у меня есть таблица, содержащая [A,B,C], как я могу эффективно получить элемент A с моим первым вызовом, элемент B с моим вторым вызов, элемент C с моим третьим вызовом и пункт A снова с моим четвертым вызовом, повторите?

В будущем эта таблица может быть расширена до D, E, F et c, и я хотел бы включить новые элементы в цикле.

Текущий способ, которым я делаю это, дает каждому элементу атрибут «видно». Мы сканируем всю таблицу, находим элемент, который не «виден», и возвращаем его как «видимый». Когда все «увидено», сделайте все элементы «невидимыми» снова. Это очень дорого.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Я думаю, что самый простой вариант:

  1. использовать сканирование с Limit=1 и не поставлять ExclusiveStartKey, это даст первый элемент
  2. , если элемент был возвращается и LastEvaluatedKey присутствует в ответе, затем повторно запустите сканирование с ExclusiveStartKey, установленным на LastEvaluatedKey предыдущего ответа и снова Limit=1, повторяйте шаг 2, пока элемент не будет возвращен или LastEvaluatedKey отсутствует
  3. когда вы вернули ноль предметов, вы добрались до конца стола, переходите к шагу 1

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

0 голосов
/ 13 февраля 2020

Эффективный способ вернуть элементы, которые не были видны, - это включить атрибут visible = no при включении. Тогда у вас может быть глобальный вторичный индекс для этого атрибута, который вы можете затем использовать Query ().

Не существует эффективного способа вернуть все атрибуты seen = yes обратно в no. Scan () и Query () в конечном итоге вернут всю таблицу, и вы в итоге обновите записи по одной. Это не будет быстро и дешево с большим столом.

РЕДАКТИРОВАТЬ
Как только все записи имеют seen="yes", и вы хотите сбросить их обратно на seen="no" Запрос на GSI, предложенный выше, будет работать точно так же, как сканирование .. . Каждая запись должна быть прочитана, а затем обновлена.

Если у вас есть 1M записей, каждая около 1 КБ, и вы хотите сбросить их ... вам понадобится
250 КБ чтения (поскольку вы можете прочитать 4 записи с помощью одного 4KB RCU)
1M пишет

...