Как получить общее количество страниц в DynamoDB, если мы установили лимит? - PullRequest
1 голос
/ 04 июля 2019

У меня есть список документов, которые хранятся в DynamoDB .В БД хранится более 10000 документов.Я установил ограничение на 100 при запросе. DynamoDB делает хорошую работу, возвращая мне первые 100 документы и LastEvaluatedKey для получения следующих 100 документов.

проблема здесь в том, что я также хочу, чтобы DynamoDB возвращал мне общее количество страниц для нумерации страниц.В этом случае, так как у меня есть 10000 документов, он должен вернуть 100 (число нумерации страниц)

На данный момент я подсчитал вручнуюзацикливание запросов, пока оно не вернет мне LastEvaluatedKey.Сложите, сколько циклов было сделано, чтобы получить общую страницу.Но я верю, что есть лучший подход.

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Как правильно объяснил другой ответ, не существует эффективного способа получить общее количество результатов для запросов или операций сканирования DynamoDB.Таким образом, не существует эффективного способа получить общее количество страниц.

Однако я хотел бы отметить, что современные пользовательские интерфейсы отходят от классической нумерации страниц к шаблону бесконечной прокрутки.Где «следующая страница» результатов загружается по требованию при прокрутке списка.Это может быть достигнуто с DynamoDB.Вы по-прежнему можете показывать отдельные страницы, но не можете показать, априори, сколько результатов или сколько страниц. Это текущий недостаток DynamoDB.

1 голос
/ 04 июля 2019

Ни операции "Scan" (для чтения всей таблицы), ни "Query" (для чтения всех элементов с одним и тем же ключом раздела) не возвращают оценку общего количества результатов.В некоторых случаях (например, когда предоставляется FilterExpression), у DynamoDB нет эффективного способа сделать эту оценку.В других случаях у DynamoDB может быть способ предоставить эту информацию, но это не так.

Если я вас правильно понимаю, вы хотите Scan всей таблицы без фильтра.Как я уже сказал, Scan само по себе не дает вам количество элементов в таблице.Но вы можете найти это число, используя DescribeTable, который возвращает, помимо прочего, атрибут "ItemCount", который является оценкой общего количества элементов в таблице, которая может быть не совсем актуальнойно, возможно, этого достаточно для ваших нужд (если вам нужна оценка для какого-то отчета о проделанной работе, он не должен быть точным на 100%).

Если вам действительно нужен точный и актуальный-Момент подсчета элементов в разделе или во всей таблице, вы всегда можете попытаться сохранить такие счетчики как отдельные данные.Правильное выполнение этого не тривиально и может повлиять на производительность, но в некоторых случаях использования (например, редкие записи и много чтений) может быть полезно.

...