17.2
Amazon Redshift আর Spectrum
OLAP বনাম OLTP, leader node আর compute node, ডেটা load করা, snapshot আর DR, Spectrum আর Serverless।
24 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি পারবে
- Data warehouse কীসের জন্য, আর কেন Redshift (OLAP) আর RDS বা Aurora (OLTP) একটার জায়গায় আরেকটা চলে না, বুঝিয়ে বলতে।
- Redshift একটা query-র উত্তর কীভাবে দেয় তা বলতে: columnar storage, compression আর zone map, একটা leader node যে plan করে আর ফলাফল জোড়া দেয়, compute node আর slice যারা একসাথে কাজ করে (MPP), আর distribution key ও sort key যেগুলো একে দ্রুত বা ধীর বানায়।
- Provisioned cluster (RA3, reserved node, pause আর resume) আর Redshift Serverless (RPU, প্রতি সেকেন্ডের হিসাবে বিল)-এর মধ্যে বেছে নিতে, আর কোন node type বিদায় নিচ্ছে তা জানতে।
- ঠিক পথে data load করতে: S3 হয়ে Data Firehose, IAM role দিয়ে S3 থেকে একসাথে
COPY, JDBC দিয়ে বড় batch-এ insert, Enhanced VPC Routing, আর zero-ETL integration। - একটা warehouse সুরক্ষিত রাখতে: automated আর manual snapshot, retention, নতুন cluster-এ restore, KMS snapshot copy grant সহ cross-Region snapshot copy, Multi-AZ আর relocation।
- Load না করেই S3-এর data query করতে Redshift Spectrum ব্যবহার করতে, আর পরীক্ষার প্রশ্নে Athena, Redshift আর Spectrum-এর মধ্যে বেছে নিতে।
#Data warehouse কেন লাগে
Lesson 16.1-এ database-কে দুই ভাগে ভাগ করেছিলাম। OLTP হলো একটা app-এর প্রতিদিনের কাজ: order দেওয়া, টাকা পাঠানো, অসংখ্য ছোট transaction, প্রত্যেকটা হাতে গোনা কয়েকটা row ছোঁয়। OLAP হলো ইতিহাস নিয়ে বড় প্রশ্ন: তিন বছরের জেলা আর মাস ধরে বিক্রি, একটা query পড়ে কোটি কোটি row, কিন্তু মাত্র কয়েকটা column। দ্বিতীয় ধরনের কাজ প্রথম ধরনের database-এ চালালে সবার জন্য app ধীর হয়ে যায়। এই লেসন দ্বিতীয় দুনিয়ার জন্য বানানো AWS service নিয়ে।
Amazon Redshift হলো AWS-এর fully managed, petabyte মাপের data warehouse। নানা জায়গা থেকে data এনে relational table-এ load করো, আর analyst, dashboard আর BI tool সারাদিন তাকে SQL-এ প্রশ্ন করে। এটা OLAP engine, OLTP না।
#Redshift আসলে কী
Note আর slide কয়েক লাইনে Redshift-এর পরিচয় দেয়। লাইনগুলো আর তাদের আসল মানে দেখে নাও।
- Fully managed: machine দেওয়া, patch করা, বিকল node বদলানো, backup নেওয়া, cluster নজরে রাখা, সব AWS করে।
- PostgreSQL থেকে জন্ম, কিন্তু OLTP-র জন্য না: Redshift শুরু হয়েছিল PostgreSQL থেকে, তাই এর SQL আর client driver চেনা লাগে (JDBC, PostgreSQL-এর protocol), কিন্তু ভেতরের engine পুরো আলাদা। এটা বানানো বড় scan আর join-এর জন্য, এক row-এর transaction-এর জন্য না।
- Columnar storage আর MPP (massively parallel processing): data রাখা হয় column ধরে, compress করে, আর প্রতিটা query ভাগ হয়ে যায় অনেকগুলো node-এ, যারা একই সময়ে কাজ করে। Analytics-এ Redshift দ্রুত হওয়ার পুরো কারণ এই দুটো ধারণা। পরের দুটো অংশে এগুলো দেখবে।
- Petabyte মাপ: একটা RA3 cluster-এ ১৬ PB পর্যন্ত managed storage রাখা যায়।
- SQL interface: analyst-রা সাধারণ SQL লেখেন; Amazon QuickSight (lesson 17.5) বা Tableau-র মতো BI tool সরাসরি এর সাথে connect হয়।
- দুই রকম ব্যবস্থা: একটা provisioned cluster, যার মাপ তুমি ঠিক করো, অথবা Redshift Serverless, যে নিজের মাপ নিজে ঠিক করে।
#Columnar storage
Row store, যেমন RDS, প্রতিটা row-এর column-গুলো disk-এ পাশাপাশি রাখে: পুরো একটা order একবারে পড়তে বা লিখতে একদম ঠিক। Column store প্রতিটা column একসাথে রাখে: সব তারিখ এক জায়গায়, সব amount আরেক জায়গায়। এর তিনটা ফল:
- ৫০টা column-এর মধ্যে ২টা যে query-র লাগে, সে শুধু ওই ২টাই পড়ে।
- একটা column-এ একই রকম মান থাকে (তারিখের পাশে তারিখ), তাই খুব ভালো compress হয়, প্রায়ই কয়েক গুণ ছোট, মানে পড়ার জিনিস কম।
- প্রতিটা 1 MB block-এর সর্বনিম্ন আর সর্বোচ্চ মান Redshift মনে রাখে, এর নাম zone map। Table যদি তারিখ ধরে সাজানো থাকে (sort key), অক্টোবরের query অক্টোবরের বাইরের তারিখের প্রতিটা block না পড়েই বাদ দেয়।
দাম দিতে হয় এখানে: একটা পুরো row আনতে প্রতিটা column-এ যেতে হয়, আর একটা row বদলালে block আবার লিখতে হয়। এই কারণে Redshift OLTP-তে খারাপ। নিজে চেষ্টা করে দেখো:
Row storage বনাম column storage
এক বছরের একই sales table, দুইভাবে রাখা। একটা query বেছে নাও, আর দেখো কোন layout-কে কোন কোন block পড়তে হয়।
একটা query বেছে নাও
Row store (OLTP ধাঁচ): ১২টা block, মাসে একটা
Column store (Redshift): ৬০টা block, প্রতি column-এর প্রতি মাসে একটা
এখনো কিছু পড়া হয়নি। ওপরের একটা query বেছে নাও।
শেখানোর জন্য একটা মডেল: আসল block 1 MB-র, তাতে লাখো মান থাকে, আর compression column store-কে আরও ছোট করত।
#Leader node আর compute node
একটা provisioned cluster-এ থাকে একটা leader node আর এক বা একাধিক compute node।
- Leader node হলো cluster-এর endpoint। Client-রা JDBC বা PostgreSQL driver দিয়ে এর সাথেই connect করে। সে প্রতিটা query পড়ে বোঝে, execution plan বানায়, compile করে, compute node-দের পাঠায়, আর তাদের আংশিক ফলাফল জোড়া দিয়ে চূড়ান্ত উত্তর বানায়। Table-এর কোনো data সে রাখে না। এর জন্য আলাদা টাকাও লাগে না।
- Compute node data রাখে আর plan চালায়। প্রতিটা node কয়েকটা slice-এ ভাগ করা, আর প্রতিটা slice প্রতিটা table-এর একটা ভাগের মালিক, সেই ভাগে বাকিদের সাথে একসাথে কাজ করে। Node বাড়ালে slice বাড়ে, তাই একই query-তে প্রতি slice-এর কাজ কমে।
- Single-node cluster-এ একটা machine-ই দুই কাজ করে; test-এর জন্য চলে, production-এর জন্য সুপারিশ করা হয় না।
Row-গুলো slice-এ কীভাবে ছড়ানো হবে, সেটা distribution style: AUTO (Redshift নিজে ঠিক করে, এটাই default), EVEN (পালা করে সমানভাবে), KEY (একটা column-এর একই মানের row একই slice-এ যায়, তাই ওই column ধরে join নিজের node-এই হয়), অথবা ALL (ছোট একটা table-এর পুরো copy প্রতিটা node-এ)। KEY ভুল বাছলে হয় skew: একটা node-এর কাছে বেশিরভাগ data, আর পুরো query তার জন্য অপেক্ষা করে।
একটা query, অনেকগুলো node
ঢাকার একটা e-commerce shop তার warehouse-কে জিজ্ঞেস করছে ২০২৫ সালে জেলা ধরে মোট বিক্রি কত। দেখো leader node কীভাবে কাজটা ভাগ করে, আর compute node-রা একসাথে সেটা করে ফেলে।
পরিস্থিতি
Leader plan করে, প্রত্যেক compute node একই সময়ে নিজের ভাগটা পড়ে, তারপর leader জোড়া দেয়।
BI tool cluster-এর endpoint-এ connect করে, আর endpoint মানে সবসময় leader node। সে একটা SQL query পাঠায়: ২০২৫ সালের জেলা ধরে amount-এর যোগফল। Client কখনো সরাসরি compute node-এর সাথে কথা বলে না।
এই স্তরে আরও কয়েকটা জিনিস জানা দরকার: workload management (WLM) query-গুলোকে আলাদা queue-তে রাখে, যাতে একটা বিশাল report ছোট dashboard query-গুলোকে আটকে না দেয়; concurrency scaling একসাথে অনেক user query করলে সাময়িক বাড়তি capacity যোগ করে; data sharing দিয়ে আরেকটা cluster বা account copy না করেই চালু data পড়তে পারে; আর result caching একই query আবার এলে memory থেকে উত্তর দেয়।
#Provisioned নাকি Serverless
#Provisioned cluster
তুমি আগে থেকে node type আর node-এর সংখ্যা বেছে নাও, আর node-ঘণ্টা ধরে টাকা দাও। স্থির, আন্দাজ করা যায় এমন ব্যবহারে এক বা তিন বছরের জন্য reserved node কিনলে অনেক ছাড় পাও (EC2 Reserved Instance-এর মতো, lesson 4.4)। Cluster pause করা যায় (তখন শুধু storage-এর টাকা লাগে), আর resize করা যায়।
| Node পরিবার | কী এটা | অবস্থা (অক্টোবর ২০২৬) |
|---|---|---|
| RA3 | Compute, তার সাথে cache হিসেবে বড় local SSD, আর S3-এ Redshift managed storage; storage আর compute আলাদাভাবে বাড়ে, বিলও আলাদা | সাধারণ পছন্দ; Multi-AZ, data sharing আর relocation-এর জন্য এটাই লাগে |
| RG | RA3-এর Graviton-ভিত্তিক উত্তরসূরি, একই managed storage, আর S3 query করার নিজস্ব engine ভেতরেই | মে ২০২৬-এ নতুন এসেছে; এখনো পরীক্ষায় নেই |
| DC2 | পুরোনো “dense compute” node, বাঁধা local SSD storage সহ | বিদায় নিচ্ছে: ২০২৫ থেকে নতুন DC2 cluster বা resize বন্ধ; AWS বলছে RA3, RG বা Serverless-এ চলে যেতে |
RA3-তে তুমি কতটা data রাখবে তা local disk-এ আটকে নেই: যে block কম ব্যবহার হয় সেগুলো শুধু S3-এ থাকে, আর দুই জায়গাতেই storage-এর দাম একই। এজন্যই slide আর note বলতে পারে “petabyte পর্যন্ত বাড়ে”।
#Redshift Serverless
Redshift Serverless একই engine চালায়, কিন্তু মাপার মতো কোনো cluster নেই। তুমি বানাও একটা namespace (database, user আর data) আর একটা workgroup (compute)। Capacity মাপা হয় Redshift Processing Unit-এ (RPU, প্রতিটায় 16 GB memory): একটা base capacity ঠিক করো (default ১২৮ RPU, ৪ থেকে ৫১২ পর্যন্ত, কিছু Region-এ ১,০২৪), আর ভারী query এলে Serverless বাড়ে, অলস থাকলে কমে। টাকা দাও RPU-ঘণ্টা ধরে, প্রতি সেকেন্ডের হিসাবে, কমপক্ষে ৬০ সেকেন্ড, শুধু যখন query চলে, তার সাথে managed storage।
Provisioned clusterRedshift Serverless
- Node type আর সংখ্যা তুমি বাছো
- চালু থাকলে node-ঘণ্টা ধরে টাকা (ছাড়ের জন্য reserved node)
- স্থির, ভারী, আন্দাজ করা যায় এমন কাজে সেরা
- Multi-AZ অপশন (RA3), relocation, snapshot schedule
- Base আর maximum RPU বাছো, বা কিছুই না
- Query চললে প্রতি সেকেন্ডের হিসাবে টাকা, অলস থাকলে কিছুই না
- হঠাৎ ভিড়, অনিশ্চিত বা মাঝেমধ্যে কাজ, আর নতুন project-এ সেরা
- প্রতি ৩০ মিনিটে recovery point, ২৪ ঘণ্টা থাকে, তার সাথে manual snapshot
#Data ঢোকানো
Slide-এর নিয়মটা সোজা: ছোট insert-এর চেয়ে বড় insert অনেক ভালো। Redshift বানানোই হয়েছে বড় বড় batch গিলে ফেলার জন্য। চেনা পথ চারটা।
-
Amazon Data Firehose → S3 →
COPY। Firehose streaming record জমায়, file বানিয়ে একটা S3 bucket-এ লেখে, তারপর তোমার হয়ে cluster-এCOPYচালায় (lesson 13.6)। প্রায় real time: কয়েক মিনিট পিছিয়ে (buffer interval, default ৩০০ সেকেন্ড, ০ থেকে ৯০০-র মধ্যে বদলানো যায়, তার ওপরCOPY-এর সময়)। Lesson 13.6-এ যেমন দেখেছ, Firehose cluster-এ পৌঁছায় তোমার VPC-র বাইরে থেকে। -
S3 থেকে
COPY। Load করার সবচেয়ে দ্রুত পথ। একটা command একটা prefix-এর নিচের সব file load করে, একসাথে, প্রতিটা slice কিছু file নিয়ে। বড় data-কে কাছাকাছি মাপের কয়েকটা file-এ ভাগ করো, সংখ্যাটা slice-এর গুণিতক হলে সবচেয়ে ভালো, compress করা (gzip, bzip2, zstd…) বা columnar (Parquet, ORC)। S3 পড়ার অনুমতি আসে cluster-এর সাথে লাগানো একটা IAM role থেকে:copy sales from 's3://shop-staging-example/sales/2026/10/' iam_role 'arn:aws:iam::111122223333:role/RedshiftCopyRole' format as parquet; -
JDBC দিয়ে app থেকে insert, যেমন EC2 থেকে। চলে, কিন্তু batch করে লেখো: এক transaction-এ হাজার হাজার row-এর একটা insert, কখনো এক statement-এ এক row না। বড় পরিমাণ হলে file S3-এ লেখো আর
COPYকরো। -
Zero-ETL integration। Aurora MySQL আর PostgreSQL, RDS for MySQL, PostgreSQL আর Oracle, আর DynamoDB কয়েক সেকেন্ডের মধ্যে অবিরাম Redshift-এ data পাঠাতে পারে, কোনো pipeline বানাতে হয় না (lesson 7.3)। পরীক্ষার সূত্র: “Aurora/DynamoDB-র data নিয়ে Redshift-এ analytics, ETL বানানো ছাড়া”।
Enhanced VPC Routing। সাধারণত cluster আর S3-এর মধ্যে COPY আর UNLOAD-এর traffic তোমার VPC-র বাইরে দিয়ে যায়। Enhanced VPC Routing চালু করলে Redshift সেটা জোর করে তোমার VPC-র ভেতর দিয়ে পাঠায়, তাই security group, network ACL, VPC endpoint policy আর VPC Flow Logs সব খাটে। তখন VPC-তে S3-এ যাওয়ার একটা পথ থাকতেই হবে: একটা S3 gateway endpoint (lesson 22.2), বা NAT বা internet gateway; নইলে load fail করে।
Redshift-এ data ঢোকানো
Cluster-এ data পৌঁছানোর চারটা পথ, আর যেসব ভুলে load ধীর হয় বা আটকে যায়।
পরিস্থিতি
Firehose নিজে row insert করে না: সে S3-এ file রাখে, তারপর তোমার হয়ে COPY চালায়।
Shop-এর click event-গুলো আসে Amazon Data Firehose-এ। Buffer size বা buffer interval পূর্ণ না হওয়া পর্যন্ত Firehose সেগুলো জমিয়ে রাখে (lesson 13.6)।
#Snapshot আর disaster recovery
Redshift নিজের backup নেয় snapshot দিয়ে: নির্দিষ্ট মুহূর্তের, incremental backup (শুধু বদলানো block রাখা হয়), রাখা থাকে Redshift-এর নিজের সামলানো S3-এ। ওই bucket তোমার S3 console-এ দেখা যায় না।
| Automated snapshot | Manual snapshot | |
|---|---|---|
| কখন | মোটামুটি প্রতি ৮ ঘণ্টায় বা প্রতি node-এ ৫ GB data বদলালে, যেটা আগে হয়; অথবা তোমার বানানো schedule ধরে (প্রতি ঘণ্টায় পর্যন্ত) | যখন তুমি নাও |
| কতদিন থাকে | Retention period ধরে, default ১ দিন, ১ থেকে ৩৫ দিন; তারপর নিজে থেকে মুছে যায় | তুমি না মোছা পর্যন্ত (বা তোমার দেওয়া retention), cluster মুছে ফেললেও |
| বন্ধ করা যায়? | RA3-তে না | – |
Restore সবসময় একটা নতুন cluster বানায়; সব block আসার আগেই query শুরু করা যায়। Serverless-এ recovery point নেওয়া হয় প্রতি ৩০ মিনিটে (বা প্রতি node-এ ৫ GB বদলালে), থাকে ২৪ ঘণ্টা, আর manual snapshot-ও নিতে পারো।
Redshift-এর DR-এর চিরচেনা উত্তর cross-Region snapshot copy। চালু করো, একটা destination Region বাছো, আর প্রতিটা automated আর manual snapshot আপনা থেকেই সেখানে copy হয়। Copy হওয়া automated snapshot destination-এ default ৭ দিন থাকে (বদলানো যায়)। Source Region বিকল হলে destination Region-এ একটা নতুন cluster restore করো (কৌশলগুলো lesson 23.1-এ)।
KMS দিয়ে encrypted cluster হলে copy-র জন্য আরেকটা জিনিস লাগে। KMS key Region-ভিত্তিক (lesson 21.2), তাই destination Region-এ একটা snapshot copy grant বানাতে হয়, যেটা Redshift-কে সেখানকার একটা customer managed key ব্যবহার করতে দেয়, আর copy চালু করার সময় সেই grant বেছে নিতে হয়।
Snapshot আর একটা Region-এর বিপর্যয়
bKash-এর মতো একটা wallet তার fraud warehouse রাখে Singapore-এ, আর snapshot copy করে রাখে Mumbai-তে।
পরিস্থিতি
Snapshot হলো incremental, নির্দিষ্ট মুহূর্তের backup, রাখা থাকে AWS-এর নিজের সামলানো S3-এ।
Automated snapshot default-এ চালু। Redshift মোটামুটি প্রতি ৮ ঘণ্টায় একটা নেয়, বা প্রতি node-এ ৫ GB data বদলালে, যেটা আগে হয়; অথবা তোমার বানানো snapshot schedule ধরে।
#Multi-AZ আর relocation
একটা provisioned cluster সাধারণত চলে একটা Availability Zone-এ: তার node-দের নিজেদের মধ্যে দ্রুত যোগাযোগ লাগে। RA3-তে তোমার data এমনিতেই managed storage-এ নিরাপদ, কিন্তু ওই AZ বন্ধ হলে compute শেষ।
- Cluster relocation (RA3): AZ-এ সমস্যা হলে Redshift cluster-কে একই Region-এর আরেকটা AZ-এ সরিয়ে নেয়, endpoint একই থাকে। কয়েক মিনিট বন্ধ থাকে।
- Multi-AZ deployment (RA3, ২০২৩-এর শেষ থেকে সবার জন্য চালু): Redshift দুটো AZ-এ একই সংখ্যক node রাখে, দুটোই চালু, একটা endpoint-এর পেছনে, একই managed storage পড়ে। একটা AZ গেলে আরেকটা কাজ চালিয়ে যায়। SLA ৯৯.৯% থেকে বেড়ে ৯৯.৯৯% হয়। Compute-এর খরচ দ্বিগুণ। Slide-এর “কিছু cluster-এর জন্য Multi-AZ mode” কথাটার মানে ঠিক এটাই: শুধু RA3।
কোনোটাই পুরো Region বিকল হলে বাঁচায় না; তার জন্য এখনো cross-Region snapshot copy।
একটা AZ নাকি দুটো
Provisioned cluster থাকে একটা Availability Zone-এ, যদি না তুমি Multi-AZ বেছে নাও (শুধু RA3)। একটা AZ বিকল হলে দুই ক্ষেত্রে কী হয় দেখো।
পরিস্থিতি
সব node একটা AZ-এ। Data managed storage-এ নিরাপদ, কিন্তু compute না।
Default cluster তার leader আর সব compute node একটা AZ-এ রাখে, যাতে নিজেদের মধ্যে দ্রুত কথা বলতে পারে। RA3-তে data নিজে থাকে managed storage-এ, যেটা পুরো Region জুড়ে ছড়ানো।
#Redshift Spectrum
সাধারণত Redshift শুধু সেই data query করতে পারে যেটা তার ভেতরে load করা। Redshift Spectrum দিয়ে একটা cluster S3-এ আগে থেকেই রাখা data, load না করেই query করতে পারে, এমনকি cluster-এর ভেতরের table-এর সাথে join-ও করতে পারে।
কীভাবে কাজ করে: তুমি একটা external schema বানাও যেটা একটা data catalog-এর দিকে তাকিয়ে থাকে, সাধারণত AWS Glue Data Catalog (Athena-র catalog বা Apache Hive metastore-ও চলে; lesson 17.6)। Leader query plan করে, আর S3-এর অংশটা দেয় Spectrum layer-কে: AWS-এর চালানো হাজার হাজার node, তোমার cluster-এর বাইরে, যারা একসাথে file পড়ে, filter আর aggregate করে, শুধু ছোট ফলাফল ফেরত দেয়। টাকা দাও S3-এ যত terabyte scan হলো সেই ধরে (প্রতি TB-তে প্রায় ৫ USD, Athena-র মতো), তাই Parquet আর partition এখানেও 17.1-এর মতোই জরুরি।
- Query শুরু করতে একটা Redshift cluster লাগবেই (বা Serverless workgroup)। Spectrum Redshift-এর একটা feature, আলাদা কোনো service না।
- RA3 আর DC2 cluster-এ S3-এর data cluster-এর একই Region-এ থাকতে হবে।
- External table মূলত পড়ার জন্য: এর row update বা delete করা যায় না।
Redshift Spectrum দিয়ে S3-এ query
Shop তিন বছরের পুরোনো clickstream S3-এ Parquet হিসেবে রাখে। Spectrum সেখানেই query করে, আর cluster-এর ভেতরের table-এর সাথে join করে।
পরিস্থিতি
Spectrum আলাদা একটা fleet দিয়ে S3 পড়ে, তারপর cluster query শেষ করে।
একজন analyst জানতে চান: ২০২৩ সালে customer segment ধরে click কত। Click হলো S3-এর দিকে তাক করা একটা external table; segment হলো cluster-এর ভেতরের সাধারণ একটা table।
চিরচেনা ব্যবহার হলো গরম আর ঠান্ডা data: শেষ ১২ মাসের বিক্রি Redshift-এ, দ্রুত dashboard-এর জন্য; তার আগের ৫ বছর S3-এ Parquet হিসেবে, সস্তায়; আর একটা query দুটোই ছুঁতে পারে।
#Athena, Redshift নাকি Spectrum?
| দরকার | উত্তর | কেন |
|---|---|---|
| S3-এর file-এ মাঝেমধ্যে ad-hoc SQL, কোনো infrastructure না, প্রতি query-তে টাকা | Athena (17.1) | Serverless, load বা চালানোর কিছু নেই |
| জটিল join আর aggregation, সারাদিন অনেক user-এর BI dashboard, বারবার ভারী report | Redshift | Load করা, সাজানো, columnar data, নিজস্ব compute-এ |
| Redshift আগে থেকেই আছে, S3-এর data load না করে query করে warehouse-এর table-এর সাথে join করতে চাই | Redshift Spectrum | তোমার cluster আর Spectrum fleet মিলে |
| Aurora/RDS/DynamoDB-র data নিয়ে analytics, pipeline বানানো ছাড়া | Redshift-এ zero-ETL | অবিরাম replication |
Note-এর exam trick, মানে একই রেখে: মাঝেমধ্যে ad-hoc query → Athena; বিশাল data-য় জটিল OLAP, reporting আর বারবার ভারী query → Redshift; “Redshift cluster-এ load না করে S3-এর data query” → Redshift Spectrum।
#কোথায় গোলমাল হয়
| লক্ষণ | কারণ | সমাধান |
|---|---|---|
| প্রতি সন্ধ্যায় checkout ধীর | Report চলছে Aurora writer-এ | Redshift-এ load করো (zero-ETL), report সেখানে চালাও |
| একটা query ধীর, অথচ তিনটা node-এর বেশিরভাগ বসে আছে | খারাপ distribution key থেকে data skew | AUTO বা EVEN distribution, বা অনেকগুলো সমানভাবে ব্যবহৃত মানের key |
| Join করতে node-দের মধ্যে gigabyte-এর পর gigabyte যায় | Join হওয়া table আলাদা key-তে ভাগ করা | দুটোকেই join key ধরে ভাগ করো; ছোট dimension table-এ ALL |
| তারিখের range-এর query পুরো table scan করে | তারিখের column-এ sort key নেই | Filter-এ ব্যবহৃত column-এ sort key, যাতে zone map block বাদ দিতে পারে |
| এক মাসের data load করতে ঘণ্টার পর ঘণ্টা | একটা বিশাল compressed file, তাই একটা slice কাজ করে | কাছাকাছি মাপের অনেক file-এ ভাগ করো, slice-এর গুণিতক |
| App সেকেন্ডে মাত্র কয়েকটা row insert করতে পারে | JDBC দিয়ে এক row করে insert | একাধিক row-এর batch, বা S3-এ file আর COPY |
COPY access denied দিয়ে fail | Cluster-এর IAM role bucket পড়তে পারে না | Role-কে s3:GetObject আর s3:ListBucket দাও; SQL-এ কখনো key লিখো না |
Security-র একটা পরিবর্তনের পর COPY আটকে থাকে | Enhanced VPC Routing চালু, S3-এ যাওয়ার পথ নেই | S3 gateway endpoint, বা NAT-এর পথ |
Firehose-এর file errors/-এ জমছে | Retry duration-এর চেয়ে বেশি সময় cluster pause বা নাগালের বাইরে | নাগালে আনো; manifest হাতে COPY করো |
| Cross-Region snapshot copy fail করে | Encrypted cluster, destination-এ snapshot copy grant নেই | Destination Region-এর একটা KMS key-এর জন্য grant বানাও |
| রাতে Spectrum query fail করে | টাকা বাঁচাতে cluster pause করা | একটা cluster চালু রাখো, Serverless নাও, বা ওই কাজে Athena |
| নতুন bucket-এ Spectrum query fail করে | Bucket অন্য Region-এ (RA3/DC2) | Data cluster-এর Region-এ রাখো, বা replicate করো |
| Spectrum-এর বিল বেশি | Partition ছাড়া CSV scan হচ্ছে | Parquet আর partition, Athena-র মতোই |
| একটা team Redshift-কে app-এর database বানিয়েছে | OLAP engine-এ OLTP-র কাজ | App-এর জন্য RDS, Aurora বা DynamoDB; analytics-এর জন্য Redshift |
#System design-এ Redshift
- OLTP আর OLAP আলাদা রাখো। App লেখে Aurora বা DynamoDB-তে; Redshift পায় একটা copy, zero-ETL, Firehose বা batch
COPYদিয়ে। - আগে S3-এ নামাও। কাঁচা file থাকে S3 data lake-এ; গরম data Redshift-এ load হয়, ঠান্ডা data Spectrum বা Athena দিয়ে query হয়। S3 থাকে সস্তা, টেকসই আসল রেকর্ড।
- প্রশ্ন মাথায় রেখে table বানাও: সাধারণ filter-এর জন্য sort key, বড় join-এর জন্য distribution key, ছোট dimension table-এ
ALL, অথবাAUTO-কে ঠিক করতে দাও। - ধরন বুঝে মাপ ঠিক করো: সবসময়ের ভারী কাজে reserved node সহ provisioned, হঠাৎ ভিড় বা মাঝেমধ্যে কাজে Serverless।
- দুই রকম বিপদের পরিকল্পনা: AZ-এর জন্য Multi-AZ (বা relocation), Region-এর জন্য cross-Region snapshot copy, encrypted হলে KMS grant সহ।
- তালা দাও: private subnet, security group, নিয়ন্ত্রিত data-র জন্য Enhanced VPC Routing, at rest KMS encryption, in transit TLS,
COPYআরUNLOAD-এর জন্য IAM role, S3 বা CloudWatch-এ audit logging। - চোখে দেখাও: ওপরে dashboard-এর জন্য QuickSight (lesson 17.5); IoT device থেকে dashboard পর্যন্ত পুরো pipeline আছে lesson 17.8-এ।
#নিজে করে দেখো
এই command-গুলো টাকা লাগে এমন resource বানায়। Region ap-southeast-1; output ছোট করে দেখানো। শেষে সব মুছে ফেলো।
#ছোট একটা provisioned cluster
aws redshift create-cluster \
--cluster-identifier shop-dw \
--node-type ra3.large --number-of-nodes 2 \
--master-username admin --manage-master-password \
--iam-roles arn:aws:iam::111122223333:role/RedshiftCopyRole \
--encrypted --enhanced-vpc-routing \
--cluster-subnet-group-name private-dw
# "ClusterStatus": "creating", "NodeType": "ra3.large", "NumberOfNodes": 2,
# "EnhancedVpcRouting": true, "AutomatedSnapshotRetentionPeriod": 1
aws redshift describe-clusters --cluster-identifier shop-dw \
--query 'Clusters[0].[ClusterStatus,Endpoint.Address]'
# [ "available", "shop-dw.c1abcxyz.ap-southeast-1.redshift.amazonaws.com" ]
#Load আর query
create table sales (
order_id bigint,
order_date date sortkey,
district varchar(32),
amount decimal(12,2)
) diststyle auto;
copy sales
from 's3://shop-staging-example/sales/2026/10/'
iam_role 'arn:aws:iam::111122223333:role/RedshiftCopyRole'
format as parquet;
-- INFO: Load into table 'sales' completed, 48211906 record(s) loaded successfully.
select district, sum(amount) from sales
where order_date >= '2026-10-01' group by district order by 2 desc limit 3;
-- district | sum
-- Dhaka | 912337410.50
-- Chattogram| 301442119.00
-- Gazipur | 118902337.75
#S3-এর ওপর Spectrum
create external schema lake
from data catalog database 'clickstream'
iam_role 'arn:aws:iam::111122223333:role/RedshiftCopyRole'
create external database if not exists;
select s.segment, count(*)
from lake.clicks c join customers s on c.customer_id = s.customer_id
where c.year = 2023 and c.month = 10
group by s.segment;
#Snapshot আর DR
aws redshift modify-cluster --cluster-identifier shop-dw \
--automated-snapshot-retention-period 7
aws redshift create-cluster-snapshot \
--cluster-identifier shop-dw --snapshot-identifier before-schema-change
# "Status": "creating", "SnapshotType": "manual"
# Destination Region-এ: সেখানকার একটা KMS key-এর grant
aws redshift create-snapshot-copy-grant --region ap-south-1 \
--snapshot-copy-grant-name dw-mumbai-grant \
--kms-key-id arn:aws:kms:ap-south-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
aws redshift enable-snapshot-copy --cluster-identifier shop-dw \
--destination-region ap-south-1 --retention-period 7 \
--snapshot-copy-grant-name dw-mumbai-grant
# "ClusterSnapshotCopyStatus": { "DestinationRegion": "ap-south-1", "RetentionPeriod": 7 }
# DR মহড়া: copy হওয়া snapshot থেকে Mumbai-তে restore
aws redshift restore-from-cluster-snapshot --region ap-south-1 \
--cluster-identifier shop-dw-dr --snapshot-identifier copy:shop-dw-2026-10-30-06-00
#Serverless পথে
aws redshift-serverless create-namespace --namespace-name shop
aws redshift-serverless create-workgroup --workgroup-name shop-wg \
--namespace-name shop --base-capacity 8 \
--subnet-ids subnet-0abc1234 subnet-0def5678 subnet-0aaa9999
# "workgroup": { "baseCapacity": 8, "status": "CREATING", ... }
শেষে মুছে ফেলো aws redshift delete-cluster --cluster-identifier shop-dw --skip-final-cluster-snapshot, disable-snapshot-copy, delete-cluster-snapshot, আর aws redshift-serverless delete-workgroup / delete-namespace দিয়ে।
#সারসংক্ষেপ
মূল কথাগুলো
- Redshift = fully managed OLAP data warehouse, PostgreSQL থেকে জন্ম কিন্তু OLTP-র জন্য না; SQL interface; QuickSight-এর মতো BI tool এর সাথে connect হয়।
- Columnar storage (শুধু দরকারি column পড়া, জোরালো compression, sort key সহ zone map) আর MPP একে দ্রুত বানায়। চিরাচরিত index নেই।
- Leader node plan করে আর জোড়া দেয় (এটাই endpoint); slice-ওয়ালা compute node data রাখে আর একসাথে plan চালায়। Distribution
AUTO,EVEN,KEYবাALL; খারাপ key মানে skew। - Provisioned (managed storage সহ RA3, reserved node, pause/resize; DC2 বিদায় নিচ্ছে, RG নতুন) বনাম Serverless (RPU, প্রতি সেকেন্ডের বিল, কমপক্ষে ৬০ সেকেন্ড)।
- বড় batch-এ load: Firehose → S3 →
COPY; IAM role দিয়ে S3 থেকে একসাথেCOPY; batch করা JDBC insert; Aurora, RDS, DynamoDB থেকে zero-ETL। Enhanced VPC RoutingCOPY/UNLOAD-কে VPC-র ভেতর দিয়ে পাঠায়, তখন S3 endpoint বা NAT লাগে। - Snapshot: incremental, Redshift-এর সামলানো S3-এ; automated প্রতি ~৮ ঘণ্টা / প্রতি node-এ ৫ GB / schedule, থাকে ১–৩৫ দিন (default ১); manual থাকে না মোছা পর্যন্ত; restore = নতুন cluster।
- DR: cross-Region snapshot copy (copy হওয়া automated default ৭ দিন থাকে); encrypted cluster-এ destination-এ snapshot copy grant লাগে। AZ বিকলের জন্য Multi-AZ (RA3) বা relocation।
- Spectrum: load না করে S3 query, চালু cluster লাগে, হাজারো Spectrum node, Glue Data Catalog, একই Region, প্রতি TB scan-এ টাকা।
- পরীক্ষা: S3-এ ad-hoc → Athena; বারবার ভারী BI/OLAP → Redshift; Redshift থেকে load না করে S3 → Spectrum।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
Amazon Redshift কোন ধরনের কাজের জন্য বানানো?
নিজেকে যাচাই করোপ্রশ্ন
Provisioned Redshift cluster-এর কোন অংশ client-এর connection নেয়, query plan বানায় আর ফলাফল জোড়া দেয়?
নিজেকে যাচাই করোপ্রশ্ন
একই মাপের row-ভিত্তিক database-এর চেয়ে Redshift-এ পঞ্চাশটার মধ্যে একটা column যোগ করার query অনেক দ্রুত চলে কেন?
নিজেকে যাচাই করোপ্রশ্ন
Redshift-এর zone map কী?
নিজেকে যাচাই করোপ্রশ্ন
Redshift-এর automated snapshot default-এ কতদিন থাকে, আর manual snapshot কতদিন?
নিজেকে যাচাই করোপ্রশ্ন
Default অবস্থায় Redshift একটা provisioned cluster-এর automated snapshot কত ঘনঘন নেয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা company দশ বছরের log S3-এ রাখে, আর সেগুলোকে Redshift cluster-এর ভেতরের table-এর সাথে join করতে চায়, log cluster-এ load না করেই। কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা data team মাসে মোটে পাঁচটার মতো ad-hoc SQL query চালায় S3-এর CSV আর Parquet file-এ। কোনো infrastructure চায় না, শুধু প্রতি query-র টাকা দিতে চায়। কোনটা সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
একটা retailer-এর ২০০ জন analyst আর অনেক dashboard সারাদিন ৪০ TB বিক্রির data-য় জটিল join আর aggregation চালায়। কোন service সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
একটা Redshift cluster us-east-1-এর একটা KMS key দিয়ে encrypted। Team eu-west-1-এ cross-Region snapshot copy চালু করল, কিন্তু সেখানে কোনো snapshot আসছে না। কী নেই?
নিজেকে যাচাই করোপ্রশ্ন
পুরো একটা AWS Region অচল হলেও একটা company-কে তার Redshift warehouse ফিরিয়ে আনতে পারতে হবে, সবচেয়ে কম খরচে। Architect কী সাজাবেন?
নিজেকে যাচাই করোপ্রশ্ন
একটা fraud team চায় একটা Availability Zone বিকল হলেও তাদের Redshift warehouse চালু থাকুক, কোনো restore বা অপেক্ষা ছাড়া। কী বেছে নেবে?
নিজেকে যাচাই করোপ্রশ্ন
Redshift-এ data load করা নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা ব্যাংকের নিয়ম, তার Redshift cluster আর S3-এর মধ্যে COPY আর UNLOAD-এর traffic VPC-র ভেতরেই থাকবে, যেখানে security group, endpoint policy আর VPC Flow Logs খাটে। কী চালু করবে?
নিজেকে যাচাই করোপ্রশ্ন
Enhanced VPC Routing চালু করার পর S3 থেকে প্রতিটা COPY আটকে থাকে, তারপর fail করে। Cluster-এর subnet-এ internet gateway বা NAT-এর কোনো route নেই। সম্ভাব্য সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
EC2-তে চলা একটা order service প্রতিটা order JDBC দিয়ে আলাদা আলাদা এক row-এর insert statement-এ Redshift-এ ঢোকায়, আর সেকেন্ডে ৫০টা order-এই cluster হাঁপিয়ে যায়। সবচেয়ে ভালো উন্নতি কী?
নিজেকে যাচাই করোপ্রশ্ন
তিন node-এর একটা cluster-এ একটা query-তে ১০ মিনিট লাগে। Monitoring দেখাচ্ছে দুটো node ১ মিনিট পরেই বসে আছে, তৃতীয়টা ১০ মিনিট কাজ করছে। সম্ভাব্য কারণ কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা বড় fact table প্রায়ই ৩,০০০ row-এর একটা product table-এর সাথে join হয়। প্রতি join-এ node-দের মধ্যে row আদানপ্রদান হয়। Team কী করবে?
নিজেকে যাচাই করোপ্রশ্ন
রাত ১১টায় একজন analyst একটা Spectrum query চালালেন, fail করল। Team টাকা বাঁচাতে প্রতি রাতে provisioned cluster pause করে রাখে। কেন fail করল?
নিজেকে যাচাই করোপ্রশ্ন
Redshift Spectrum নিয়ে কোন দুটো কথা সত্য?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
ap-southeast-1-এর একটা RA3 cluster us-east-1-এর একটা bucket-এর ওপর external table বানাল, আর Spectrum query fail করছে। কারণ কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা start-up শুধু রবিবার রাতে ভারী report চালায়, সপ্তাহের বাকি সময় warehouse প্রায় ছোঁয়ই না। Capacity নিয়ে ভাবতে চায় না। কী বেছে নেবে?
নিজেকে যাচাই করোপ্রশ্ন
Redshift-এর node type নিয়ে আজকের দিনে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Redshift Serverless-এ compute capacity কীভাবে মাপা হয় আর বিল হয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা e-commerce company Redshift-এ তার Aurora MySQL-এর order নিয়ে প্রায় real-time analytics চায়, কোনো ETL pipeline বানানো বা চালানো ছাড়া। উত্তর কী?
নিজেকে যাচাই করোপ্রশ্ন
Note বলে Redshift-এর snapshot copy হয় “অন্য Region-এর S3 bucket-এ”। কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
Slide বলে Redshift Athena-কে হারায় “index-এর জন্য”। বারবার চলা ভারী query Redshift-এ আসলে কীসে দ্রুত হয়?
নিজেকে যাচাই করোপ্রশ্ন
Redshift snapshot restore করা নিয়ে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো উপায় একটা Availability Zone বিকল হওয়া থেকে Redshift warehouse-কে বাঁচায়?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
এর মধ্যে কোনটা Amazon Redshift-এর ভালো ব্যবহার NOT?
নিজেকে যাচাই করোপ্রশ্ন
একটা team প্রতি ৮ ঘণ্টায় cluster-এর snapshot নেয় আর আরেকটা Region-এ copy করে। পরের snapshot-এর ঠিক আগে Region বিকল হলে সবচেয়ে খারাপ ক্ষেত্রে কতটা data হারাতে পারে, আর কীভাবে কমানো যায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা company শেষ ১২ মাসের বিক্রি Redshift-এ রাখে, আর আগের ৬ বছর S3-এ Parquet হিসেবে, মাস ধরে partition করা। Analyst-দের এমন একটা SQL query লাগবে যা এই অক্টোবরকে ছয় বছর আগের অক্টোবরের সাথে তুলনা করে, চালু cluster দিয়েই। কী ব্যবহার করবে?