আপনার order list-এ এখন pagination আছে - page আর limit দিয়ে, যাকে বলে offset pagination। ছোট data-য় এটা দিব্যি চলে। কিন্তু data যখন লাখের ঘরে, আর কেউ ৫০০০ নম্বর page চায় - তখন database-কে প্রথম ১ লাখ সারি গুনে ফেলে দিয়ে তারপরের ২০টা দিতে হয়। Page যত গভীরে, কাজ তত ধীর। শুধু তাই নয়, মাঝখানে নতুন order যোগ হলে page-এর হিসাব সরে গিয়ে একই order দুই page-এ দেখা যেতে পারে।
Cursor pagination - শেষ দেখা জায়গা থেকে শুরু
Cursor ছকে page নম্বর থাকে না - থাকে একটা চিহ্ন: 'শেষ বার যেই id পর্যন্ত দেখেছ, তার পর থেকে দাও'। Database index ধরে সরাসরি সেই জায়গা থেকে শুরু করতে পারে - গভীর page-এও গতি একই থাকে, আর মাঝে নতুন data এলেও হিসাব সরে না। Social feed, chat history, বড় তালিকা - সব জায়গায় এটাই প্রচলিত। দাম হলো: যেকোনো page-এ লাফ দেওয়া যায় না, শুধু আগের-পরের দিকে যাওয়া যায়।
// offset - সহজ, ছোট data-র জন্য যথেষ্ট
GET /orders?page=3&limit=20
// cursor - বড়, বদলাতে থাকা data-র জন্য
GET /orders?cursor=order_9821&limit=20
SELECT * FROM orders WHERE id > 9821 ORDER BY id LIMIT 20;কোনটা বেছে নেবেন, সেটা নির্ভর করে ব্যবহারের উপর। Admin panel-এ নির্দিষ্ট page-এ যাওয়া লাগে আর data মাঝারি - offset-ই ভালো। Customer-facing feed বা লম্বা তালিকা - cursor। Interview-তে এই 'কখন কোনটা' বলতে পারাটাই আসল নম্বর।
Logging - production-এর চোখ
Production-এ কিছু ভেঙে গেলে আপনি server-এর পাশে বসে নেই। তখন একমাত্র ভরসা log - কোন request এসেছিল, কোথায় error হলো, কতক্ষণ লাগল। console.log ছড়িয়ে ছিটিয়ে রাখলে সেটা খুঁজে পাওয়া যায় না; একটা ঠিকঠাক logger (যেমন pino বা winston) দিয়ে গঠনমূলক log রাখুন - সময়, request id, endpoint, status। একটা অনন্য request id প্রতিটা log-এ থাকলে একটা request-এর পুরো যাত্রা খুঁজে বের করা যায়। আর সাবধান: log-এ password বা token কখনো লিখবেন না।
সবাই যে ভুলটা করে
দুটো ভুল: বিশাল data-তে অন্ধভাবে offset pagination ব্যবহার করে ধীর API বানানো, আর production-এ গিয়ে বোঝা যে কোনো কাজের log-ই নেই - তখন bug ধরা মানে অন্ধকারে হাতড়ানো। Logging শখের জিনিস না, এটা production চালানোর পূর্বশর্ত।
আজকের Practice
আপনার order list-এ cursor pagination যোগ করুন offset-এর পাশাপাশি। তারপর দুটোর আচরণ মিলিয়ে দেখুন - মাঝখানে নতুন order যোগ করে offset-এ যে পুনরাবৃত্তি হয়, cursor-এ সেটা হয় কিনা নিজে যাচাই করুন। সাথে একটা logger বসিয়ে প্রতিটা request log করুন।
Interview-এ কীভাবে বলবেন
ছোট বা admin-ধরনের data-তে offset pagination যথেষ্ট, কিন্তু বড় ও বদলাতে থাকা data-তে cursor pagination নিই - কারণ এতে গভীর page-এও index ধরে সরাসরি শুরু করা যায়, গতি পড়ে না, আর নতুন data এলে তালিকা সরে যায় না। Production-এ request id সহ গঠনমূলক log রাখি, যাতে সমস্যা হলে পুরো যাত্রাটা খুঁজে পাওয়া যায়।