OLTP vs OLAP
- ●OLTP হলো দৈনন্দিন transaction system—অনেক ছোট ছোট দ্রুত read/write করে।
- ●OLAP হলো analytics system—বড় ডাটার উপর জটিল aggregation ও scan চালায়।
- ●OLTP row-oriented storage ব্যবহার করে, OLAP column-oriented storage ব্যবহার করে।
সমস্যাটা কী?
ভাবো তোমার একটা bKash-এর মতো অ্যাপ আছে। প্রতি সেকেন্ডে হাজারো ইউজার টাকা পাঠাচ্ছে—প্রতিটা লেনদেন কয়েকটা মাত্র row পরিবর্তন করছে, কিন্তু খুব দ্রুত হতে হবে। এটা একধরনের কাজ।
এবার ভাবো marketing টিম জানতে চায়: "গত ৬ মাসে কোন জেলায় সবচেয়ে বেশি লেনদেন হয়েছে, মাসভিত্তিক গড় কত?" এই query কোটি কোটি row স্ক্যান করে aggregate করবে—এটা সম্পূর্ণ ভিন্ন ধরনের কাজ।
যদি তুমি একই ডাটাবেসে দুটোই চালাও, তাহলে সেই ভারী analytics query চলার সময় তোমার পুরো production system ধীর হয়ে যাবে—ইউজার টাকা পাঠাতে গিয়ে atকে থাকবে। এই কারণেই দুই ধরনের system আলাদা করা হয়: OLTP আর OLAP।
মূল ধারণা
OLTP (Online Transaction Processing) হলো এমন system যা প্রচুর ছোট, দ্রুত transaction handle করে—মূলত একটি বা কয়েকটি record-এর উপর কাজ করে। OLAP (Online Analytical Processing) হলো এমন system যা বিপুল পরিমাণ historical data-র উপর জটিল বিশ্লেষণমূলক query চালায়।
সহজভাবে—OLTP হলো business চালানো, আর OLAP হলো business বোঝা। OLTP বলে "এই order-টা নাও"; OLAP বলে "এই বছর আমরা কেমন করলাম?"
OLTP-তে প্রধান লক্ষ্য low latency ও high concurrency। OLAP-তে প্রধান লক্ষ্য high throughput—অর্থাৎ একটা query অনেক ডাটা প্রসেস করলেও ঠিক আছে, যতক্ষণ সঠিক উত্তর দেয়।
কীভাবে কাজ করে
মূল প্রযুক্তিগত পার্থক্য হলো ডাটা disk-এ কীভাবে সাজানো।
Row-oriented (OLTP)
Row-oriented storage-এ একটা row-এর সব column পাশাপাশি রাখা হয়:
Row1: [id=1, name=Karim, city=Dhaka, amount=500]
Row2: [id=2, name=Rahim, city=Khulna, amount=300]
একটা পুরো order তুলে আনা বা update করা সহজ—সব ডাটা একসাথে আছে। এটাই OLTP-এর জন্য আদর্শ।
Column-oriented (OLAP)
Column-oriented storage-এ প্রতিটা column আলাদা করে রাখা হয়:
id: [1, 2, 3, ...]
city: [Dhaka, Khulna, Dhaka, ...]
amount: [500, 300, 700, ...]
যখন তুমি লেখো "সব amount-এর গড়", তখন শুধু amount column পড়লেই হয়—বাকি column ছোঁয়াই লাগে না। তাছাড়া একই column-এর মান (যেমন বারবার "Dhaka") সহজে compress হয়। তাই বড় aggregation কয়েক গুণ দ্রুত।
তুলনামূলক টেবিল
| বৈশিষ্ট্য | OLTP | OLAP |
|---|---|---|
| উদ্দেশ্য | দৈনন্দিন transaction | বিশ্লেষণ ও রিপোর্ট |
| Query | ছোট, অনেক | বড়, কম |
| Operation | read + write | মূলত read |
| ডাটার পরিমাণ (per query) | কয়েকটি row | লক্ষ-কোটি row |
| Storage | row-oriented | column-oriented |
| Latency target | মিলিসেকেন্ড | সেকেন্ড থেকে মিনিট |
| উদাহরণ | PostgreSQL, MySQL | Snowflake, BigQuery, Redshift |
আলাদা রাখা
একটা সুপারশপের কথা ভাবো। OLTP হলো cash counter—কাস্টমার আসে, একটা একটা করে পণ্যের bill হয়, দ্রুত টাকা নেওয়া হয়। এখানে গতি আর নির্ভুলতা সবচেয়ে জরুরি।
OLAP হলো শপের ম্যানেজারের মাসিক মিটিং—যেখানে পুরো মাসের বিক্রির ডাটা নিয়ে বসে বিশ্লেষণ করা হয়: "কোন পণ্য বেশি বিকেছে, কোন সময় ভিড় বেশি"। ম্যানেজার নিশ্চয়ই cash counter আটকে রেখে এই হিসাব করবে না—তিনি আলাদা office-এ গিয়ে রিপোর্ট নিয়ে কাজ করবেন। ঠিক তেমনি analytics আলাদা system-এ চালানো হয়।
কৌশল: কীভাবে দুটো সংযুক্ত হয়
বাস্তবে OLTP system-এর ডাটা নিয়মিত (যেমন প্রতি রাতে বা real-time-এ) OLAP system-এ কপি করা হয়—এই প্রক্রিয়াকে বলে ETL বা ELT। OLAP system সাধারণত একটা data warehouse-এ থাকে। এভাবে production database কোনো চাপ ছাড়াই চলে, আর analyst-রা warehouse-এ ভারী query চালায়।
কখন ব্যবহার করবে / করবে না
- OLTP: যখন user-facing application—login, order, payment, profile update। যেখানে correctness ও দ্রুত single-record access দরকার।
- OLAP: যখন dashboard, BI report, machine learning-এর জন্য feature, বা historical trend analysis।
Production OLTP database-এ সরাসরি ভারী analytical query চালিও না (যেমন SELECT ... GROUP BY কোটি row-এর উপর)। এটা table lock, CPU spike আর ধীর response সৃষ্টি করে—মানে আসল ইউজাররা ভোগে। দরকার হলে read-replica বা আলাদা warehouse ব্যবহার করো।
বাস্তব উদাহরণ
একটা food delivery কোম্পানির কথা ভাবো। তাদের OLTP (PostgreSQL) সামলায়: order তৈরি, rider assign, payment। প্রতিটা অপারেশন কয়েক মিলিসেকেন্ডে শেষ।
রাতে একটা pipeline সব order ডাটা BigQuery (OLAP) তে নিয়ে যায়। সকালে business টিম BigQuery-তে query চালিয়ে দেখে—কোন এলাকায় delivery time বেশি, কোন restaurant-এ cancel rate বেশি। এই দুটো system আলাদা বলেই দিনের ব্যস্ত সময়েও app fast থাকে এবং analytics-ও smooth চলে।
ইন্টারভিউতে "কেন একই DB-তে OLTP আর OLAP রাখো না?" জিজ্ঞেস করলে দুই শব্দে উত্তর দাও: access pattern। OLTP চায় দ্রুত single-row access (row storage), OLAP চায় বড় column scan (column storage)—একটা storage layout দুটোকে একসাথে optimize করতে পারে না, আর ভারী OLAP query OLTP-এর latency নষ্ট করে।
মূল শব্দ (Key Terms)
মিনি কুইজ
1. OLAP system সাধারণত কোন ধরনের storage layout ব্যবহার করে?
2. নিচের কোনটি সাধারণ OLTP operation?
3. OLTP আর OLAP কেন আলাদা system-এ রাখা হয়?