Offset tabanlı ve cursor tabanlı sayfalama (pagination) arasındaki fark nedir?

Cevap

Offset pagination

GET /posts?limit=20&offset=40
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20 OFFSET 40;

Basit ve "5. sayfaya git" gibi rastgele erişime izin verir. Sorunları:

  • Performans: OFFSET 100000 için veritabanı 100.000 satırı okuyup atar; derin sayfalar yavaşlar.
  • Tutarsızlık: kullanıcı sayfalar arasında gezerken yeni kayıt eklenirse kayıtlar kayar; aynı öğe iki kez görünür ya da atlanır.

Cursor (keyset) pagination

Son görülen kaydın sıralama anahtarı "cursor" olarak döndürülür, sonraki sayfa ondan sonrasını ister.

GET /posts?limit=20&cursor=eyJjIjoiMjAyNi0xMC0xOVQxMDowMDowMFoiLCJpZCI6OTgxfQ
SELECT * FROM posts
WHERE (created_at, id) < ('2026-10-19T10:00:00Z', 981)
ORDER BY created_at DESC, id DESC
LIMIT 20;
  • Index üzerinden doğrudan konumlanır; sayfa derinliğinden bağımsız hızlıdır.
  • Ekleme/silmede kayma olmaz.
  • Eşitlikleri çözmek için sıralamaya benzersiz bir sütun (id) eklenmelidir.
  • Cursor genelde base64 ile kodlanmış opak bir değerdir; istemci içeriğine güvenmemelidir.
OffsetCursor
Belirli sayfaya atlamaVarYok
Derin sayfa performansıKötüİyi
Eşzamanlı yazmada tutarlılıkZayıfGüçlü
Uygun yerAdmin tabloları, küçük veriSonsuz kaydırma, feed, büyük veri, public API

Yanıtta next_cursor (veya has_more) döndürülür; null ise son sayfadır.

  1. HTTP 401 ile 403 durum kodları arasındaki fark nedir?KolayAPI TasarımıBackend
  2. JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?OrtaAPI TasarımıBackend
  3. Idempotency nedir? Hangi HTTP metotları idempotent'tir?OrtaAPI TasarımıBackend
  4. OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?ZorAPI TasarımıBackend
  5. Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.ZorAPI TasarımıBackend
  6. gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?OrtaAPI TasarımıBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle