🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

কিভাবে একটি REST API-এ পৃষ্ঠা সংখ্যা প্রয়োগ করবেন: সম্পূর্ণ 2026 গাইড

⏱️2 min read  ·  317 words

পৃষ্ঠা সংখ্যা যে কোনো API-এর জন্য অপরিহার্য যা তালিকা প্রদান করে — এটি ছাড়া, লক্ষ লক্ষ সারি ফেরত দেওয়া একটি প্রশ্ন আপনার সার্ভারকে ক্র্যাশ করে এবং ক্লায়েন্টদের অভিভূত করে। কিন্তু খুব ভিন্ন পারফরম্যান্স বৈশিষ্ট্য সহ বেশ কয়েকটি পেজিনেশন কৌশল রয়েছে। এই গাইডটি সেগুলিকে কভার করে এবং কখন প্রতিটি ব্যবহার করতে হবে।

📋 Table of Contents

  1. পৃষ্ঠা সংখ্যা কেন গুরুত্বপূর্ণ
  2. সুবিধা:
  3. অফসেটের পরিবর্তে, পরবর্তী পৃষ্ঠাটি আনতে একটি "কারসর" (সাধারণত শেষ আইটেমের আইডি বা টাইমস্ট্যাম্প) ব্যবহার করুন। এটি লক্ষ লক্ষ সারিতে স্কেল করে কারণ ডাটাবেস সরাসরি অবস্থানে যায়:
  4. কীসেট পেজিনেশন অভিন্ন টাইমস্ট্যাম্প সহ সারিগুলি পরিচালনা করতে একটি যৌগিক কার্সার (যেমন create_at + id) ব্যবহার করে। এটি সবচেয়ে শক্তিশালী উচ্চ-পারফরম্যান্স পদ্ধতি, বিশাল ডেটাসেট পরিবেশনকারী API দ্বারা ব্যবহৃত।
  5. কৌশল
  6. আপনার সাজানোর কলাম সূচী করুন:
  7. পৃষ্ঠা সংখ্যার প্রশ্নগুলির জন্য ORDER BY কলামে একটি সূচী প্রয়োজন, অথবা সেগুলি ধীর
  8. উত্তর: ছোট ডেটাসেট এবং প্রশাসক UIগুলির জন্য অফসেট যার পৃষ্ঠা নম্বর এবং নির্দিষ্ট পৃষ্ঠাগুলিতে ঝাঁপ দেওয়া প্রয়োজন৷ ফিড, অসীম স্ক্রোল এবং বড় ডেটাসেটের জন্য কার্সার যেখানে কর্মক্ষমতা এবং স্থিতিশীলতা গুরুত্বপূর্ণ। কার্সার স্কেল অনেক ভাল কিন্তু নির্বিচারে পৃষ্ঠাগুলিতে যেতে পারে না।
  9. ছোট ডেটাসেট এবং প্রশাসক UI-এর জন্য অফসেট/সীমা পৃষ্ঠা নম্বর, ফিড এবং বড় ডেটাসেটের জন্য কার্সার পেজিনেশন এবং ব্যাপক উচ্চ-পারফরম্যান্সের প্রয়োজনের জন্য কীসেট পৃষ্ঠা সংখ্যা

পৃষ্ঠা সংখ্যা কেন গুরুত্বপূর্ণ

  • কর্মক্ষমতা: সমস্ত সারি প্রত্যাবর্তন ধীর এবং স্মৃতি-নিবিড়
  • ব্যান্ডউইথ: ক্লায়েন্টদের একবারে হাজার হাজার রেকর্ডের প্রয়োজন নেই
  • ডাটাবেস লোড: আবদ্ধ প্রশ্নগুলি আপনার ডাটাবেসকে রক্ষা করে
  • ব্যবহারকারীর অভিজ্ঞতা: পৃষ্ঠাগুলিতে ডেটা লোড করা দ্রুত এবং পরিষ্কার || কৌশল 1: অফসেট/সীমা পৃষ্ঠা সংখ্যা (সহজ)

