Syntax | سینتکس
3.02K subscribers
408 photos
108 videos
35 files
376 links
Download Telegram
صفحه بندی داده داده‌ها: Limit/Offset و Cursor-Based

وقتی صحبت از نمایش حجم زیادی از داده‌ها در صفحات مختلف میشه، استفاده از pagination ضروری میشه. دو روش رایج برای این کار وجود داره که هر کدوم سادگی‌ها و چالش‌های خاص خودشون رو دارن:

صفحه بندی با Limit و Offset سادگی ولی ...

صفحه بندی با Limit و Offset رو میشه ساده‌ترین و اولین روشی دونست که به ذهن میرسه. شما به دیتابیس میگید "فقط Limit تا رکورد بهم بده" و "از Offset مشخصی شروع کن".

سادگی:
پیاده‌سازی خیلی آسونی داره.
برای صفحات اول که تعداد رکوردها کمه، عملکرد خوبی داره.

چالش‌ها:
عملکرد ضعیف در صفحات بالا: با افزایش Offset، دیتابیس مجبور میشه تعداد زیادی از رکوردها رو اسکن کنه و بعد اونا رو دور بندازه که باعث کندی شدید میشه.
مشکل تغییر داده‌ها: اگه در حین حرکت بین صفحات، داده‌ای اضافه یا حذف بشه، ممکنه رکوردهای تکراری ببینید یا بعضی از رکوردها رو از دست بدید.
مرتب‌سازی (Sorting): معمولاً نیازمند مرتب‌سازی روی یک فیلد ثابت هستید تا نتیجه قابل پیش‌بینی باشه.

مثال ساده (SQL):

برای گرفتن ۱۰ رکورد اول از جدول products (صفحه ۱):

SELECT *
FROM products
ORDER BY id
LIMIT 10 OFFSET 0;


برای گرفتن ۱۰ رکورد بعدی (صفحه ۲):

SELECT *
FROM products
ORDER BY id
LIMIT 10 OFFSET 10;


صفحه بندی با روش Cursor-Based Pagination: راه حلی برای مقیاس‌پذیری

صفحه بندی با Cursor-based pagination با استفاده از یک "نشانگر" (cursor) که معمولاً یک فیلد یکتا و مرتب‌سازی شده (مثل تاریخ ایجاد یا ID) هست، صفحه بعدی رو مشخص میکنه. به جای گفتن "صفحه N رو بیار"، میگیم "رکوردها رو از بعد از این نقطه مشخص بیار".

محدودیت‌ها و نکته‌ها:
پیچیدگی پیاده‌سازی: نسبت به Limit/Offset کمی پیچیده‌تره و نیازمند طراحی دقیق‌تر کوئری‌هاست.
مرتب‌سازی: باید همیشه بر اساس فیلد Cursor مرتب‌سازی انجام بشه. این یعنی نمیتونید هر جور دلتون خواست داده‌ها رو مرتب کنید.
پرش به صفحات دلخواه: معمولاً قابلیت "پرش به صفحه 5" رو نداره و فقط میتونید به صفحه بعدی یا قبلی برید (Next/Previous). مناسب برای فیدها و لیست‌های طولانی: برای سیستم‌هایی مثل فید شبکه‌های اجتماعی که فقط به اسکرول کردن ادامه دار نیاز دارن و پرش به صفحه خاصی مطرح نیست، عالی عمل میکنه.

مثال ساده (SQL):

فرض کنید آخرین id محصولی که در صفحه قبلی دیده‌اید 1234 بوده:

SELECT *
FROM products
WHERE id > 1234
ORDER BY id
LIMIT 10;

#pagination #sql

@Syntax_fa
👍92😁1