OLTP ও OLAP: লেনদেন বনাম বিশ্লেষণের ডেটা
OLTP, OLAP, and Analytics
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- Transaction processing বনাম analytical query
- ETL/ELT, warehouse ও freshness
- Laravel dashboard-এ precomputed summary
সমস্যা দিয়ে শুরু
CEO গত বছরের প্রতিদিনের sales চান। Production orders table-এ বড় aggregate চালালে checkout latency বেড়ে যায়। একই data হলেও ছোট transactional lookup এবং historical scan-এর resource pattern আলাদা। OLTP ও OLAP আলাদা করে ভাবলে reporting requirement customer-facing path-কে কম ক্ষতিগ্রস্ত করে মেটানো যায়।
সহজ করে বুঝি
OLTP অনেক short transaction, point lookup ও frequent updates-এর জন্য optimize করে। OLAP বড় scan, grouping, joins ও trend analysis-এর জন্য optimize করে; columnar storage ও compressed analytical layouts সাহায্য করতে পারে। ETL source থেকে extract/transform/load, ELT destination-এ load করে transform। CDC committed changes pipeline-এ আনতে পারে। Analytical projection সাধারণত কিছু delay নিয়ে source অনুসরণ করে; dashboard-এ freshness label দরকার। Warehouse authoritative checkout state নয়।
পরিচিত একটি উপমা
দোকানের cashier প্রতিটি sale দ্রুত receipt-এ লেখেন। Accountant রাতে receipts থেকে মাসিক report বানান। Cashier-কে প্রতিটি customer-এর মাঝখানে বছরের সব receipt গুনতে বললে line বাড়ে। Report দেরিতে হলেও চলতে পারে, কিন্তু আজকের payment receipt ঠিক থাকতে হবে।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart LR A[Laravel Checkout] --> O[(OLTP orders)] O --> C[CDC or scheduled extraction] C --> W[(Analytics model)] W --> S[(Daily sales summary)] S --> D[Laravel reporting dashboard]
Checkout source transaction-এ সীমিত কাজ করে। Extraction pipeline analytics model update করে। Summary precompute dashboard read ছোট করে। Pipeline lag, duplicate events ও correction handling দরকার। Refund বা backdated adjustment কোন business date-এ যাবে তা definition ছাড়া daily sales number ambiguous থাকে।
PHP ও Laravel-এ প্রয়োগ
Reporting controller fragment: analytics connection ও daily_sales table আছে, tenant/day unique key এবং revenue_minor integer configured। User tenant access verified। from/to validated date এবং maximum ৩১ দিনের range application guard-এ enforce করুন। Query নিজে unlimited date range validation করে না।
use Illuminate\Support\Facades\DB;
$rows = DB::connection('analytics')->table('daily_sales')
->where('tenant_id', $tenantId)
->whereBetween('day', [$from, $to])
->orderBy('day')
->get(['day', 'orders_count', 'revenue_minor', 'currency', 'updated_at']);
return response()->json([
'data' => $rows,
'freshness' => 'Summary updated asynchronously',
]);সুবিধা, সীমাবদ্ধতা ও trade-off
Analytical isolation production contention কমায় এবং complex reporting সহজ করে। Extra pipeline, storage, privacy governance ও lag যোগ হয়। Small dataset-এ indexed bounded query ও read replica যথেষ্ট হতে পারে; separate warehouse শুরুতেই বাধ্যতামূলক নয়। Replica report চালালেও heavy scan replay lag বা shared IO-তে প্রভাব ফেলতে পারে। Data volume ও freshness objective measurement থেকে architecture বাড়ান।
সাধারণ ভুল
- Dashboard number-কে instant authoritative balance বলা।
- Duplicate CDC event-এ aggregate দ্বিগুণ করা।
- Timezone/currency মিশিয়ে অর্থহীন revenue total দেখানো।
আরও একটু গভীরে
Fact table event grain নির্ধারণ করে: order, item, payment না refund? Dimension snapshot বা slowly changing dimension historical interpretation বাঁচায়। Exactly-once marketing claim-এর বদলে pipeline deduplication, idempotent upsert ও reconciliation বিচার করুন। Backfill live stream-এর সঙ্গে merge করতে checkpoint/version দরকার। Sensitive customer fields warehouse-এ কপি করার আগে retention ও access boundary ঠিক করুন।
মনে রাখুন
OLTP operational truth দ্রুত রাখে, OLAP বড় প্রশ্নের efficient view দেয়। Grain, business definition ও freshness label জরুরি। Pipeline correctness ও reconciliation reporting-এর অংশ।
নিজে চেষ্টা করুন
এক order payment, partial refund এবং next-day correction-এর timeline লিখুন। Daily gross, net revenue ও paid order count কীভাবে বদলাবে নির্ধারণ করুন। Production checkout load না বাড়িয়ে report rebuild করার plan দিন।
নিজের বোঝা যাচাই করুন
1. OLAP শুধু replica?
না। Analytical workload ও data layout-এর ধারণা। Replica একই transactional schema দিতে পারে, warehouse transformed/columnar model রাখতে পারে।
2. Real-time dashboard মানে zero lag?
না। Marketing term-এর বদলে measured freshness objective দিন। Source commit থেকে projection visible হওয়ার delay দেখুন।
3. ETL আর ELT?
Transform destination-এ load-এর আগে নাকি পরে—মূল পার্থক্য। Data volume, governance ও tool capability অনুযায়ী choose করুন।
4. Refund কোথায় গণনা?
Business metric definition নির্ধারণ করে event date, order date বা adjustment date। Definition ছাড়া একই number ভিন্ন অর্থ দিতে পারে।
5. Warehouse দরকারই?
না। Small workload bounded query বা summary table-এ চলতে পারে। Production contention ও analytical need প্রমাণ হলে architecture বাড়ান।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।