সুবিধা:

-- The classic approach: OFFSET and LIMIT
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 20 OFFSET 40;   -- page 3 (skip 40, take 20)
// Express endpoint
app.get('/products', async (req, res) => {
  const page  = parseInt(req.query.page)  || 1;
  const limit = parseInt(req.query.limit) || 20;
  const offset = (page - 1) * limit;

  const products = await db.query(
    'SELECT * FROM products ORDER BY created_at DESC LIMIT $1 OFFSET $2',
    [limit, offset]
  );
  const total = await db.query('SELECT COUNT(*) FROM products');

  res.json({
    data: products.rows,
    pagination: {
      page,
      limit,
      total: total.rows[0].count,
      totalPages: Math.ceil(total.rows[0].count / limit),
    }
  });
});

সহজ, যে কোনো পৃষ্ঠায় লাফানো সমর্থন করে, মোট সংখ্যা দেখায়।কনস:
বড় অফসেটগুলিতে ধীর (ডাটাবেস এখনও সমস্ত এড়িয়ে যাওয়া সারিগুলি স্ক্যান করে), এবং অনুরোধগুলির মধ্যে ডেটা পরিবর্তন হলে ফলাফলগুলি স্থানান্তরিত হতে পারে।কৌশল 2: কার্সার পেজিনেশন (স্কেলযোগ্য)

অফসেটের পরিবর্তে, পরবর্তী পৃষ্ঠাটি আনতে একটি “কারসর” (সাধারণত শেষ আইটেমের আইডি বা টাইমস্ট্যাম্প) ব্যবহার করুন। এটি লক্ষ লক্ষ সারিতে স্কেল করে কারণ ডাটাবেস সরাসরি অবস্থানে যায়:

সুবিধা:

-- Fetch items AFTER a cursor (much faster than large OFFSET)
SELECT * FROM products
WHERE created_at < $1   -- cursor = last item's created_at
ORDER BY created_at DESC
LIMIT 20;
app.get('/products', async (req, res) => {
  const limit  = parseInt(req.query.limit) || 20;
  const cursor = req.query.cursor;   // the last item's timestamp/id

  let query, params;
  if (cursor) {
    query = 'SELECT * FROM products WHERE created_at < $1 ORDER BY created_at DESC LIMIT $2';
    params = [cursor, limit + 1];   // fetch one extra to check for more
  } else {
    query = 'SELECT * FROM products ORDER BY created_at DESC LIMIT $1';
    params = [limit + 1];
  }

  const result = await db.query(query, params);
  const hasMore = result.rows.length > limit;
  const items = hasMore ? result.rows.slice(0, limit) : result.rows;
  const nextCursor = hasMore ? items[items.length - 1].created_at : null;

  res.json({
    data: items,
    pagination: { nextCursor, hasMore }
  });
});

যেকোনো স্কেলে দ্রুত (কোনও অফসেট স্ক্যানিং নয়), ডেটা পরিবর্তন হলেও স্থিতিশীল ফলাফল।কনস:
নির্বিচারে পৃষ্ঠাগুলিতে ঝাঁপ দেওয়া যাবে না, মোট পৃষ্ঠা সংখ্যা নেই, কিছুটা জটিল৷কৌশল 3: কীসেট পেজিনেশন (সেরা পারফরম্যান্স)

কীসেট পেজিনেশন অভিন্ন টাইমস্ট্যাম্প সহ সারিগুলি পরিচালনা করতে একটি যৌগিক কার্সার (যেমন create_at + id) ব্যবহার করে। এটি সবচেয়ে শক্তিশালী উচ্চ-পারফরম্যান্স পদ্ধতি, বিশাল ডেটাসেট পরিবেশনকারী API দ্বারা ব্যবহৃত।

-- Keyset uses a unique, ordered column (often id) for precise positioning
SELECT * FROM products
WHERE (created_at, id) < ($1, $2)   -- composite cursor handles ties
ORDER BY created_at DESC, id DESC
LIMIT 20;

