Pagination কি?
Pagination হল একটি কৌশল যা বৃহৎ ডেটা সেটে ডেটা বিভক্ত করে একাধিক পৃষ্ঠায় (page) উপস্থাপন করার জন্য ব্যবহৃত হয়। এটি সাধারণত ওয়েব সার্ভিস বা API-তে ব্যবহৃত হয় যেখানে ডেটা একেবারে একসাথে লোড না করে, ছোট ছোট অংশে বিভক্ত হয়ে প্রয়োজনীয় তথ্য প্রদর্শিত হয়। Pagination ডেটার লোডিং টাইম কমায় এবং ব্যবহারকারীকে ডেটা সহজে পড়তে বা দেখতে সাহায্য করে।
RESTful Web Services-এ Pagination একটি সাধারণ প্র্যাকটিস যখন বড় ডেটা সেটের সাথে কাজ করা হয়। API ক্লায়েন্টদের শুধুমাত্র প্রয়োজনীয় ডেটা পাঠানো হয়, যেমন: একটি নির্দিষ্ট পৃষ্ঠা বা কিছু সংখ্যক আইটেম।
RESTful API-তে Pagination কিভাবে কাজ করে?
Pagination সাধারণত তিনটি গুরুত্বপূর্ণ প্যারামিটার ব্যবহার করে কাজ করে:
- Page Number: এটি ডেটার কোন পৃষ্ঠাটি প্রাপ্ত হবে তা নির্ধারণ করে।
- Page Size (Limit): প্রতি পৃষ্ঠায় কতগুলি আইটেম থাকবে তা নির্ধারণ করে।
- Total Count: মোট কতটি আইটেম রয়েছে, এটি ক্লায়েন্টকে সাহায্য করে পরবর্তী পৃষ্ঠার জন্য ডেটা ধারণ করার জন্য।
Pagination ডেটা সাধারণত কুইরি প্যারামিটার হিসেবে পাঠানো হয় এবং সার্ভার সেই অনুযায়ী ডেটা রিটার্ন করে।
উদাহরণ URL:
GET /api/products?page=2&limit=10
এখানে, page=2 হল দ্বিতীয় পৃষ্ঠা এবং limit=10 হল প্রতি পৃষ্ঠায় ১০টি আইটেম।
Pagination এর ধরণ
Offset-based Pagination:
- এই পদ্ধতিতে, আমরা offset এবং limit ব্যবহার করে ডেটা লোড করি।
offsetপ্যারামিটার দিয়ে আমরা ডেটা থেকে শুরু করার অবস্থান নির্ধারণ করি, এবংlimitপ্যারামিটার দিয়ে প্রতি পৃষ্ঠায় যতটি রেকর্ড চাই তা নির্ধারণ করি।
উদাহরণ:
GET /api/products?offset=10&limit=10- এই পদ্ধতিতে, আমরা offset এবং limit ব্যবহার করে ডেটা লোড করি।
Cursor-based Pagination:
- এই পদ্ধতিতে, cursor ব্যবহার করা হয়, যা ডেটার একটি নির্দিষ্ট অবস্থান (যেমন, সর্বশেষ রেকর্ডের আইডি) নির্দেশ করে। এটি বড় ডেটা সেটে আরো দক্ষ এবং নির্ভরযোগ্য।
উদাহরণ:
GET /api/products?cursor=eyJpZCI6MTIzNDU2Nzg5LCJ0aW1lIjoxMjM0NTY3ODk=এখানে, cursor হলো একটি এনকোডেড ভ্যালু যা ডেটার একটি নির্দিষ্ট অবস্থান নির্দেশ করে। এটি পরবর্তী পৃষ্ঠার জন্য ডেটা গ্রহণের জন্য ব্যবহৃত হয়।
RESTful API-তে Pagination প্রয়োগ করা
Pagination RESTful Web Services-এ কার্যকরভাবে প্রয়োগ করতে হলে, সার্ভারে কিছু কৌশল এবং পরিকল্পনা থাকা প্রয়োজন। নিচে একটি উদাহরণ দেওয়া হল যেখানে offset-based pagination ব্যবহার করা হয়েছে।
১. সার্ভারে Pagination Implement করা
ধরা যাক, আমাদের একটি Product টেবিল রয়েছে এবং আমরা এর পৃষ্ঠায় পৃষ্ঠায় ডেটা ফিরিয়ে দেব। প্রথমে, আমরা সার্ভারে page এবং limit প্যারামিটার গ্রহণ করব এবং তারপরে ডেটা রিটার্ন করব।
// Express.js এর উদাহরণ
const express = require('express');
const app = express();
// Example product data (ফেক ডেটা)
const products = Array.from({ length: 100 }, (_, index) => ({
id: index + 1,
name: `Product ${index + 1}`,
}));
app.get('/api/products', (req, res) => {
// Query params থেকে page এবং limit নিন
const page = parseInt(req.query.page) || 1;
const limit = parseInt(req.query.limit) || 10;
// Pagination ক্যালকুলেশন
const offset = (page - 1) * limit;
// Paginated ডেটা রিটার্ন করুন
const paginatedData = products.slice(offset, offset + limit);
// মোট আইটেম গননা করুন
const totalItems = products.length;
res.json({
page,
limit,
totalItems,
data: paginatedData
});
});
app.listen(3000, () => console.log('Server running on port 3000'));
এই উদাহরণে, page এবং limit প্যারামিটার ব্যবহার করে ডেটা রিটার্ন করা হয়েছে। সার্ভার offset এবং limit ব্যবহার করে ডেটা কাটতে সাহায্য করেছে।
২. Response Format
Response-এ পৃষ্ঠার তথ্য, লিমিট এবং মোট আইটেমের সংখ্যা সহ ডেটার একটি অংশ পাঠানো হয়:
{
"page": 2,
"limit": 10,
"totalItems": 100,
"data": [
{ "id": 11, "name": "Product 11" },
{ "id": 12, "name": "Product 12" },
{ "id": 13, "name": "Product 13" },
{ "id": 14, "name": "Product 14" },
{ "id": 15, "name": "Product 15" },
{ "id": 16, "name": "Product 16" },
{ "id": 17, "name": "Product 17" },
{ "id": 18, "name": "Product 18" },
{ "id": 19, "name": "Product 19" },
{ "id": 20, "name": "Product 20" }
]
}
এখানে, page, limit, এবং totalItems সহ ডেটার ১০টি আইটেম পাঠানো হয়েছে।
Large Data Sets এর জন্য Pagination এর Best Practices
- Consistency:
- ডেটার পেজিনেশন মানদণ্ড অনুযায়ী consistent থাকতে হবে, অর্থাৎ, ডেটা এক পৃষ্ঠা থেকে অন্য পৃষ্ঠায় স্থানান্তরিত হলে তা সঠিকভাবে প্রদর্শিত হবে।
- Efficient Queries:
- Pagination করার সময় ডেটাবেস কুয়েরি অবশ্যই দক্ষ হতে হবে যাতে সার্ভার অতিরিক্ত লোড না হয়। যেমন, OFFSET এর পরিবর্তে Cursor-based pagination ব্যবহার করা যেতে পারে।
- Limits on Page Size:
- প্রতিটি পৃষ্ঠায় কতগুলি আইটেম থাকতে পারে তা সীমাবদ্ধ করা উচিত (যেমন, ১০০ থেকে বেশি আইটেম এক পৃষ্ঠায় না দেখানো) যাতে ডেটা লোডিং যথেষ্ট দ্রুত হয় এবং সার্ভারে অতিরিক্ত লোড না পড়ে।
- Cache Frequently Accessed Data:
- পেজিনেটেড ডেটা ফ্রিকোয়েন্টলি এক্সেস হয় এমন ক্ষেত্রে ক্যাশিং ব্যবহার করা যেতে পারে, যা সার্ভারের লোড কমাবে এবং ব্যবহারকারীর জন্য দ্রুত রেসপন্স প্রদান করবে।
- Provide Total Count:
- সার্ভার থেকে মোট আইটেমের সংখ্যা প্রদান করলে ক্লায়েন্টদের পরবর্তী পৃষ্ঠার জন্য নির্দেশনা দেওয়া সহজ হবে।
- Consider Offset vs Cursor-Based Pagination:
- বড় ডেটাসেটের জন্য cursor-based pagination ব্যবহার করা অনেক সময় কার্যকরী হয়, কারণ এটি আরো নির্ভরযোগ্য এবং ডেটা পরিবর্তনের ক্ষেত্রে এক্সট্রা সমস্যা তৈরি করে না।
সারাংশ
Pagination RESTful Web Services-এ একটি গুরুত্বপূর্ণ কৌশল যা বড় ডেটা সেটের সঠিক উপস্থাপনা এবং কার্যকরী লোডিং নিশ্চিত করে। Offset-based pagination এবং cursor-based pagination হল দুইটি জনপ্রিয় পদ্ধতি যার মাধ্যমে ডেটা পৃষ্ঠায় পৃষ্ঠায় বিভক্ত করা হয়। বড় ডেটা সেটের ক্ষেত্রে pagination ব্যবহার করলে সার্ভার লোড কমে এবং ব্যবহারকারীদের জন্য দ্রুত ডেটা লোডিং সম্ভব হয়। Pagination প্রয়োগ করার সময় সর্বদা performance optimization এবং user experience এর দিকে নজর রাখা উচিত।
Read more