2012-03-20 2 views
2

В настоящее время метод запроса ItemCollection # в Ruby AWS SDK возвращает весь набор данных. Я просмотрел исходный код Ruby AWS SDK для любой возможности разбивки на страницы, но опция, ближайшая к разбивке на страницы, - :limit, без разбивки на страницы. Согласно DynamoDB API Амазонки (HTTP-, не Ruby) документация для работы Query предлагает Могло быть пагинацией с ответом ключа LastEvaluatedKey:Разбиение страницы с помощью ItemsCollection # query?

Первичного ключ элемента, когда операция запроса остановлена, включая предыдущий результат задавать. Используйте это значение, чтобы начать новую операцию, исключая это значение в новом запросе. LastEvaluatedKey имеет значение NULL, когда весь набор результатов запроса завершен (т. Е. Операция обработана «последней страницей»).

Так что я могу сделать, пейджинг, добавив опцию :limit, а затем делает следующий запрос для значения диапазона после моего последнего Item, но я понятия не имею, что общее количество есть, если я не делаю полный запрос.

Есть ли лучший/лучший способ достижения разбивки на страницы?

ответ

1

В зависимости от ваших потребностей, создание полного пейджера, скорее всего, потребуется два запроса, см Query and Scan in Amazon DynamoDB, в частности Count and ScannedCount:

The Amazon DynamoDB сканирование и запросы API, использует значения Count для двух различных целей.

В запросе, установите параметр Count истинно, если вы хотите Amazon DynamoDB в обеспечить общее количество элементов, которые соответствуют фильтру или запрос состояния сканирования , вместо списка совпадающих элементов.

В ответ Amazon DynamoDB возвращает значение Count для числа соответствующих элементов в запросе. Если подходящие элементы для фильтра сканирования или условие запроса превышают 1 МБ, счетчик содержит частичный счет всего элементов, соответствующих запросу. Чтобы получить полный счет элементов, соответствующих запросу, используйте LastEvaluatedKey в следующем запросе . Повторите запрос до тех пор, пока Amazon DynamoDB больше не вернет LastEvaluatedKey.

[курсив мой]

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

Удачи вам!

+1

Я боялся, что это так. Поскольку я использую Ruby SDK, есть ли у вас представление о том, может ли метод #query достичь этого? Я попытался добавить параметр 'count: true', но он все равно возвращает' Enumerator'. –

+0

@ JohnK.Chow: Раздражает действительно - я не использую Ruby много за пределами тем DevOps, поэтому не пробовал это сам; API docs для [ItemCollection] (http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/DynamoDB/ItemCollection.html) на самом деле не перечисляют параметр 'count' для' # query', а скорее только выделенный метод # count, предположительно подсчитывающий элементы в коллекции с помощью таблицы scan_, которая поражает меня как нечетную, учитывая стоимость/производительность характеристики [Scan] (http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html) - может быть ошибка в документе? –

+0

API запросов может подсчитывать только записи с одним и тем же значением ключа хэша, это то, что вы хотите? Единственный способ подсчета «всех записей» - это сканирование. –

Смежные вопросы