গ্রাফকিউএল (GraphQL)-এ Pagination হল এমন একটি কৌশল যার মাধ্যমে আপনি অনেক বড় ডেটা সেটকে ছোট ছোট অংশে বিভক্ত করে পর পর লোড করতে পারেন। এটি বিশেষভাবে দরকারি যখন আপনার API থেকে অনেক ডেটা বের করা হয় এবং তা একসাথে লোড করার ফলে সার্ভারের ওপর চাপ পড়ে। Pagination ক্লায়েন্টকে নির্দিষ্ট পরিমাণ ডেটা এনে পরবর্তী অংশগুলির জন্য অনুরোধ করতে সাহায্য করে।
Pagination কী?
Pagination হল একটি প্রযুক্তি যা ডেটাকে পৃষ্ঠাগুলোর মধ্যে ভাগ করে দেয়, যাতে ডেটার সবগুলো অংশ একসঙ্গে লোড না হয়। এটি API রেসপন্সকে ছোট ছোট অংশে ভাগ করে, যেগুলোর মধ্যে ক্লায়েন্ট একটি নির্দিষ্ট সংখ্যক ডেটা নিয়ে আসতে পারে এবং পরবর্তী অংশের জন্য পরবর্তী অনুরোধ করতে পারে।
GraphQL-এর ক্ষেত্রে, Pagination সাধারণত limit এবং offset বা cursor-based pagination দ্বারা নিয়ন্ত্রিত হয়।
Pagination এর বিভিন্ন পদ্ধতি
গ্রাফকিউএল-এ পেজিনেশন করতে দুটি প্রধান পদ্ধতি রয়েছে:
- Limit and Offset Pagination
- Cursor-based Pagination
১. Limit and Offset Pagination
Limit and Offset Pagination পদ্ধতিতে, আমরা নির্দিষ্ট সংখ্যক ডেটা (limit) এবং কোথা থেকে ডেটা শুরু হবে (offset) নির্ধারণ করি। এটি ডেটাকে পৃষ্ঠা ভিত্তিকভাবে ভাগ করে দেয়, যেখানে ক্লায়েন্ট প্রথম পৃষ্ঠা থেকে নির্দিষ্ট সংখ্যক ডেটা নিয়ে আসে এবং তারপর পরবর্তী পৃষ্ঠা বা অংশের জন্য অনুরোধ করতে পারে।
Example:
ধরা যাক, আপনার একটি Post টাইপ আছে এবং আপনি একটি কুয়েরি করতে চান যা প্রথম ১০টি পোস্ট রিটার্ন করবে। পরবর্তীতে পরবর্তী ১০টি পোস্টের জন্য অনুরোধ পাঠানো হবে।
Schema Example:
type Query {
posts(limit: Int, offset: Int): [Post]
}
type Post {
id: ID!
title: String!
content: String!
}
এখানে, limit এবং offset আর্গুমেন্ট ব্যবহার করে প্রথমে ১০টি পোস্ট এবং তারপর পরবর্তী ১০টি পোস্ট পাওয়া যাবে।
Query Example:
query {
posts(limit: 10, offset: 0) {
id
title
}
}
এটি প্রথম ১০টি পোস্ট ফেরত দেবে। পরবর্তী পৃষ্ঠার জন্য, আপনি offset পরিবর্তন করে অনুরোধ করতে পারেন:
query {
posts(limit: 10, offset: 10) {
id
title
}
}
এটি পরবর্তী ১০টি পোস্ট ফেরত দেবে।
২. Cursor-based Pagination
Cursor-based Pagination পদ্ধতি ডেটার জন্য একটি "cursor" প্রদান করে যা প্রতিটি ডেটার একটি ইউনিক আইডেন্টিফায়ার হিসেবে কাজ করে। প্রতিটি ডেটার একটি cursor থাকে যা পরবর্তী ডেটা পেতে ব্যবহৃত হয়। এটি limit and offset এর তুলনায় আরও নির্ভুল এবং দক্ষ, কারণ এটি ডেটার মধ্যে নির্দিষ্ট স্থানে সঠিকভাবে পৌঁছানোর সুবিধা দেয়।
Example:
Schema Example:
type Query {
posts(first: Int, after: String): PostConnection
}
type PostConnection {
edges: [PostEdge]
pageInfo: PageInfo
}
type PostEdge {
node: Post
cursor: String
}
type PageInfo {
endCursor: String
hasNextPage: Boolean
}
type Post {
id: ID!
title: String!
content: String!
}
এখানে, first (limit) এবং after (cursor) প্যারামিটার ব্যবহার করা হয়েছে। প্রতিটি PostEdge এর মধ্যে একটি cursor থাকে যা পরবর্তী পেজের জন্য ব্যবহার করা হবে।
Query Example:
query {
posts(first: 10) {
edges {
node {
id
title
}
cursor
}
pageInfo {
endCursor
hasNextPage
}
}
}
Response Example:
{
"data": {
"posts": {
"edges": [
{ "node": { "id": "1", "title": "Post 1" }, "cursor": "cursor1" },
{ "node": { "id": "2", "title": "Post 2" }, "cursor": "cursor2" },
// ...
],
"pageInfo": {
"endCursor": "cursor2",
"hasNextPage": true
}
}
}
}
এখানে, pageInfo এর endCursor পরবর্তী পেজের জন্য প্রয়োজনীয় cursor প্রদান করে, এবং hasNextPage জানায় যে আরও পেজ আছে কিনা।
পরবর্তী পেজের জন্য কুয়েরি:
query {
posts(first: 10, after: "cursor2") {
edges {
node {
id
title
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
এখানে, "cursor2" হল পূর্ববর্তী পেজের শেষ cursor, যা পরবর্তী পেজের শুরু করার জন্য ব্যবহার করা হয়েছে।
Pagination এর প্রয়োজনীয়তা
Pagination ব্যবহারের প্রধান সুবিধা গুলি হলো:
- পারফরম্যান্স এবং স্কেলেবিলিটি:
যখন একটি API অনেক বড় ডেটা সেট ফেরত দেয়, তখন Pagination ক্লায়েন্টকে শুধুমাত্র প্রয়োজনীয় ডেটার অংশ ফেরত নিয়ে আসতে সাহায্য করে। এতে সার্ভারের ওপর চাপ কমে এবং পারফরম্যান্স বৃদ্ধি পায়। - নেটওয়ার্ক ব্যান্ডউইথ সাশ্রয়:
ডেটার পুরো সেট একবারে না নিয়ে, ক্লায়েন্ট নির্দিষ্ট পৃষ্ঠা বা অংশের ডেটা আনে, যা নেটওয়ার্ক ব্যান্ডউইথ সাশ্রয় করে। - ব্যবহারকারীর অভিজ্ঞতা:
Pagination ব্যবহার করলে ব্যবহারকারী বড় ডেটা সেটের মধ্যে সহজে নেভিগেট করতে পারে। এটি দ্রুত এবং আরও নিয়ন্ত্রিত ডেটা প্রদানের মাধ্যমে ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করে। - ডেটার সঠিক প্রদর্শন:
বড় ডেটা সেটের ক্ষেত্রে Pagination ডেটাকে একটি সুশৃঙ্খল এবং নিয়মিত পদ্ধতিতে দেখাতে সাহায্য করে, যা ক্লায়েন্ট এবং ব্যবহারকারী উভয়ের জন্য উপকারী।
সারাংশ
Pagination হল একটি প্রক্রিয়া যা ডেটা বড় সেট থেকে ছোট ছোট অংশে বিভক্ত করে লোড করতে সাহায্য করে। Limit and Offset এবং Cursor-based Pagination হল দুটি প্রধান পদ্ধতি যা গ্রাফকিউএল API-তে ব্যবহার করা হয়। Pagination ব্যবহার করার মাধ্যমে, ক্লায়েন্ট সহজেই প্রয়োজনীয় ডেটার একটি অংশের জন্য অনুরোধ করতে পারে এবং সার্ভারের কর্মক্ষমতা ও নেটওয়ার্ক ব্যান্ডউইথ সাশ্রয় করতে সাহায্য করে। এটি বড় ডেটা সেটের সাথে কাজ করতে পারফরম্যান্স উন্নত করতে এবং ব্যবহারকারীর অভিজ্ঞতা বৃদ্ধি করতে সহায়ক।
Read more