তুলনা: কোনটি ব্যবহার করতে হবে

কৌশল

জন্য সেরা স্কেল অফসেট/সীমা
ছোট ডেটাসেট, অ্যাডমিন ইউআই-এর পৃষ্ঠা নম্বর প্রয়োজন ক্ষুদ্র-মাঝারি কার্সার ফিড, অসীম স্ক্রোল, বড় ডেটাসেট
বড় কীসেট বিশাল ডেটাসেট, উচ্চ-কার্যক্ষমতার প্রয়োজন
অনেক বড় সামঞ্জস্যপূর্ণ প্রতিক্রিয়া বিন্যাস পারফরম্যান্স টিপস

আপনার সাজানোর কলাম সূচী করুন:

// Offset-based response
{
  "data": [ /* items */ ],
  "pagination": {
    "page": 3,
    "limit": 20,
    "total": 1543,
    "totalPages": 78
  }
}

// Cursor-based response
{
  "data": [ /* items */ ],
  "pagination": {
    "nextCursor": "2026-07-20T10:30:00Z",
    "hasMore": true
  }
}

পৃষ্ঠা সংখ্যার প্রশ্নগুলির জন্য ORDER BY কলামে একটি সূচী প্রয়োজন, অথবা সেগুলি ধীর

  • বিশাল টেবিলে COUNT(*) এড়িয়ে চলুন: সমস্ত সারি গণনা ব্যয়বহুল — কার্সার পৃষ্ঠায় মোট গণনার প্রয়োজন এড়ায়
  • সীমা ক্যাপ করুন: সর্বাধিক পৃষ্ঠার আকার প্রয়োগ করুন (যেমন, 100) যাতে ক্লায়েন্টরা সবকিছুর অনুরোধ করতে না পারে
  • বড় ডেটার জন্য কার্সার/কিসেট ব্যবহার করুন: অফসেট পেজিনেশন বড় অফসেটগুলিতে খারাপভাবে অবনমিত হয় — ডাটাবেস সমস্ত এড়িয়ে যাওয়া সারিগুলি স্ক্যান করে
  • “hasMore” সনাক্ত করতে সীমা +1 আনুন: একটি পৃথক গণনা ছাড়া পরবর্তী পৃষ্ঠা আছে কিনা তা জানতে একটি অতিরিক্ত সারি অনুরোধ করুন
  • প্রায়শই জিজ্ঞাসিত প্রশ্নপ্রশ্নঃ অফসেট বা কার্সারের পৃষ্ঠা সংখ্যা?

উত্তর: ছোট ডেটাসেট এবং প্রশাসক UIগুলির জন্য অফসেট যার পৃষ্ঠা নম্বর এবং নির্দিষ্ট পৃষ্ঠাগুলিতে ঝাঁপ দেওয়া প্রয়োজন৷ ফিড, অসীম স্ক্রোল এবং বড় ডেটাসেটের জন্য কার্সার যেখানে কর্মক্ষমতা এবং স্থিতিশীলতা গুরুত্বপূর্ণ। কার্সার স্কেল অনেক ভাল কিন্তু নির্বিচারে পৃষ্ঠাগুলিতে যেতে পারে না।

প্রশ্ন: আমার অফসেট পেজিনেশন ধীর কেন?
ডাটাবেস স্ক্যান করে এবং আপনার পৃষ্ঠা ফেরত দেওয়ার আগে 100,000 সারি বাতিল করে — অফসেট বৃদ্ধির সাথে সাথে ক্রমবর্ধমান ধীর। কার্সার বা কীসেট পেজিনেশনে স্যুইচ করুন, যা একটি ইন্ডেক্স করা কলাম ব্যবহার করে সরাসরি অবস্থানে যায়।

