DynamoDB'de Sayfalama
DynamoDB asla "tüm" sonuçları tek bir çağrıda döndürmez. Bir Query veya Scan,
en fazla 1 MB veri döndürür, ardından devam etmeniz için size bir
LastEvaluatedKey verir. Sayfalamayı doğru yapmak, bir sayaç üzerinde değil, bu
anahtar üzerinde döngü kurmak demektir.
Döngü
let key;
do {
const out = await client.send(new QueryCommand({...params, ExclusiveStartKey: key}));
process(out.Items);
key = out.LastEvaluatedKey;
} while (key);LastEvaluatedKey undefined olduğunda, sona ulaşmışsınızdır. Sonraki dilimi
getirmek için onu ExclusiveStartKey olarak geri verin.
Kontrol akışı, yalnızca bir anahtar bulunmadığında çıkan tek bir döngüdür:
Her geçiş ya döndürülen anahtardan devam eder ya da durur — sayaç yoktur.
Limit bir sayfa boyutu değildir
Limit, DynamoDB'nin kaç item değerlendirdiğini sınırlar, bir
FilterExpression'dan sonra kaç tanesini döndürdüğünü değil. Bir filtrenin
arkasındaki bir Limit: 25 sorgusu 3 item döndürebilir ve yine de size bir
LastEvaluatedKey verebilir — bir sayfa kısa görünse bile, anahtar boşalana kadar
sayfalamaya devam etmelisiniz. Boş olmayan bir LastEvaluatedKey de asla daha
fazla eşleşen item vaat etmez; yalnızca bulunmayan bir anahtar, sona
ulaştığınızı kanıtlar.
SDK'nın sayfalamasına izin verin
Her iki SDK da yukarıdaki döngüyü sarar, böylece sayfalar arasında doğrudan yineleyebilirsiniz:
// AWS SDK for JavaScript v3
import {paginateQuery} from '@aws-sdk/lib-dynamodb';
for await (const page of paginateQuery({client}, params)) {
process(page.Items);
}# boto3
paginator = client.get_paginator('query')
for page in paginator.paginate(**params):
process(page['Items'])Sayfa numarası yok
DynamoDB'de toplam sayım ve rastgele sayfa erişimi yoktur — cursor'ları
yeniden oynatmadan "sayfa 7"ye atlayamaz veya geriye doğru sayfalandıramazsınız.
Arayüzleri numaralı sayfalar yerine sonsuz kaydırma / "daha fazla yükle" etrafında
tasarlayın. (Bir Select: 'COUNT' sorgusu, onları saymak için yine de eşleşen her
item'ı okur — ve faturalandırır.)
API'ler için durumsuz cursor'lar
LastEvaluatedKey, son item'ın yalnızca anahtar attribute'larıdır. Onu Base64
kodlayıp istemcilere opak bir nextToken olarak verin; bir sonraki istekte onu
tekrar ExclusiveStartKey'e çözün. Sunucu tarafında cursor durumu yok.
Bu token DynamoDB-JSON'dur — birini DynamoDB-JSON dönüştürücüsü ile gözden geçirin veya elle oluşturun. Ve bir Scan'i atlatmak için sayfalama yapıyorsanız, bu genellikle bunun yerine bir index ekleme sinyalidir.
Sorgu sonuçları arasında, cursor sizin için izlenerek görsel olarak sayfalamak için DynoTable'ı deneyin.