2013-02-21 2 views
2

У меня есть таблица сообщений с ключом диапазона CreationDate ...DynamoDB: есть ли способ получить произвольную страницу без LastEvaluatedKey?

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

Должен ли я обновить еще одну таблицу MessagePageKeys, которая просто содержит страницуKey = someTimestamp для достижения быстрого восстановления страницы?

 QueryRequest queryReq = new QueryRequest(); 

     queryReq.WithTableName(tableName); 
     queryReq.WithLimit(perPage); 

     var startIndex = startPage * perPage; 

     queryReq.WithExclusiveStartKey(new Key 
     { 
      HashKeyElement = new AttributeValue().WithN(hashKeyValue), 
      RangeKeyElement = new AttributeValue().WithN(prevKey.ToString()) 
     }); 

     // sort by newest (highest time signature) 
     queryReq.ScanIndexForward = false; 

ответ

0

Нет, это невозможно без использования «lastEvaluatedKey».

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

6 
9 
12 
15 

И вы хотите все с ключом диапазона больше, чем 10, вы можете создать exclusiveStartKey с диапазоном ключ 10, и вы получите обратно

12 
15 

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

+0

У меня уже есть система для дат, отмеченных временем unix. Но функция, включающая почтовый ящик сообщений, полезна для перехода на произвольные страницы. Поскольку my rangekey - это отметки времени, он делает непредсказуемым разбиение на страницы на произвольные ключи. – FlavorScape

+0

смешно, только сегодня, стоя в очереди за индийской едой. Я подслушал, что человек позади меня говорит, что мы не можем перейти на страницу без последнего EvaluatedKey ... и это было хорошо, чтобы не допустить, чтобы их клиенты API получали больше данных, чем необходимо однажды. – FlavorScape

+0

Это не то, что потребитель «знает» страницу результата, он просто хочет получить эту конкретную страницу результатов. Точно так же, как при поиске в Google, вы получаете список страниц, которые можно просмотреть внизу. 0 1 2 3 4 5 6 7 8 9 ... – FlavorScape

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