প্রশ্ন: পৃষ্ঠাগুলির মধ্যে ডেটা পরিবর্তন আমি কীভাবে পরিচালনা করব?
A: OFFSET 100000উত্তর: অনুরোধের মধ্যে সারি যোগ করা/মুছে দেওয়া হলে অফসেট পেজিনেশন আইটেমগুলি এড়িয়ে যেতে বা নকল করতে পারে। কার্সার পেজিনেশন স্থিতিশীল কারণ এটি একটি নির্দিষ্ট আইটেমের অবস্থানে নোঙ্গর করে, একটি সংখ্যাসূচক অফসেট নয়। ঘন ঘন ডেটা পরিবর্তিত হলে কার্সার পৃষ্ঠা সংখ্যা ব্যবহার করুন।

প্রশ্ন: আমাকে কি মোট গণনা ফেরত দিতে হবে?
উত্তর: পৃষ্ঠা নম্বর সহ অফসেট পেজিনেশনের জন্য, সাধারণত হ্যাঁ। কিন্তু বড় টেবিলে COUNT(*) ব্যয়বহুল। কার্সার পেজিনেশন এটিকে সম্পূর্ণরূপে এড়িয়ে যায় (শুধু “হাসমোর”)। আপনার যদি বিশাল টেবিলে আনুমানিক গণনার প্রয়োজন হয়, ক্যাশে করা বা আনুমানিক গণনা বিবেচনা করুন।

প্রশ্ন: একটি ভাল ডিফল্ট এবং সর্বাধিক পৃষ্ঠার আকার কি?
A: ডিফল্ট হিসেবে 20-25, সর্বোচ্চ 100টি এনফোর্সড সার্ভার-সাইড সহ। এটি প্রতিক্রিয়া আকার এবং অনুরোধের সংখ্যা ভারসাম্য রাখে। সর্বদা সীমা ক্যাপ করুন যাতে ক্লায়েন্টরা

এর সাথে সীমাহীন ডেটার অনুরোধ করতে না পারে৷ উপসংহার
যে কোনো তালিকা-রিটার্নিং API-এর জন্য সঠিক পৃষ্ঠা সংখ্যা অপরিহার্য। ব্যবহার করুন?limit=999999.

ছোট ডেটাসেট এবং প্রশাসক UI-এর জন্য অফসেট/সীমা পৃষ্ঠা নম্বর, ফিড এবং বড় ডেটাসেটের জন্য কার্সার পেজিনেশন এবং ব্যাপক উচ্চ-পারফরম্যান্সের প্রয়োজনের জন্য কীসেট পৃষ্ঠা সংখ্যা

ছোট ডেটাসেট এবং প্রশাসক UI-এর জন্য অফসেট/সীমা পৃষ্ঠা নম্বর, ফিড এবং বড় ডেটাসেটের জন্য কার্সার পেজিনেশন এবং ব্যাপক উচ্চ-পারফরম্যান্সের প্রয়োজনের জন্য কীসেট পৃষ্ঠা সংখ্যাছোট ডেটাসেট এবং প্রশাসক UI-এর জন্য অফসেট/সীমা পৃষ্ঠা নম্বর, ফিড এবং বড় ডেটাসেটের জন্য কার্সার পেজিনেশন এবং ব্যাপক উচ্চ-পারফরম্যান্সের প্রয়োজনের জন্য কীসেট পৃষ্ঠা সংখ্যা. অফসেট সবচেয়ে সহজ কিন্তু বড় অফসেটগুলিতে অবনতি হয়; ইনডেক্স করা কলাম ব্যবহার করে সরাসরি অবস্থানে লাফ দিয়ে লক্ষ লক্ষ সারিতে কার্সার এবং কীসেট স্কেল। আপনার সাজানোর কলাম সূচী করুন, পৃষ্ঠার আকার ক্যাপ করুন, আরও পৃষ্ঠাগুলি সনাক্ত করতে সীমা +1 আনুন এবং একটি সামঞ্জস্যপূর্ণ প্রতিক্রিয়া বিন্যাস ফেরত দিন। আপনার ডেটা স্কেলের জন্য সঠিক কৌশল বেছে নেওয়া আপনার ডেটা বৃদ্ধির সাথে সাথে আপনার API দ্রুত এবং আপনার ডাটাবেসকে সুস্থ রাখে।

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা