Skip to main content

Posts

Pagination: Offset Pagination and Cursor Pagination

 ডাটাবেস বা API থেকে বড় পরিমাণের ডাটা ছোট ছোট টুকরো করে ইউজারকে দেখানোর প্রক্রিয়াকে Pagination (পেজিনেশন) বলা হয়। যখন আমাদের টেবিলে হাজার হাজার বা লাখ লাখ ডাটা থাকে, তখন একবারে সব ডাটা লোড না করে পেজ আকারে লোড করা হয়। সবচেয়ে জনপ্রিয় দুটি পেজিনেশন পদ্ধতি হলো Offset Pagination এবং Cursor Pagination । নিচে এ দুটি পদ্ধতির বিস্তারিত আলোচনা করা হলো: ১. Offset Pagination (অফসেট পেজিনেশন) এটি পেজিনেশনের সবচেয়ে সাধারণ এবং সহজ পদ্ধতি। আমরা সাধারণত ওয়েবসাইটে যে ১, ২, ৩, ৪ নম্বর পেজ বা "Next/Previous" বাটন দেখি, সেটি বেশিরভাগ সময় অফসেট পেজিনেশন দিয়েই করা হয়। এটি কীভাবে কাজ করে? এটি ডাটাবেসের LIMIT এবং OFFSET ক্লজ ব্যবহার করে কাজ করে। LIMIT: একটি পেজে কয়টি ডাটা দেখানো হবে (Page Size)। OFFSET: কয়টি ডাটা বাদ দিয়ে (Skip) পরের ডাটাগুলো নেওয়া শুরু হবে। উদাহরণ: ধরি, প্রতি পেজে আমরা ৫টি করে ডাটা দেখাতে চাই ( LIMIT = 5 )। Page 1: LIMIT 5 OFFSET 0 (প্রথম ৫টি ডাটা আসবে) Page 2: LIMIT 5 OFFSET 5 (প্রথম ৫টি বাদ দিয়ে ৬ থেকে ১০ নম্বর ডাটা আসবে) Page 3: LIMIT 5 OFFSET 10 (প্রথম ১০টি বাদ দি...
Recent posts

Internal Implementation of Array

 Array মূলত Contiguous Memory Location    ব্যবহার করে data store করে। ইন্টারনাল প্রসেসিং স্টেপস:  Base Address: Array যখন তৈরি হয়, তখন মেমোরিতে তার শুরুর লোকেশন বা Base Address (ধরি, 1000) ফিক্সড হয়। Element Size: Array-এর ডেটা টাইপ অনুযায়ী প্রতিটি এলিমেন্টের সাইজ ফিক্সড থাকে (যেমন, Integer হলে 4 Bytes)। Direct Formula: যখন আপনি Array[4] চান, তখন CPU মেমোরিতে কোনো লুপ চালায় না। সে সরাসরি এই সূত্রটি ব্যবহার করে: Target Address = Base Address + (Index * Element Size) উদাহরণ: মেমোরিতে Array-এর শুরু যদি হয় 1000 নম্বর ঘরে এবং প্রতিটি এলিমেন্ট যদি 4 Bytes জায়গা নেয়, তবে ৪ নম্বর ইনডেক্সের অ্যাড্রেস হবে: 1000 + (4 * 4) = 1016 । CPU সরাসরি 1016 নম্বর অ্যাড্রেসে জাম্প করে ভ্যালু নিয়ে আসে। কোনো সার্চ বা লুপ লাগে না বলেই এটি O(1) । Python  Dynamic Array Python list (যা আসলে একটি Dynamic Array) এই সমস্যাটি সমাধান করে References বা Pointers-এর মাধ্যমে। Dynamic array কিভাবে Element size fix করবে? আমার array তে যদি digit, string থাকে তখন কিভাবে element size আসবে?  ar...

পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজের মাল্টি প্রসেসিং এবং মাল্টি থ্রেডিং

পাইথন প্রোগ্রামিংয়ে মাল্টি-থ্রেডিং (Multi-threading) এবং মাল্টি-প্রসেসিং (Multi-processing) হলো একই সাথে একাধিক কাজ (Concurrency) করার দুটি ভিন্ন উপায়। ১. মাল্টি-থ্রেডিং (Multi-threading) বাস্তব উদাহরণ: আপনার রেস্টুরেন্টে একজন প্রধান শেফ (CPU/Process) আছেন এবং তার আন্ডারে ৪ জন অ্যাসিস্ট্যান্ট শেফ (Threads) আছেন। তারা সবাই একই রান্নাঘরে (Memory Space) কাজ করছেন। একজন সবজি কাটছেন, একজন মসলা পিসছেন, একজন মাংস ধুচ্ছেন। তারা একই উপাদান এবং থালা-বাসন শেয়ার করছেন। কীভাবে কাজ করে: এখানে একটি মাত্র মেইন প্রোগ্রাম বা প্রসেসের ভেতরে একাধিক "থ্রেড" বা ছোট ছোট কাজের ধারা তৈরি হয়। এরা সবাই কম্পিউটারের একই মেমোরি (RAM) শেয়ার করে। কোথায় ব্যবহার করবেন (I/O Bound Tasks): যখন আপনার প্রোগ্রামে এমন কাজ থাকে যেখানে CPU-কে বসে থাকতে হয় (যেমন: ইন্টারনেট থেকে ফাইল ডাউনলোড করা, ডেটাবেজ থেকে ডেটা আনা, বা ইউজারের ইনপুটের জন্য অপেক্ষা করা)। পাইথনের সীমাবদ্ধতা (GIL): পাইথনে GIL (Global Interpreter Lock) নামের একটি লক থাকে। এর কারণে মাল্টি-থ্রেডিং করলেও পাইথন একসাথে মাত্র একটি থ্রেডকেই CPU ব্যবহার করতে দ...

Offline এ কিছু লিখলে অনলাইনে আসার পর অনলাইনে Data কীভাবে Sync হয়?

  যেমন গুগল Keep, Notion, কিংবা WhatsApp— আমরা অফলাইনে অনেক সময় অনেক কিছু লেখি,, সেগুলো আবার অনলাইনে আসতেই কীভাবে সার্ভারের সাথে মিলিয়ে ফেলে। আসলে এর পেছনে কাজ করে Offline-First Architecture, Local Database, Sync Queue, এবং smart conflict resolution techniques। প্রথমে ব্যবহারকারী যেকোনো কিছু লিখলে বা অ্যাকশন নিলে অ্যাপ সেটিকে সরাসরি লোকাল ডাটাবেজে সেভ করে। মোবাইল অ্যাপগুলো সাধারণত SQLite/CoreData, আর ওয়েব অ্যাপগুলো IndexedDB বা Cache Storage ব্যবহার করে। এতে ইন্টারনেট না থাকলেও ব্যবহারকারী কাজ চালিয়ে যেতে পারে। অ্যাপ সবসময় ডিভাইসের নেটওয়ার্ক Status দেখে। অফলাইনে থাকলে সব পরিবর্তন Pending Sync Queue-তে জমা হয়। অনলাইনে ফিরলেই Background Sync চালু হয় একে একে সব pending changes সার্ভারে পাঠানো হয়। সার্ভার কোন অ্যাকশন গ্রহণ করলে তা লোকাল কিউ থেকে সরিয়ে ফেলা হয় এবং UI আপডেট হয়। WhatsApp-এর offline message sending বা Keep/Notion-এর offline note sync হওয়ার পেছনে এই প্রক্রিয়াই কাজ করে। খুব গুরুত্বপূর্ণ একটি বিষয় হলো conflict resolution। দুই ডিভাইস বা দুই ব্যবহারকারী যদি একই...

gRPC কি?

  gRPC হচ্ছে একটি high-performance, open-source Remote Procedure Call (RPC) framework, যা মূলত Google দ্বারা তৈরি করা হয়েছে। এটি বিভিন্ন সার্ভিস বা অ্যাপ্লিকেশনের মধ্যে দ্রুত এবং কার্যকর যোগাযোগ নিশ্চিত করে, বিশেষত microservices architecture-এ। 🔹 gRPC কীভাবে কাজ করে: এটি Protocol Buffers (Protobuf) ব্যবহার করে ডাটা serialize করে। অর্থাৎ JSON/XML এর বদলে Protobuf ব্যবহার করে, যা size এ ছোট, parsing এ দ্রুত, এবং network-efficient। এটি HTTP/2 প্রোটোকলের ওপর চলে, যার ফলে multiplexing, streaming, এবং header compression সুবিধা পাওয়া যায়। 🔹 কেন gRPC ব্যবহার করা হয়: High Performance Communication JSON এর তুলনায় 5–10 গুণ দ্রুত data transfer হয়।Cross-Language Support C#, Java, Python, Go, Node.js সহ অনেক ভাষায় সহজে কাজ করে। Strongly Typed Contracts Protobuf .proto ফাইলের মাধ্যমে strict contract define করা হয়। এর ফলে client-server উভয়েই একই ডাটা স্ট্রাকচারে কাজ করে। Bi-directional Streaming Support gRPC একসাথে client থেকে server এবং server থেকে client-এ ডাটা স্ট্রিম করতে পারে। এটি ...